我想知道如何让一个玩家在它自己的轴上移动。当玩家的物体旋转时,我希望它向前移动,而不是在全局方向上。当相机旋转时,玩家也旋转。这是两个脚本。
玩家移动
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public Rigidbody rb;
public float playerSpeed;
private float moveX;
private float moveY;
void Update()
{
moveX = Input.GetAxis("Horizontal") * Time.deltaTime * playerSpeed;
moveY = Input.GetAxis("Vertical") * Time.deltaTime * playerSpeed;
transform.position += new Vector3(moveX, 0, moveY);
}
}
摄像机控制器
using System.Collections;
using System.Collections.Generic;
using System.Numerics;
using UnityEditor;
using UnityEditor.Experimental.GraphView;
using UnityEngine;
public class CameraControler : MonoBehaviour
{
public GameObject CameraFocusObject;
public GameObject CameraPart;
public Transform orientation;
float xRot, yRot;
public int sensX;
public int sensY;
// Start is called before the first frame update
void Start()
{
Cursor.visible = false;
Cursor.lockState = CursorLockMode.Locked;
}
// Update is called once per frame
void Update()
{
float mouseX = Input.GetAxisRaw("Mouse X") * Time.deltaTime * sensX;
float mouseY = Input.GetAxisRaw("Mouse Y") * Time.deltaTime * sensY;
yRot += mouseX;
xRot -= mouseY;
xRot = Mathf.Clamp(xRot, -85f, 85f);
transform.rotation = UnityEngine.Quaternion.Euler(xRot, yRot, 0);
CameraFocusObject.transform.rotation = UnityEngine.Quaternion.Euler(0, yRot, 0);
}
}
我是Unity编程的新手,所以如果你能更具体地回答,那将是有帮助的。
1条答案
按热度按时间laawzig21#
你想要的是移动你的角色在相机里。向前的方向。
1.你可以使用camera.main.forward方向向量来旋转你的角色在摄影机的方向上,如果你想在行走方向的改变上有一点延迟,这可以使用,例如:
transform.rotation = Quaternion.LookRotation(camera.main.transform.forward);
然后你需要做的就是让你的角色沿着它自己的前进方向行走(
transform.forward += movement * Time.deltaTime * moveSpeed
)1.你可以使用你的相机。前进的方向你的球员应该走在直接
transform.position += camera.main.transform.forward * Time.deltaTime * moveSpeed
我希望这能有所帮助:)
另外,我建议使用privat字段而不是public,如果你在一个命名空间中使用多个脚本,这一点会更明显(你可以使用“[SerializeField] private GameObject XXX”)〈=这将在检查器中暴露你的字段,即使它们是私有的。
此外,你应该摆脱“使用Unity.Editor”的使用,当你想制作游戏的最终版本时,它们会破坏你的构建:)
干杯