AddRelativeForce()不会相对增加力

问题描述 投票:0回答:2

我想通过在屏幕上拖动鼠标来为Rigidbody增加力量。即使我已将屏幕坐标转换为世界坐标,Rigidbody的旋转也会查看释放鼠标按钮的坐标,当我通过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方向。

unity3d
2个回答
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的前向矢量


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.