地牢爬行器移动方向不正确



我在Unity工作,我的playercontroller.cs 有问题

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{

Vector3 pos;                                // For movement
public float speed = 2.0f;                         // Speed of movement
IEnumerator RotateMe(Vector3 byAngles, float inTime)

{    var fromAngle = transform.rotation;
var toAngle = Quaternion.Euler(transform.eulerAngles + byAngles);
for(var t = 0f; t < 1; t += Time.deltaTime/inTime) {
transform.rotation = Quaternion.Slerp(fromAngle, toAngle, t);
yield return null;
}
}  

void Start()
{
pos = transform.position;          // Take the initial position
}

void Update()
{
if (Input.GetKeyDown(KeyCode.A) && transform.position == pos)
{        // Left
pos+= Vector3.left;
}
if (Input.GetKeyDown(KeyCode.D) && transform.position == pos)
{        // Right
pos+= Vector3.right;
}
if (Input.GetKeyDown(KeyCode.W) && transform.position == pos)
{        // Up
pos += Vector3.forward;
}
if (Input.GetKeyDown(KeyCode.S) && transform.position == pos)
{        // Down
pos += Vector3.back;

}
if (Input.GetKeyDown(KeyCode.Q) && transform.position == pos)
{
StartCoroutine(RotateMe(Vector3.up * -90, 0.8f));
}
//Rotate Left
transform.position = Vector3.MoveTowards(transform.position, pos, Time.deltaTime * speed);    // Move there
}

}

当我击中Q时,我会旋转90度,但当我击中W时,我继续相对于地图向前。我该如何朝着我所面临的方向前进?此外,我应该将这个脚本附加到游戏相机还是玩家身体上?

谢谢!

刚刚想好了。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
Vector3 pos;                                // For movement
public float speed = 2.0f;                         // Speed of movement
public Transform relativeTransform;
IEnumerator RotateMe(Vector3 byAngles, float inTime)

{
var fromAngle = transform.rotation;
var toAngle = Quaternion.Euler(transform.eulerAngles + byAngles);
for (var t = 0f; t < 1; t += Time.deltaTime / inTime)
{
transform.rotation = Quaternion.Slerp(fromAngle, toAngle, t);
yield return null;
}
}

void Start()
{
pos = transform.position;          // Take the initial position
}
void Update()
{
if (Input.GetKeyDown(KeyCode.A) && transform.position == pos)
{        // Left
pos += -relativeTransform.right;
}
if (Input.GetKeyDown(KeyCode.D) && transform.position == pos)
{        // Right
pos += relativeTransform.right;
}
if (Input.GetKeyDown(KeyCode.W) && transform.position == pos)
{        // Up
pos += relativeTransform.forward;
}
if (Input.GetKeyDown(KeyCode.S) && transform.position == pos)
{        // Down
pos += -relativeTransform.forward;
}
if (Input.GetKeyDown(KeyCode.Q) && transform.position == pos)
{
StartCoroutine(RotateMe(Vector3.up * -90, 0.8f));
} //Rotate Left
if (Input.GetKeyDown(KeyCode.E) && transform.position == pos)
{
StartCoroutine(RotateMe(Vector3.up * 90, 0.8f));
} //Rotate Right

transform.position = Vector3.MoveTowards(transform.position, pos, Time.deltaTime * speed);    // Move there
}
}

需要relativeTransform而不是Vector3.forwards。谢谢你让我放弃!

最新更新