使用方法
WSAD 控制四个方向的移动
鼠标 控制角色的水平、竖直朝向
空格 控制角色跳跃
配置
需要指定玩家的第一人称摄像头
效果
代码
using UnityEngine;
public class PlayerControl : MonoBehaviour
{
//摄像机
public GameObject playerView;
//速度:每秒移动5个单位长度
public float moveSpeed = 6;
//角速度:每秒旋转135度
public float angularSpeed = 135;
//跳跃参数
public float jumpForce = 200f;
//水平视角灵敏度
public float horizontalRotateSensitivity = 10;
//垂直视角灵敏度
public float verticalRotateSensitivity = 5;
//最大俯角
public float maxDepressionAngle = 90;
//最大仰角
public float maxElevationAngle = 25;
//角色的刚体
private Rigidbody rigidbody;
void Start()
{
rigidbody = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
Move();
View();
Jump();
}
void Move()
{
//通过键盘获取竖直、水平轴的值,范围在-1到1
float v = Input.GetAxis("Vertical");
float h = Input.GetAxis("Horizontal");
//按照矢量移动一段距离
transform.Translate(Vector3.forward * v * Time.deltaTime * moveSpeed);
transform.Translate(Vector3.right * h * Time.deltaTime * moveSpeed);
}
void View()
{
//锁定鼠标到屏幕中心
SetCursorToCentre();
//当前垂直角度
double VerticalAngle = playerView.transform.eulerAngles.x;
//通过鼠标获取竖直、水平轴的值,范围在-1到1
float h = Input.GetAxis("Mouse X");
float v = Input.GetAxis("Mouse Y") * -1;
//角色水平旋转
transform.Rotate(Vector3.up * h * Time.deltaTime * angularSpeed* horizontalRotateSensitivity);
//计算本次旋转后,竖直方向上的欧拉角
double targetAngle = VerticalAngle + v * Time.deltaTime * angularSpeed * verticalRotateSensitivity;
//竖直方向视角限制
if (targetAngle > maxDepressionAngle && targetAngle < 360 - maxElevationAngle) return;
//摄像机竖直方向上旋转
playerView.transform.Rotate(Vector3.right * v * Time.deltaTime * angularSpeed * verticalRotateSensitivity);
}
void SetCursorToCentre()
{
//锁定鼠标后再解锁,鼠标将自动回到屏幕中心
Cursor.lockState = CursorLockMode.Locked;
Cursor.lockState = CursorLockMode.None;
//隐藏鼠标
Cursor.visible = false;
}
void Jump()
{
if(Input.GetKeyDown(KeyCode.Space))
{
rigidbody.AddForce(Vector3.up * jumpForce);
}
}
}
解析
Move函数
控制角色前后左右移动,改变的是位置,并不会改变角色朝向
View函数
控制角色左右旋转,朝上或朝下看
注意:在水平方向移动鼠标,将改变角色(包括摄像头)的朝向,在竖直方向上移动鼠标,只改变摄像头的朝向,并不改变角色朝向
SetCursorToCentre函数
将鼠标设定在屏幕中心并隐藏
Jump函数
控制角色跳跃
相关函数的用法
获取WSAD输入
float v = Input.GetAxis("Vertical");
float h = Input.GetAxis("Horizontal");
(取值范围在-1~1之间)
获取鼠标输入
float h = Input.GetAxis("Mouse X");
float v = Input.GetAxis("Mouse Y") * -1;
(取值范围在-1~1之间)
获取空格键
Input.GetKeyDown(KeyCode.Space)
给刚体在某一个方向上施加力
rigidbody.AddForce(Vector3.up * jumpForce);
按照矢量移动一段距离
transform.Translate(Vector3 位移)
物体前方
Vector3.forward 也可以写作 Vector3(0, 0, 1)
物体左边
Vector3.right 也可以写作 Vector3(1, 0, 0)
旋转
gameObject.transform.Rotate(Vector3 欧拉角)
鼠标的锁定状态
Cursor.lockState 可以设定为 CursorLockMode.Locked 或 CursorLockMode.None
鼠标的显示文章来源:https://www.toymoban.com/news/detail-418702.html
Cursor.visible 可以设定为 true 或 false文章来源地址https://www.toymoban.com/news/detail-418702.html
到了这里,关于Unity 第一人称视角 角色控制脚本的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!