我在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。谢谢你让我放弃!