с AddForceAtPosition объекты только перемещаются, но не крутят - PullRequest
0 голосов
/ 16 октября 2019

предположим, что есть дыра, которая способна захватить все объекты вокруг себя под действием собственной гравитации, сценарий работает нормально, но объекты не вращаются.

Я хочу, чтобы объекты двигались в положениепроделайте отверстие и дайте им крутящий момент, пока они движутся

. Вы можете использовать два куба, один из которых может быть отверстием, а другой - блоком с твердым телом и слоем коробки

, заранее спасибо. *

public class EatTheBoxes : MonoBehaviour

{

    public bool Starttoeat;
    public float distance,speed,Gizmo_hight,FollowSpeed;
    public LayerMask layerint;
    public ForceMode forcemode;
    private int _numberoftile;






    void FixedUpdate()

    {
       if (Starttoeat)

       {
           CatchTheBoxes(transform.position,distance,layerint);


       }



    }

    void CatchTheBoxes(Vector3 center, float radius , LayerMask layerint)

    {
        Collider[] hitColliders = Physics.OverlapSphere(center, radius,layerint);

        int i = 0;

        while (i < hitColliders.Length)

        {


            Vector3 forceDirection = transform.position -  hitColliders[i].transform.position;

            if (hitColliders[i].CompareTag("bomb"))

            {   
                hitColliders[i].GetComponent<Rigidbody>().AddForceAtPosition(Time.fixedTime * 20 * forceDirection.normalized,transform.position,forcemode);
                hitColliders[i].GetComponent<Rigidbody>().isKinematic = false;

            }

            else

            {



              hitColliders[i].GetComponent<Rigidbody>().AddForceAtPosition(Time.fixedTime * speed * forceDirection.normalized,transform.position,forcemode);

              hitColliders[i].GetComponent<Rigidbody>().isKinematic = false;

            }

            i++;
        }

    }


    void OnDrawGizmos()

    {
        Vector3 newTransform = transform.position;
        newTransform.y = newTransform.y + Gizmo_hight;
        Gizmos.DrawWireSphere(newTransform,distance);
    }
}

1 Ответ

1 голос
/ 16 октября 2019

Вы можете добавить крутящий момент к жесткому телу.

Просто используйте

hitColliders[i].GetComponent<Rigidbody>().AddTorque(torqueVector);

Также рассмотрите возможность обналичивания жесткого тела:

Rigidbody hitRigidbody = hitColliders[i].GetComponent<Rigidbody>();
hitRigidbody.isKinematic = false;
hitRigidbody.AddForceAtPosition(Time.fixedTime * speed * forceDirection.normalized,transform.position,forcemode);
hitRigidbody.AddTorque(torqueVector);
...