Unity3D实现第一人称移动,随鼠标转动视角+上楼梯(C#) 您所在的位置:网站首页 模拟器怎么用鼠标移动视角 Unity3D实现第一人称移动,随鼠标转动视角+上楼梯(C#)

Unity3D实现第一人称移动,随鼠标转动视角+上楼梯(C#)

2023-07-07 08:49| 来源: 网络整理| 查看: 265

Unity3D实现第一人称移动,随鼠标转动视角+上楼梯(C#)

第一人称移动: 1、在层级面板创建一个Capsule,命名为Player,将层级面板中的相机拖到Player下方 在这里插入图片描述 2、重置Player和摄像机的Transform数值(方便调整摄像机在Player上的位置),然后调整摄像机在Player上的位置 在这里插入图片描述 大概将摄像机放到Player眼睛的位置即可。 在这里插入图片描述 3、创建一个脚本,命名为CameraControl。并挂载到摄像机上。 代码内容

public class CameraControl : MonoBehaviour { public Transform player;//获取玩家 private float mouseX,mouseY;//获取鼠标位置 public float mouseSensitivity;//鼠标灵敏度 private float xRotation; private void Update() { mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime; mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime; xRotation -= mouseY;//在上下移动视角后,防止Y的值反弹回0(若不加这一条,每次上下移动视角移动一下后,视角都会弹回原位置,不会固定) xRotation = Mathf.Clamp(xRotation, -70f, 70f);//摄像机上下视角限制,对于Player(主角)来说,视角上下是有限制的,不然会很诡异 player.Rotate(Vector3.up*mouseX);//玩家随鼠标旋转 transform.localRotation=Quaternion.Euler(xRotation,0,0);//摄像机旋转 } }

4、将层级的Player拖到脚本中。 在这里插入图片描述 效果:(图中红线是后面操作实现的,现在没有是正确的) 在这里插入图片描述 5、对Player,删掉默认的Colider,添加Character Controller和Rigidbody 在这里插入图片描述 6、调整ChararcterController中参数来让碰撞体将Player包住(主要调整半径和高度) 在这里插入图片描述 7、创建一个脚本,命名为PlayerMove,挂载到Player上。 我写的是除了前后左右移动,当按下空格键,会加速

public class PlayerMove : MonoBehaviour { // Start is called before the first frame update private float walk; private float run; private float speed; private Vector3 dir; private CharacterController playerController; void Start() { walk = 250.0f; run = 500.0f; playerController = GetComponent(); } void Update() { float vertical = Input.GetAxis("Vertical"); float horizontal = Input.GetAxis("Horizontal"); if (Input.GetKey(KeyCode.Space)) speed = run; else speed = walk; dir = transform.forward * vertical + transform.right * horizontal; playerController.Move(dir*speed*Time.deltaTime); } }

上楼梯(利用射线检测) 8、在PlayerMove中添加代码,完整代码为

public class PlayerMove : MonoBehaviour { private float walk; private float run; private float speed; private Vector3 dir; private Vector3 dirY; private CharacterController playerController; private Vector3 rayOrigin; private Ray ray; void Start() { walk = 250.0f; run = 500.0f; playerController = GetComponent(); } void Update() { float vertical = Input.GetAxis("Vertical"); float horizontal = Input.GetAxis("Horizontal"); if (Input.GetKey(KeyCode.Space)) speed = run; else speed = walk; dir = transform.forward * vertical + transform.right * horizontal; playerController.Move(dir*speed*Time.deltaTime); rayOrigin = new Vector3(this.transform.position.x, this.transform.position.y, this.transform.position.z) + this.transform.forward * speed; ray.origin = rayOrigin; ray.direction = new Vector3(0, -1, 0); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { Debug.DrawLine(ray.origin,hit.point,Color.red); } dirY.y = -this.transform.position.y+ hit.point.y; playerController.Move(dirY); }

9、一定要将每个台阶加上碰撞体在这里插入图片描述 最终运行效果: 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有