👨💻个人主页:@元宇宙-秩沅
👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!
👨💻 本文由 秩沅 原创
👨💻 收录于专栏:【0到1】Unity脚本游戏开发宝典
⭐🅰️⭐
⭐第一人称视角的角色控制器⭐
🎶() 场景创建
🎶() 相机设置
- 将摄像机变为胶囊体的子物体,按住 ctrl +shift +F 调整视野。让他变成胶囊体的眼睛
🎶() 初步脚本
- 判断要前进时按照哪个方向前进,一般UnityZ轴为前后UnityX轴为左右,
- 判断要旋转,是按照哪个轴进行旋转(左右视角,是旋转Y轴,上下视角是旋转Z轴)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMove : MonoBehaviour
{
[ExecuteAlways]
private float moveSpeed = 1f;
[ExecuteAlways]
private float rotateSpeed = 1f;
void Update()
{
Move();
}
private void Move()
{
float xPosition = Input.GetAxis("Horizontal") * Time.deltaTime; //水平轴向
float zPosition = Input.GetAxis("Vertical") * Time.deltaTime; //垂直轴向
//旋转不用加TimedeleTime ,因为加上会变得很慢
float YRotation = Input.GetAxis("Mouse X");
float XRotation = -Input.GetAxis("Mouse Y");
transform.position += new Vector3(xPosition ,0 , zPosition) * moveSpeed ;
Quaternion rotateAngle = Quaternion.Euler(XRotation, YRotation, 0); //欧拉角转换成四元数
transform.rotation *= rotateAngle; //乘上一个四元数就相当于进行了旋转
}
}
🎶() 优化脚本
- 优化1:纵轴的视野,变化幅度太大,需要进行约束
- 优化2:点击开始时,隐藏鼠标,并将其固定到中央确保,开始时的屏幕是正的
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMove : MonoBehaviour
{
[SerializeField]
private float moveSpeed = 5f;
[SerializeField]
private float rotateSpeed = 1f;
private void Start()
{
Cursor.visible = false; //鼠标隐藏
Cursor.lockState = CursorLockMode.Locked;//将光标锁定到“游戏”视图的中心。
}
private void Update()
{
Move();
}
private void Move()
{
float xPosition = Input.GetAxis("Horizontal") * Time.deltaTime; //水平轴向
float zPosition = Input.GetAxis("Vertical") * Time.deltaTime; //垂直轴向
//旋转不用加TimedeleTime ,因为加上会变得很慢
float YRotation = Input.GetAxis("Mouse X");
float XRotation = -Input.GetAxis("Mouse Y");
//进行抬头约束(速度减慢的效果)
XRotation = Mathf.Clamp(XRotation , -0.1f ,0.1f);
transform.position += new Vector3(xPosition ,0 , zPosition) * moveSpeed ;
Quaternion rotateAngle = Quaternion.Euler(XRotation, YRotation, 0); //欧拉角转换成四元数
transform.rotation *= rotateAngle; //乘上一个四元数就相当于进行了旋转
}
}
⭐🅰️⭐
你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!、