Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by shyxiaolong · Apr 22, 2021 at 06:16 PM · c#unity 5unity5programmingprocedural

Hint Joint like a rope have weird behavior

i am beginer and i have cube in air with element attached him with no rotation like a node, i have a couple cubes for simulate rope with hint joint. i have clicking right click at a cube and spawn rope from direction player to node and attaching last element rope with player and this working very vell. when player doesnt have velocity, and blocked rotation on rigidbody elements. but sometimes if i have been jumped and try to spawn rope in moving elements rope have weird rotations, and sometimes cubes rotation blocks. how i could work with rotations rope or i dont know, any advice? thanks. p.s sorry for bad english.

private void CheckMouseActivity() { float x = Input.mousePosition.x; float y = Input.mousePosition.y; float z = Input.mousePosition.z;

         Vector3 point = new Vector3(x, y, z);
 
         if (Input.GetMouseButton(1) && !m_ropeIsActive)
         {
             m_aiming = true;
 
             Ray ray = Camera.main.ScreenPointToRay(point);
             GenerateRope(ray);
         }
        if(Input.GetButton("Jump") && m_ropeIsActive)
         {
             for (int i = 0; i < rope.Count; i++)
             {
                 DestroyImmediate(rope[i]);
                 //rope[i].active = false;
             }
             playerRb.AddForce(new Vector3(6f, 6f), ForceMode.Impulse); //TODO переделать, добавить импульс в зависимости от скорости и направления
             m_ropeIsActive = false;
             m_hooked = false;
         }
         
         //check bounds in playing area
     }
 void GenerateRope(Ray ray)
     {
         layerMask = ~layerMask;
         if (Physics.Raycast(ray, out RaycastHit hit, 10f, layerMask))
         {
             if (hit.transform.CompareTag("node") && !m_ropeIsActive)
             {
                 activeHook = hit.transform.gameObject;
                 m_CanMove = false;
                 Vector3 hitPos = hit.transform.position;
                 Transform hook = hit.transform.GetChild(0);
                 Vector3 hookInverseNormal = hook.up * -1f;
 
                 Rigidbody previosRb = hit.transform.GetChild(0).GetComponent<Rigidbody>();//hook
 
                 Vector3 distanceFromNode = transform.position - hit.point;
                 int distance = (int)distanceFromNode.magnitude;
 
                 BoxCollider link = linkPrefub.GetComponent<BoxCollider>();//(int)link.size.magnitude / 2;
                 int length = (int)((distance - 1f) / sizeCell); 
                 float ropeLength = sizeCell * 10f;
                 if (length < minLength) 
                 {
                     length = minLength;
                 }
                 //else if (length > ropeLength)
                 //{
                 //    length = (int)ropeLength * 2;
                 //}
                 for (int i = 1; i < length - 1; i++) 
                 {
 
                     var t = sizeCell * i; //позиция под новый куб
                     Vector3 dirToPlayer = transform.position - hit.transform.position;//направление до игрока,
                     Vector3 newPos = dirToPlayer.normalized * t;
                     GameObject toInstantiate = Instantiate(linkPrefub, hit.transform.position + new Vector3(newPos.x, -t, default), Quaternion.identity, hit.transform);
                     rope.Add(toInstantiate);
                     HingeJoint joint = toInstantiate.GetComponent<HingeJoint>();
                     if (i == 1)
                     {
                         joint.autoConfigureConnectedAnchor = true;
                     }
                     else
                     {
                         joint.autoConfigureConnectedAnchor = false;
                         joint.connectedAnchor = new Vector3(0f, -0.4f);
 
                     }
                     joint.enableCollision = false;
                     joint.connectedBody = previosRb;
 
                     previosRb = toInstantiate.GetComponent<Rigidbody>();
                 }
                 m_ropeIsActive = true;
                 m_hooked = true;
                 m_CanMove = true;
             }
         }
         else
         {
             //what to do if not did hit
         }
     }
 void FixedUpdate(){
 if (m_ropeIsActive)
         {
             if (m_hooked && activeHook)
             {
                 //TODO крутить нод хука чтобы выглядило красиво
             }
 
             if (rope.Count != 0)
             {
                 Rigidbody lastElementRope = rope[rope.Count - 1].GetComponent<Rigidbody>();
                 if (lastElementRope)
                 {
                     HingeJoint joint = GetComponent<HingeJoint>();
                     //joint.autoConfigureConnectedAnchor = false;
                     //joint.connectedBody = lastElementRope;
                     //joint.anchor = Vector2.zero;
                     //joint.connectedAnchor = new Vector2(0f, -0.4f);
                 }
             }
         }
 }

can put code from github with project I experimented here trying to achieve obedience, but I am convinced that this is the wrong direction, I just do not know how to work with rotations, I got confused

                            if (i == 1)
                             {
                                 joint.autoConfigureConnectedAnchor = true;
                             }
                             else
                             {
                                 joint.autoConfigureConnectedAnchor = false;
                                 joint.connectedAnchor = new Vector3(0f, -0.4f);
         
                             }
 

https://github.com/Heges/first-2d-platformer/tree/main/2D-platformer

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by shyxiaolong · Apr 23, 2021 at 08:09 AM

i am not sure but

  void GenerateRope(Ray ray)
 {
     layerMask = ~layerMask;
     if (Physics.Raycast(ray, out RaycastHit hit, 10f, layerMask))
     {
         Vector3 direction =  transform.position - hit.transform.position;

         if (direction.magnitude <= sizeOfRope)
         {
             if (hit.transform.CompareTag("node") && !m_ropeIsActive)
             {
                 activeHook = hit.transform.gameObject;
                 m_CanMove = false;
                 Transform hook = hit.transform.GetChild(0);
                 Vector3 hookInverseNormal = hook.up * -1f;

                 float dot = Vector3.Dot(hookInverseNormal, ray.direction.normalized);
                 Debug.Log(dot);
                 Quaternion rotation = hit.transform.rotation;

                 Rigidbody previosRb = hit.transform.GetChild(0).GetComponent<Rigidbody>();//hook

                 Vector3 distanceFromNode = transform.position - hit.point;
                 int distance = (int)distanceFromNode.magnitude;

                 BoxCollider link = linkPrefub.GetComponent<BoxCollider>();//(int)link.size.magnitude / 2;
                 int length = (int)((distance - 1f) / sizeCell); //size of cell rope -1f размер игрока
                 float ropeLength = sizeCell * sizeOfRope;
                 if (length < minLength)
                 {
                     length = minLength;
                 }
                 //else if (length > ropeLength) // и слишком длинных
                 //{
                 //    length = (int)ropeLength * 2;
                 //}
                 for (int i = 1; i < length - 1; i++)
                 {
                     var t = sizeCell * i; //позиция под новый куб
                     Vector3 dirToPlayer = transform.position - hit.transform.position;//направление до игрока,
                     Vector3 newPos = dirToPlayer.normalized * t;
                     GameObject toInstantiate = Instantiate(linkPrefub, hit.transform.position + new Vector3(newPos.x, -t, default), Quaternion.identity, hit.transform);
                     rope.Add(toInstantiate);
                     HingeJoint joint = toInstantiate.GetComponent<HingeJoint>();
                     joint.anchor = Vector2.up;
                     joint.connectedAnchor = new Vector2(0f, -0.4f);
                     joint.connectedBody = previosRb;
                     previosRb = toInstantiate.GetComponent<Rigidbody>();
                 }
                 m_ropeIsActive = true;
                 m_hooked = true;
             }
         }
         else
         {
             //what to do if not did hit
         }
     }

it is still don't work very well but.like my problem is solved. limited the distance from which the rope can be summoned, and as it turned out, when autogenerating parts of the rope, the Hint Joint defaults to its values ​​such as AutoAnchor. disabling them during creation, it seems that everything seems to work as it should

 HingeJoint joint = toInstantiate.GetComponent<HingeJoint>();
                     joint.anchor = Vector2.up;
                     joint.connectedAnchor = new Vector2(0f, -0.4f);
                     joint.connectedBody = previosRb;
                     previosRb = toInstantiate.GetComponent<Rigidbody>();
Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

748 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Multiple Cars not working 1 Answer

How do I Open/Close my option menu with one key C# 1 Answer

Hint joint how to configure 0 Answers

How Can I Display UnityEvent in Custom Inspector When it is a Property of a Properties Property? (C#) 1 Answer

Need help in the stone throwing mechanic with aiming for mobile in Unity3d 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges