AddRelativeForce()不会相对增加作用力

时间:2019-04-15 17:07:52

标签: unity3d

我想通过在屏幕上拖动鼠标来给刚体添加力量。 即使我已将屏幕坐标转换为世界坐标,并且刚体的旋转也会查看释放鼠标按钮的坐标,但是当我通过AddRelativeForce球添加相对力时,球会直接向前移动。

public GameObject ballPrefab;
GameObject ballInstance;

private float force=15;
Vector3 mouseStart;
Vector3 mouseStop;
float minDragDistance=15f;
float zDepth=20f;

void FixedUpdate()
{
    if (Input.GetMouseButtonDown(0))
    {
        mouseStart = Input.mousePosition;
    }
    if (Input.GetMouseButtonUp(0))
    {
        mouseStop = Input.mousePosition;

        if(Vector3.Distance(mouseStop, mouseStart) > minDragDistance)
        {
            //Here I am getting the position on screen coordinates to throw the rigidbody to                
            Vector3 hitPos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, zDepth);

            //I transform screen coordinates to world coordinates
            Vector3 hitPoss = Camera.main.ScreenToWorldPoint(hitPos);
            //transforming rigidbody to look at hitpos direction             
            ballInstance.transform.LookAt(hitPoss);
            //adding relative force
            ballInstance.GetComponent<Rigidbody>().AddRelativeForce(Vector3.forward * force, ForceMode.Force);
        }
    }
}

当我在代码中注释时,我使用transform.rotation函数更改了游戏对象的LookAt()属性,当我检查检查器时,它恰好改变了旋转角度。但通过AddRelativeForce(Vector3.forward),它可以直接沿全局z方向前进,而不是局部更改的z方向。

2 个答案:

答案 0 :(得分:1)

AddRelativeForce相对于父对象的方向施加力,这在这里实际上没有意义,因为没有父对象。 代替:

ballInstance.GetComponent<Rigidbody>().AddRelativeForce(Vector3.forward * force, ForceMode.Force);

尝试:

ballInstance.GetComponent<Rigidbody>().AddForce(ballInstance.transform.forward * force, ForceMode.Force);

这应该可行,因为您不是使用全局正向向量Vector3.forward,而是使用ballInstance ballInstance.transform.forward的正向向量

答案 1 :(得分:0)

更改转换不会立即生效,您应该设置Rigidbody.rotation

检查文档:https://docs.unity3d.com/ScriptReference/Rigidbody-rotation.html