【Unity每日一记】角色控制器Character Contorller

在这里插入图片描述


👨‍💻个人主页@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 专栏交流🧧
🟥✨Unity100个实战基础✨🟥🎁
🟦✨ Unity100个精华一记✨🟦🎁
🟩✨ Unity50个demo案例教程✨🟩🎁
🟨✨ Unity100个精华细节BUG✨🟨🎁

在这里插入图片描述

在这里插入图片描述




前言

在Unity中,角色控制器(Character Controller)是一个用于控制角色移动和碰撞的组件。它是一种不依赖于物理引擎的方式来控制角色的移动,因此可以提供更加灵活和精确的控制。
角色控制器主要用于第三人称游戏中的角色移动,如角色的行走、奔跑、跳跃等。它通过使用简单的函数来实现角色的移动,包括Move()函数用于移动角色,SimpleMove()函数用于施加重力。
另外,角色控制器还提供了一些相关的属性和函数,用于控制角色与其他物体的碰撞检测和响应。例如,可以使用isGrounded属性来检测角色是否接触到地面,使用Move()函数来推动角色并与其他物体发生碰撞。
需要注意的是,角色控制器是一种比较简单的移动方式,适用于一些简单的角色移动需求。对于复杂的物理碰撞和运动效果,可以使用Rigidbody组件来实现。

  • 角色控制器是让角色可以受制于碰撞,但是不会被刚体所牵制,角色控制器会让角色表现的更加稳定,排除可能因为刚体出现的在斜坡上自己滑动或者被撞飞

  • Unity提供了角色控制器脚本专门用于控制角色

    添加后:
    无需再添加刚体
    能检测碰撞函数
    能检测触发器函数
    能被射线检测


🎶(1 角色控制器Character Contorller主要参数


在这里插入图片描述

  • 1.是否接触地面——isGrounded();
  • 2.受重力移动 —— SimpleMove();
  • 3.不受重力移动——Move();
  • 4.碰撞器检测函数——OnControllerColliderHit(ControllerColliderHit hit)

1.取消Animator组件中的允许位移的功能勾选

在这里插入图片描述

  • 加入角色控制器之前——不随镜头向前移动(上帝视角)

rigidbody.MovePosition( transform.localPosition + moveDerictor * velocity * Time.deltaTime); //速度*方向 = 向量
在这里插入图片描述

  • 加入角色控制器之后——可以跟随镜头而向前移动(第一人称视角)

    player.SimpleMove( transform.forward + moveDerictor*velocity *Time.deltaTime );

在这里插入图片描述


🎶(2 角色控制器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()
    {

    }
  
}

🅰️


【Unityc#专题篇】之c#进阶篇】

【Unityc#专题篇】之c#核心篇】

【Unityc#专题篇】之c#基础篇】

【Unity-c#专题篇】之c#入门篇】

【Unityc#专题篇】—进阶章题单实践练习

【Unityc#专题篇】—基础章题单实践练习

【Unityc#专题篇】—核心章题单实践练习


你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!


在这里插入图片描述


  • 23
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秩沅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值