目录
第一人称角色控制
😴1、准备工作
📺2、鼠标控制摄像机视角
🎮3、角色控制
😃4.杂谈
第一人称角色控制
专栏Unity之动画和角色控制-CSDN博客的这一篇也有讲到角色控制器,是第三人称视角的,以小编目前掌握的Unity知识来看第一人称和第三人称只不过是摄像机摆放的位置不同而已。
最开始学Unity的时候小编最想实现的就是角色控制这一功能,通过近一步学习鼠标晃动就可以实现视角的旋转,也可以通过跳跃跳到石头上去,我们一起来看。
下面我们来实现这一实例。
1、准备工作
先把我们的场景导入进来:
Low-Poly Simple Nature Pack,资源商店免费的资源。然后打开下图框中的文件就是我们要用到的场景了。
实例我们还是用胶囊来代表玩家,新建一个胶囊Player,把摄像机移动到玩家第一人称的位置。并把摄像机放到Player下面形成一个整体:
2、鼠标控制摄像机视角
准备工作做好后进入正题,编写鼠标控制视角的脚本并挂载到摄像机上:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FPSCamera : 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;
xRotation = Mathf.Clamp(xRotation, -70f, 70f); //限制鼠标上下旋转范围
player.Rotate(Vector3.up * mouseX);
//相机上下旋转
transform.localRotation = Quaternion.Euler(xRotation,0,0);
}
}
这样鼠标控制视角旋转就实现了。
3、角色控制
我们删除胶囊本身的碰撞器组件CapsuleCollider,挂载角色控制组件CharacterController,并新建实现移动的脚本挂载到Player中。
创建一个空对象GroundCheck,把它放到Player最底部位置,这里用空对象来检测与地面的碰撞。
给地面设置图层Ground
编写实现Player角色控制脚本:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//给玩家挂载 Character Controller 组件
public class FPSMove : MonoBehaviour
{
private CharacterController cc;
//移动速度
public float moveSpeed;
//跳跃速度
public float jumpSpeed;
//定义获得按键值的两个变量
private float horizontalMove, verticalMove;
private Vector3 dir;
//手动实现重力
public float gravity;
private Vector3 velocity;
//创建空对象放到玩家最底部用来检测碰没碰到地面,把空对象挂上来
//检测点的中心位置
public Transform groundCheck;
//检测点的半径
public float checkRadius;
//需要检测的图层
public LayerMask groundLayer;
//布尔值存储Physics.CheckSphere的返回值,判断是否与地面发生碰撞
public bool isGround;
private void Start()
{
//获取玩家挂载的角色控制组件
cc = GetComponent<CharacterController>();
}
private void Update()
{
//检测玩家是否在地面上,如果定义的球体和物体发生碰撞返回true
isGround = Physics.CheckSphere(groundCheck.position, checkRadius, groundLayer);
if (isGround && velocity.y < 0)
{
velocity.y = -2f;
}
//获得移动按键的值
horizontalMove = Input.GetAxis("Horizontal") * moveSpeed;
verticalMove = Input.GetAxis("Vertical") * moveSpeed;
dir = transform.forward * verticalMove + transform.right * horizontalMove;
//实现移动
cc.Move(dir * Time.deltaTime);
//每秒减去重力的值不断下降,手动实现重力
velocity.y -= gravity * Time.deltaTime;
cc.Move(velocity * Time.deltaTime);
//判断是否按下跳跃键
if (Input.GetButtonDown("Jump") && isGround)
{
//给玩家一个向上的速度
velocity.y = jumpSpeed;
}
}
}
把空对象的值赋到groundCheck中,检测碰撞的图层换为Ground,并根据自己的喜好调整移动速度等参数值,这样我们的第一人称角色控制就实现了。
小编还复习了初中重力物理公式(doge.jpg)G=mg。其中g是重力加速度,通常g取9.8,小编这里给10
4.杂谈
跟着飞羽老师学完基础部分感觉依然有好多知识,如果想实现某一功能的话可以进行针对性的学习。这篇第一人称角色控制就是这样,好在网上资料很多。
顺便想一下:角色控制有了;动画的使用也有所了解;像Unity之动画和角色控制-CSDN博客把它们结合到一起就可以实现移动的同时又做出相应的动作,又有好玩的了。
小编改了一下,点击鼠标释放技能播放挥手动画和技能特效,把跳跃和动画也加到实例中,《绿洲大镖客之重生我是闪电侠》v0.2(doge.jpg)
本篇内容就先讲到这里,拜拜┏(^0^)┛