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

2024-03-01 1379阅读

温馨提示:这篇文章已超过412天没有更新,请注意相关的内容是否还可用!

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


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

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

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏:Unity基础实战

⭐🅰️⭐



文章目录

    • ⭐🅰️⭐
    • ⭐前言⭐
    • 🎶(==1==) 角色控制器Character Contorller主要参数
    • 🎶(==2==) 角色控制器Character Contorller的实践
    • ⭐🅰️⭐

      ⭐前言⭐

      在Unity中,角色控制器(Character Controller)是一个用于控制角色移动和碰撞的组件。它是一种不依赖于物理引擎的方式来控制角色的移动,因此可以提供更加灵活和精确的控制。

      角色控制器主要用于第三人称游戏中的角色移动,如角色的行走、奔跑、跳跃等。它通过使用简单的函数来实现角色的移动,包括Move()函数用于移动角色,SimpleMove()函数用于施加重力。

      另外,角色控制器还提供了一些相关的属性和函数,用于控制角色与其他物体的碰撞检测和响应。例如,可以使用isGrounded属性来检测角色是否接触到地面,使用Move()函数来推动角色并与其他物体发生碰撞。

      需要注意的是,角色控制器是一种比较简单的移动方式,适用于一些简单的角色移动需求。对于复杂的物理碰撞和运动效果,可以使用Rigidbody组件来实现。

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

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

        添加后:

        无需再添加刚体

        能检测碰撞函数

        能检测触发器函数

        能被射线检测


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


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

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

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

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

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

            rigidbody.MovePosition( transform.localPosition + moveDerictor * velocity * Time.deltaTime); //速度*方向 = 向量

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

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

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

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


              🎶(2) 角色控制器Character Contorller的实践


              【Unity每日一记】角色控制器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();
                      playerAnimatior = GetComponent();
                  }
                  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().MovePosition( transform.localPosition + moveDerictor * velocity * Time.deltaTime); //速度*方向 = 向量
                          //此时物体并非跟着自己的旋转方向进行移动而是根据自身位置进行改变
                          //(白话:无法变成FPS的第一视角进行当前视角当前前进)       
                      }
                  }
                  private void MouseRotation()
                  {
                  }
                
              }
              

              ⭐🅰️⭐


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

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

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

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

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

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

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


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


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


VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]