美好的一天,我想以恒定速度向前移动我的Rigidbody2D对象,并在用户点击屏幕时改变方向。我有代码:
public float speed;
void FixedUpdate()
{
if(platform == RuntimePlatform.Android || platform == RuntimePlatform.IPhonePlayer){
if(Input.touchCount > 0) {
if(Input.GetTouch(0).phase == TouchPhase.Began){
}
}
} else {
if(Input.GetMouseButtonDown(0)) {
var touchPosition = Camera.main.ScreenToWorldPoint (Input.mousePosition);
Quaternion rot = Quaternion.LookRotation (transform.position - touchPosition, Vector3.forward);
transform.rotation = rot;
transform.eulerAngles = new Vector3 (0, 0, transform.eulerAngles.z); // only z rotation
myScriptRigidBody.velocity = (touchPosition - transform.position).normalized * speed;
}
}
}
据我所知,对象应该改变鼠标点击位置的方向并以恒定速度移动。但在实践中,对象的速度取决于用户在屏幕上点击的当前对象位置的距离。奇怪的是,bcs我将方向向量归一化,“速度”变量是常数。我究竟做错了什么? THX。
答案 0 :(得分:1)
这个想法是当你点击某处时,对象将会旋转,你已经做过了。但速度不应取决于你点击的位置。
所以,速度是一样的。不要改变它。
myScriptRigidBody.velocity = speed;
这应该可以正常工作。
答案 1 :(得分:1)
您可以尝试Vector3.MoveTowards
,并使用上次鼠标单击作为对象移动到的位置: - )
答案 2 :(得分:1)
问题是ScreenToWorldPoint
返回的向量的z分量是摄像机z的位置。您只需要x
和y
组件。
var touchPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
touchPosition = new Vector3(touchPosition.x,touchPosition.y,0);