【问题标题】:How to move back and forth after firing a gun开枪后如何前后移动
【发布时间】:2015-05-19 06:32:47
【问题描述】:

我的统一代码有问题:(我没有任何动画)

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;

    }
}

当我射击(不转身)时,它确实来回移动,但是当我向左或向右转身时,我的枪会飞到某个地方。

还有其他代码可以前后移动吗?这就像一个逼真的枪支动画,但通过脚本编写

【问题讨论】:

  • 您需要进一步解释您的问题。搬什么?移动什么的代码在哪里?
  • 我以为你理解我的代码,gameobject称为gun 因为vector3而移动。
  • 好的。移动什么的代码在哪里?
  • 可能不好。你说当你左转或右转时,它会去某个地方。你介意发布转弯代码吗?还有,那在哪里?
  • o.O?呃呃呃呃……什么?

标签: c# unity3d 3d game-physics


【解决方案1】:

试试这个,如果 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;
}

【讨论】:

  • 哦,我没想到
【解决方案2】:

我认为你缺少的是在告诉它移动之前考虑你的对象旋转。当您向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;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-26
    相关资源
    最近更新 更多