C# 使用AddForceAtPosition,对象仅移动,但不移动';t扭矩

C# 使用AddForceAtPosition,对象仅移动,但不移动';t扭矩,c#,unity3d,game-physics,C#,Unity3d,Game Physics,假设有一个洞能够通过自身的重力抓住周围的所有物体,脚本工作正常,但物体没有扭力 我想让物体移动到洞的位置,并在移动时给它们施加扭矩 你们可以使用两个立方体,一个是洞,另一个是有刚体和盒子层的块 提前谢谢 public class EatTheBoxes : MonoBehaviour { public bool Starttoeat; public float distance,speed,Gizmo_hight,FollowSpeed; public LayerMa

假设有一个洞能够通过自身的重力抓住周围的所有物体,脚本工作正常,但物体没有扭力

我想让物体移动到洞的位置,并在移动时给它们施加扭矩

你们可以使用两个立方体,一个是洞,另一个是有刚体和盒子层的块

提前谢谢

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);
    }
}
公共类eatthebox:monobhavior
{
公共场所;
公共浮动距离、速度、小控件高度、跟随速度;
公共图层标记图层打印;
公共强制模式;
私人国际号码;
void FixedUpdate()
{
如果(开始吃)
{
捕捉框(变换、位置、距离、图层打印);
}
}
无效捕捉框(矢量3中心、浮动半径、图层标记图层打印)
{
Collider[]hitColliders=物理。重叠球体(中心、半径、图层打印);
int i=0;
while(i
您可以为刚体添加扭矩

只用

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

也考虑兑现刚体:

Rigidbody hitRigidbody = hitColliders[i].GetComponent<Rigidbody>();
hitRigidbody.isKinematic = false;
hitRigidbody.AddForceAtPosition(Time.fixedTime * speed * forceDirection.normalized,transform.position,forcemode);
hitRigidbody.AddTorque(torqueVector);
Rigidbody hitRigidbody=hitColliders[i].GetComponent();
hitRigidbody.isKinetic=false;
hitRigidbody.AddForceAtPosition(Time.fixedTime*速度*forceDirection.normalized,transform.position,forcemode);
hitRigidbody.附加扭矩(扭矩向量);

你是否在你的物体及其周围的地面上使用物理材料?是的,但没有用。因为你正在使用
AddForceAtPosition
transform.position
上施力,默认情况下,它是质心。@RVBinary请看,很棒,刚刚将它改为:hitRigidbody.AddTorque(hitRigidbody.position*时间.fixedTime*速度);