我有以下代码来阻止玩家移动。它有效,但我有一个问题。例如,如果玩家处于-3.05位置并且如果我按住该按钮向左移动,则玩家仍然会在-3.05限制之间移动到大约-3.56。一旦我放开按钮,它就会反弹回-3.05。右侧也是如此。无论如何,我都不希望它超越极限。
Vector3 tmpPos = transform.position;
tmpPos.x = Mathf.Clamp(tmpPos.x, -3.05f, 3.05f);
transform.position = tmpPos;
以下是我向玩家添加动作的方式:
rigidbody.AddForce (movement * speed * Time.deltaTime);
答案 0 :(得分:2)
除非标记为isKinematic,否则不应将变换操作与刚体混淆。因此,请尝试在transform.position
内部rigidbody.position
来代替FixedUpdate
。
void FixedUpdate(){
Vector3 pos = rigidbody.position;
pos.x = Mathf.Clamp(pos.x, minX, maxX);
rigidbody.position = pos;
}
但是,由于您使用AddForce
来移动对象,因此更简单的方法是在对象的左侧和右侧使用盒式对撞机制作空的游戏对象,然后限制对象像隐形墙一样的运动。
答案 1 :(得分:0)
尝试使用rigidbody.MovePosition(tmpPos);
而不是设置transform.position
。
答案 2 :(得分:0)
我解决了我的问题。而不是使用AddForce移动对象
rigidbody.AddForce (movement * speed * Time.deltaTime);
我使用rigidbody.position
来移动对象。在将Mathf.Clamp
应用到rigidbody.position
之前,我使用{{1}}来限制移动。