然而,,当它的向上不再上升时,它的向上加减y旋转
这是代码
if (joystick.Horizontal != 0 || joystick.Vertical != 0)
{
transform.Translate(transform.forward * Time.deltaTime * speed * joystick.Vertical);
transform.Translate(transform.right * Time.deltaTime * speed * joystick.Horizontal);
transform.LookAt(transform.localPosition + new Vector3(joystick.Horizontal, 0, joystick.Vertical));
}
else
{
_rb.velocity = Vector3.zero;
}
这位球员在转圈。我如何解决这个问题,让它看起来很正常呢?(我明白为什么它不起作用,但我不知道如何解决它!)
下面是一个例子
例如,如果我把一个物体转动90°,希望它向右移动一点,当我按D键时,它就不会向右移动,它显然会向下移动,即使它向右移动。
另外,下面是起作用的旧控件(现在是注释)
if (Input.GetKey(KeyCode.W))
{
transform.Translate(Vector3.forward * Time.deltaTime * speed);
}
if (Input.GetKey(KeyCode.S))
{
transform.Translate(Vector3.back * Time.deltaTime * speed);
}
if (Input.GetKey(KeyCode.A))
{
transform.Translate(Vector3.left * Time.deltaTime * speed);
}
if (Input.GetKey(KeyCode.D))
{
transform.Translate(Vector3.right * Time.deltaTime * speed);
}
//[...]
transform.LookAt(target);
^^在void Update()
中
发布于 2022-08-22 09:40:25
我已经搞清楚了!这里是如何:因为操纵杆使它向x度移动,但也使它向x度旋转,它会旋转成圆圈。解决办法非常简单:
只让它向前移动,让它用操纵杆绕着自己旋转。这方面的一个众所周知的例子是你如何在“我的世界”和大多数第一人称游戏中移动:你按W键或倾斜操纵杆向前看,然后用鼠标/右边的操纵杆环顾四周。
这是代码(在Update()
obv中):
if (joystick.Horizontal != 0 || joystick.Vertical != 0)
{
if(Mathf.Abs(joystick.Horizontal) > Mathf.Abs(joystick.Vertical)){
transform.Translate(Vector3.forward * Time.deltaTime * speed * Mathf.Abs(joystick.Horizontal));
}
else if(Mathf.Abs(joystick.Horizontal) < Mathf.Abs(joystick.Vertical)) {
transform.Translate(Vector3.forward * Time.deltaTime * speed * Mathf.Abs(joystick.Vertical));
}
//transform.Translate(Vector3.forward * Time.deltaTime * speed);
Debug.Log(Mathf.Abs(joystick.Horizontal) + " " + Mathf.Abs(joystick.Vertical) + " " + Mathf.Abs(joystick.Horizontal) * Mathf.Abs(joystick.Vertical));
transform.LookAt(transform.localPosition + new Vector3(joystick.Horizontal, 0, joystick.Vertical));
}
https://stackoverflow.com/questions/73405119
复制