我的团结代码存在问题:(我没有任何动画)
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;
}
}
当我开枪(不转弯)时,它会来回走动,但是当我向左或向右转时,我的枪就会到达某个地方。
还有其他代码来回移动吗?这就像一个逼真的枪支动画,但通过脚本
答案 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;
}
}