如果条件为真(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