👨💻个人主页:@元宇宙-秩沅
👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!
👨💻 本文由 秩沅 原创
👨💻 收录于专栏:Unity基础实战
⭐🅰️⭐
⭐前言⭐
-
角色控制器是让角色可以受制于碰撞,但是不会被刚体所牵制,角色控制器会让角色表现的更加稳定,排除可能因为刚体出现的在斜坡上自己滑动或者被撞飞
-
Unity提供了角色控制器脚本专门用于控制角色
添加后:
无需再添加刚体
能检测碰撞函数
能检测触发器函数
能被射线检测
🎶() 角色控制器Character Contorller主要参数
- 1.是否接触地面——isGrounded();
- 2.受重力移动 —— SimpleMove();
- 3.不受重力移动——Move();
- 4.碰撞器检测函数——OnControllerColliderHit(ControllerColliderHit hit)
1.取消Animator组件中的允许位移的功能勾选
- 加入角色控制器之前——不随镜头向前移动(上帝视角)
-
加入角色控制器之后——可以跟随镜头而向前移动(第一人称视角)
🎶() 角色控制器Character Contorller的实践
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目: ______________
//___________功能: 玩家的移动
//___________创建者:___秩沅____
//_____________________________________
//-------------------------------------
public class PlayerMove : MonoBehaviour
{
private float vertical;
private float horizontal;
private float mousePosition;
private CharacterController player; //角色控制器
private Vector3 moveDerictor; //移动的方向
public float velocity = 2f; //移动的速度
public float roVelocity = 10f;
private Animator playerAnimatior;
private void Awake()
{
player = GetComponent<CharacterController>();
playerAnimatior = GetComponent<Animator>();
}
private void FixedUpdate()
{
vertical = Input.GetAxis("Vertical") ;
horizontal = - Input.GetAxis("Horizontal") ;
mousePosition = Input.GetAxis("Mouse X");
//旋转
transform.localRotation *= Quaternion.Euler(0, mousePosition * roVelocity, 0);
if (vertical != 0 ||horizontal != 0)
{
//移动
playerAnimatior.SetFloat("SpeedWS", (int)vertical);
playerAnimatior.SetFloat("SpeedAD", (int)horizontal);
moveDerictor = new Vector3(vertical, 0, horizontal);
print(moveDerictor.normalized);
/// moveDerictor = moveDerictor.normalized; //将方向变成单位向量
//transform.position= transform.position + moveDerictor.normalized*Time .deltaTime ;
player.SimpleMove(transform.forward * vertical );
player.SimpleMove(transform.right * -horizontal);
//GetComponent<Rigidbody>().MovePosition( transform.localPosition + moveDerictor * velocity * Time.deltaTime); //速度*方向 = 向量
//此时物体并非跟着自己的旋转方向进行移动而是根据自身位置进行改变
//(白话:无法变成FPS的第一视角进行当前视角当前前进)
}
}
private void MouseRotation()
{
}
}
⭐🅰️⭐
你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!、