很奇怪-Transform.Translate

时间:2019-06-15 22:27:53

标签: c# unity3d game-development

我想向右和向左移动对象,这样做时我遇到了一个奇怪的问题。我正在使用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);
    }
}

1 个答案:

答案 0 :(得分:0)

我无法理解为什么您要在碰撞时加力,但是我觉得这就是问题所在。 我会对此进行评论,看看您是否仍然有问题。

说这确实是问题所在,也许只考虑在适当的情况下在碰撞时加力(即,如果玩家只是与地面碰撞,他们应该得到力量吗?还是仅与某些元素碰撞?等)