如果条件为真(C#),我希望我的对象同时向前和向右移动

如果条件为真(C#),我希望我的对象同时向前和向右移动,c#,unity3d,C#,Unity3d,所以现在我有一个对象,当鼠标被点击时,我想向前向左移动,或者向前向右移动。这将产生向前的对角线运动 if (Input.GetMouseButtonDown (0)) { if (dir == Vector3.forward) { dir = Vector3.left && Vector3.forward; } else { dir = Vector3.right && Vector

所以现在我有一个对象,当鼠标被点击时,我想向前向左移动,或者向前向右移动。这将产生向前的对角线运动

 if (Input.GetMouseButtonDown (0)) {
        if (dir == Vector3.forward) {
            dir = Vector3.left && Vector3.forward;
        } else {
            dir = Vector3.right && Vector3.forward;
        }
    }

Vector3.left
Vector3(-1,0,0)
Vector3.forward
Vector3(0,0,1)
的缩写。因此,您可以使用它的构造函数[
Vector3(float x,float y,float z)
]生成一个
Vector3
,以组合这些:

if (Input.GetMouseButtonDown (0)) {
   if(dir.Equals(new Vector3(1, 0, 1))) {
        dir = new Vector3(-1, 0, 1);
   } else {
        dir = new Vector3(1, 0, 1);
   }
}

Vector3.left
Vector3(-1,0,0)
Vector3.forward
Vector3(0,0,1)
的缩写。因此,您可以使用它的构造函数[
Vector3(float x,float y,float z)
]生成一个
Vector3
,以组合这些:

if (Input.GetMouseButtonDown (0)) {
   if(dir.Equals(new Vector3(1, 0, 1))) {
        dir = new Vector3(-1, 0, 1);
   } else {
        dir = new Vector3(1, 0, 1);
   }
}

你可以把向量加在一起得到你想要的

if (dir == Vector3.forward) {
    dir = Vector3.left + Vector3.forward;
} else {
    dir = Vector3.right + Vector3.forward;
}

查看Unity文档上的,并向下滚动查看可以使用的运算符列表,如+、-和*

您可以将向量添加到一起以获得所需的

if (dir == Vector3.forward) {
    dir = Vector3.left + Vector3.forward;
} else {
    dir = Vector3.right + Vector3.forward;
}

查看Unity文档上的,向下滚动查看您可以使用的操作符列表,如+、-和*

谢谢@SpencerWieczorek谢谢您的帮助,我修复了您提供的一个小错误,现在它工作正常

if (Input.GetMouseButtonDown (0)) {
   if(dir == new Vector3(1, 0, 1)) {
      dir = new Vector3(-1, 0, 1);
   } else {
      dir = new Vector3(1, 0, 1);
   }
}

再次感谢您为我指出了正确的方向,我试图配对运算符,但使用点是有意义的。更容易改变前进方向并允许更多的控制。

感谢@SpencerWieczorek感谢您的帮助,我修复了您提供的内容中的一个小错误,现在它工作正常

if (Input.GetMouseButtonDown (0)) {
   if(dir == new Vector3(1, 0, 1)) {
      dir = new Vector3(-1, 0, 1);
   } else {
      dir = new Vector3(1, 0, 1);
   }
}


再次感谢您为我指出了正确的方向,我试图配对运算符,但使用点是有意义的。更容易改变向前移动,并允许更多的控制。

使用
新矢量3(浮点x,浮点y,浮点z)
怎么样?您的意思是使用按位and:?使用
新矢量3(浮点x,浮点y,浮点z)
怎么样?您的意思是使用按位and:?我的对象从零位置开始(它不移动),当我在第二次单击时尝试此方法时,它会继续沿初始(-1,0,1)方向移动。在in开始移动后,我如何基本上使其沿Z字形方向移动。这是因为,如果仅触发此事件,则前进将永远不会为真。您可以将其更改为基于在
else
中设置的值,例如
if(dir.Equals(Vector3(1,0,1))
或使用布尔标志。这样看起来会像
if(Input.GetMouseButtonDown(0)){if(dir==(Vector3.forward(1,0,1)){dir=new Vector3(-1,0,1);}else{dir dir=new Vector3(1,0,1);}
@Trlewi我已经修改了这个问题,以显示它是什么样子。我试图更好地理解这个问题,它似乎是说,当鼠标被点击时,如果玩家向右斜移,则向右斜移,否则向右斜移。我的对象从零位开始(它没有移动),当我在第二次单击时尝试此方法时,它会在初始(-1,0,1)中继续移动方向。在in开始移动后,我基本上如何使其沿Z字形方向移动。这是因为如果仅触发此事件,则向前将永远不会为真。您可以将其更改为基于在
else
中设置的值,例如
if(dir.Equals(Vector3(1,0,1)))
或使用布尔标志。那么这看起来像
if(Input.GetMouseButtonDown(0)){if(dir==(Vector3.forward(1,0,1)){dir=newvector3(-1,0,1);}或者{dir=newvector3(1,0,1);}
@Trlewi我修改了这个问题以显示它的样子。我试图更好地理解这一点,代码似乎是说,当鼠标被点击时,如果玩家向右斜移动,则将玩家向左斜移动,否则将玩家向右斜移动。这与对象刚刚移动的位置相同s永远向前+向右移动。这取决于条件之前的任何方向。如果希望它向前+向左移动,则应将dir设置为向前。这与对象永远向前+向右移动相同。这取决于条件之前的任何方向。如果希望它向前+向左移动然后应该将dir设置为forward。如果解决方案有效,您可以接受它作为答案,而不是留下自己的答案…..我选择了Spencer的解决方案作为答案,但只是想让其他人知道,在我修复错误之前,它不起作用。但是谢谢。如果您查看您编写的第二行代码
If(dir.Equals(Vector3…
但是当我把它放进去的时候,它一直出现错误并且不运行,不确定whey,但是当我把它改成
if(dir==newVector3…
时,它工作了。不确定为什么语法的改变修复了它,但是现在它工作了,所以谢谢你!试试
dir.Equals(newVector3(…)
而是添加了
new
。我假设您不需要每次需要检查向量时都创建一个新实例,但我没有统一性,所以我可能是错的。编辑:刚刚检查,是的,需要
新的
。如果解决方案有效,您可以接受它作为答案,而不是留下自己的答案……我已经选择了ed Spencer的解决方案作为答案,但只是想让其他人知道,在我修复错误之前,它不起作用。但是谢谢你。如果你看一下你写的第二行代码
If(dir.Equals(Vector3…
),但当我把它放进去时,它一直给出一个错误,不会运行,不确定whey,但当我把它改为
If时(dir==new Vector3…
它起作用了。不知道为什么更改语法会修复它,但它现在起作用了,谢谢!尝试使用添加了
new
的dir.Equals(new Vector3(…)
来代替。我假设您不需要创建新的instanc