我想将对象向右和向左移动,但在执行此操作时遇到了一个奇怪的问题。我正在使用 If(输入..) 在更新方法中做转换.翻译。
这是我向右移动的代码
player.transform.Translate(Vector3.right * Time.deltaTime * varLeftRight, Space.World);
(我尝试在检查器中附加游戏对象时使用("玩家"),并且我尝试使用刚体("b"),但这无助于发生同样的问题)) 其中变量varLeftRight
为 125。
我正在像这样增加前进的力量:
b.AddForce(Vector3.forward * speed);
假设我的播放器在坐标:
-0.074 ->x-1.5166
->y
4.173041 -z
我穿上球员刚体是运动学的,因为我想测试为什么在玩时会出现同样的问题。问题是当我单击它工作并向右移动时
一键连接:
1.592691-1.5166
4.173041
但问题是,当我非常快速地点击两次时,玩家的位置会刹车并且向右走得太多。
两次快速点击向右走,他走得太多了,当我回到一个字段时,他需要在这个 坐标:
1.592691-1.5166
4.173041
他在这个 cordinate:
2.101478-1.5166
4.173041
Idk我描述的问题很好。我希望你能理解我, 所以当我点击一次使用 trasnform.translate 移动时,一切正常 当我快速单击两次时,他向右走得太多,当我返回一个字段以查看他在哪里时,单击一下他不在正确的位置,返回左侧一个字段是相同的方法,只是添加左参数如下:
player.transform.Translate(Vector3.left * Time.deltaTime*varLeftRight, Space.World);
我尝试删除 Space.World 但没有帮助。
顺便说一句:我的障碍物碰撞所有刚体都是运动学的(在没有刚体的情况下尝试同样的问题。
在碰撞中,我正在添加强制,以在代码中没有其他脚本。
public class PlayerControl : MonoBehaviour
{
public float bounce;
public float speed;
public float right;
Rigidbody rb;
public GameObject player;
public float varLeftRight;
// Start is called before the first frame update
void Start()
{
rb = GetComponent<Rigidbody>();
rb.AddForce(Vector3.forward * speed);
}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Debug.Log("add force");
player.transform.Translate(Vector3.right * Time.deltaTime * varLeftRight, Space.World);
}
if (Input.GetMouseButtonDown(1))
{
player.transform.Translate(Vector3.left * Time.deltaTime*varLeftRight, Space.World);
}
}
private void OnCollisionEnter(Collision collision)
{
rb.AddForce(Vector3.forward * speed);
}
}
我无法理解你为什么要在碰撞时增加力,但我有一种感觉,这就是问题所在。 我会对此发表评论,看看您是否仍然遇到问题。
假设这确实是问题所在,也许可以考虑仅在适当情况下在碰撞时增加力(即,如果玩家只是与地面碰撞,他们应该获得力吗?或者只是与某些元素碰撞时?等等)