Fetch the repository succeeded.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/*
* @Author: 杨文泽
* @Description:
* @Date: 2022年11月03日 星期四 16:11:03
* @Modify:
*/
public class Player : MonoBehaviour
{
public float speed = 5f;
// 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()
{
Move();
MouseLook();
}
void Move()
{
float x = Input.GetAxis("Horizontal");
float z = Input.GetAxis("Vertical");
//方向永远平行地面,角色不能早到天上去
//获得角色前方向量,将y轴分量设为0
Vector3 fwd = transform.forward;
Vector3 f = new Vector3(fwd.x, 0, fwd.z).normalized;
//角色的右方向量与右方向的移动直接对应,与抬头无关,可以直接使用
Vector3 r = transform.right;
//用f和r作为向量的基,组成移动向量
Vector3 move = f * z + r * x;
//直接改变玩家位置
transform.position += move * speed * Time.deltaTime;
}
void MouseLook()
{
float mx = Input.GetAxis("Mouse X");
float my = -Input.GetAxis("Mouse Y");
Quaternion qx = Quaternion.Euler(0, mx, 0);
Quaternion qy = Quaternion.Euler(my, 0,0);
transform.rotation = qx * transform.rotation;
transform.rotation = transform.rotation * qy;
//angle是角色的俯仰角度
float angle = transform.eulerAngles.x;
// 使用欧拉角时,经常出现-1°和359°混乱等情况,下面这些情况加以处理
if (angle > 180)
{
angle -= 360;
}
if (angle < 180)
{
angle += 360;
}
//限制抬头低头角度
if(angle > 80)
{
transform.eulerAngles = new Vector3(80, transform.eulerAngles.y, 0);
}
if (angle < -80)
{
transform.eulerAngles = new Vector3(-80, transform.eulerAngles.y, 0);
}
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。