> 文档中心 > Unity3D中实现人物的第一人称视角

Unity3D中实现人物的第一人称视角

  1. 打开unity创建一个场景地图可以添加一个Plane作为地面
    Unity3D中实现人物的第一人称视角
  2. 在Hierarchy视图中右键创建一个胶囊体(Capsule)作为Player,添加好后重置胶囊体的位置,并且调整胶囊体在一个合适的位置。
    Unity3D中实现人物的第一人称视角
  3. 将Main Camera拖拽到到player内作为子对象,重置一下Main Camera的transform,并且再调整一下它在player中的位置。大致放在胶囊体的上方位置,像眼睛一样。
    Unity3D中实现人物的第一人称视角
  4. 在project视图中右键创建一个文件夹Scripts用来存放脚本,进入文件夹右键创建一个脚本并且命名为Camrea Controller将创建好的脚本添加到Main Camrea内用来控制相机。
    Unity3D中实现人物的第一人称视角
  5. 打开脚本进行编写
using System.Collections;using System.Collections.Generic;using UnityEngine;public class CameraController : MonoBehaviour{    //获得player的transform    public Transform player;    //获取鼠标移动的值    private float mouseX, mouseY;    //添加鼠标灵敏度    public float mouseSensitivity;    //声明变量来累加mouseY    public float xRotation; void Update()    { //获得鼠标左右移动的值 mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime; //获得鼠标上下移动的值 mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime; xRotation -= mouseY; //用数学函数Mathf.Clamp()将xRotation的值限制在一个范围内 xRotation = Mathf.Clamp(xRotation, -70, 70); //使用transform中的Rotate()方法使player旋转 player.Rotate(Vector3.up * mouseX); //使用transform.localRotation()方法使相机上下旋转 transform.localRotation = Quaternion.Euler(xRotation, 0, 0);    }}

6.设置一下脚本的参数
Unity3D中实现人物的第一人称视角

  1. 再创建一个脚本Player Controller用来控制角色的移动跳跃。
    将胶囊体原有的coollder删除添加一个Character Controaller这个组件中包括了碰撞器与刚体组件。
    Unity3D中实现人物的第一人称视角
  2. 编写控制角色的脚本
using System.Collections;using System.Collections.Generic;using UnityEngine;public class PlayerControaller : MonoBehaviour{ //获得Player的CharacterController组件    private CharacterController cc;    [Header("移动参数")]    //定义player的移动速度    public float moveSpeed;    [Header("跳跃参数")]    //定义player的跳跃速度    public float jumpSpeed;    //定义获得按键值的两个变量    private float horizontalMove, verticalMove;    //定义三位变量控制方向    private Vector3 dir;    //定义重力变量    public float gravity;    //定义y轴的加速度    private Vector3 velocity;    //检测点的中心位置    public Transform groundCheck;    //检测点的半径    public float checkRadius;    //定义需要检测的图层    public LayerMask groundLayer;    [Header("检测角色状态")]    public bool isOnground;    public bool isJump;    void Start()    { //用GetComponent()方法获得CharacterController cc = GetComponent<CharacterController>();    } void Update()    { //使用Physics.CheckSphere()方法改变isOnground的值为true isOnground = Physics.CheckSphere(groundCheck.position,checkRadius,groundLayer); if(isOnground && velocity.y < 0) {     velocity.y = -1f; } //用Input.GetAxis()方法获取按键左右移动的值 horizontalMove = Input.GetAxis("Horizontal") * moveSpeed; //用Input.GetAxis()方法获取按键前后移动的值 verticalMove = Input.GetAxis("Vertical") * moveSpeed; //将方向信息存储在dir中 dir = transform.forward * verticalMove + transform.right * horizontalMove; //用CharacterController中的Move()方法移动Player cc.Move(dir * Time.deltaTime); //当键盘按空格的时候可以完成角色的跳跃,并且使角色只能够跳跃一次 if (Input.GetButtonDown("Jump") && isOnground) {     velocity.y = jumpSpeed;     isJump = true; } //通过每秒减去重力的值不断下降 velocity.y -= gravity * Time.deltaTime; //用CharacterController中的Move()方法移动y轴 cc.Move(velocity * Time.deltaTime);    }}
  1. 在胶囊体下新建一个空物体用来判断角色是否碰到地面图层,并且将位置调整到胶囊体的底部。
    Unity3D中实现人物的第一人称视角
  2. 将地面的图层设置为ground

Unity3D中实现人物的第一人称视角

  1. 对控制角色移动的脚本添加相应的参数

Unity3D中实现人物的第一人称视角