我想向右和向左移动对象,这样做时我遇到了一个奇怪的问题。我正在使用If(Input ..)
在update方法中进行Transform.Translate这是我向右移动的代码
player.transform.Translate(Vector3.right * Time.deltaTime * varLeftRight, Space.World);
(我尝试将(“ player”)与附加在检查器中的游戏对象一起使用,并且尝试使用刚体(“ 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
他在这个坐标上:
2.101478
-1.5166
4.173041
Idk我描述的问题很好吗?希望你能理解我, 所以当我单击一次以移动trasnform.translate时,一切正常 当我快速单击两次时,他向右移得太多,而当我返回一个字段以查看他在哪里时,他不在正确的位置,回到左侧时,返回一个字段与添加左参数一样是相同的方法,例如这个:
player.transform.Translate(Vector3.left * Time.deltaTime*varLeftRight, Space.World);
我尝试删除Space.World,但这无济于事。
btw:我的障碍物碰撞中所有刚体都是运动学上的(尝试过没有刚体会发生相同的问题。
在Collision中,我正在添加力量以继续执行代码中的其他脚本。
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);
}
}
答案 0 :(得分:0)
我无法理解为什么您要在碰撞时加力,但是我觉得这就是问题所在。 我会对此进行评论,看看您是否仍然有问题。
说这确实是问题所在,也许只考虑在适当的情况下在碰撞时加力(即,如果玩家只是与地面碰撞,他们应该得到力量吗?还是仅与某些元素碰撞?等)