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