如何在开枪后来回移动

时间:2015-05-19 06:32:48

标签: c# unity3d 3d game-physics

我的团结代码存在问题:(我没有任何动画)

public GameObject gun;

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {
    if(Input.GetButton("Fire1"))
    {
        StartCoroutine(moveobject());
    }
}
IEnumerator moveobject()
{
    for(var i=0;i<10;i++)
    {
        gun.transform.position += new Vector3(1,0,0);
        yield return 0;
    }

    for(var i=0;i<10;i++)
    {
        gun.transform.position += new Vector3(-1,0,0);
        yield return 0;

    }
}

当我开枪(不转弯)时,它会来回走动,但是当我向左或向右转时,我的枪就会到达某个地方。

还有其他代码来回移动吗?这就像一个逼真的枪支动画,但通过脚本

2 个答案:

答案 0 :(得分:0)

试试这个,如果Z轴是你的前进方向:

for(var i=0;i<10;i++)
{
    gun.transform.position += gun.transform.forward;
    yield return 0;
}

for(var i=0;i<10;i++)
{
    gun.transform.position -= gun.transform.forward;
    yield return 0;
}

这将使枪朝向枪的前进方向移动

如果转弯,前进方向不是(0,0,1)

如果X轴是你的前进方向,你也可以使用它:

for(var i=0;i<10;i++)
{
    gun.transform.position += gun.transform.right;
    yield return 0;
}

for(var i=0;i<10;i++)
{
    gun.transform.position -= gun.transform.right;
    yield return 0;
}

答案 1 :(得分:0)

我认为你缺少的是在告诉它移动之前考虑你的物体旋转。当您将对象位置更新为Vector3(1,0,0)时,您必须记住此向量正在以全局坐标移动对象,并且由于您的对象旋转其X轴不再与世界轴相同。

要将此新矢量移动到对象方向,您必须将其乘以对象旋转矩阵。您的代码将类似于:

IEnumerator moveobject()
{
    for(var i=0;i<10;i++)
    {
        gun.transform.position += gun.transform.rotation * Vector3.right;
        yield return 0;
    }

    for(var i=0;i<10;i++)
    {
        gun.transform.position += gun.transform.rotation * Vector3.left;
        yield return 0;
    }
}