当前位置: 首页 > article >正文

unity学习32:角色相关1,基础移动控制

目录

0  应用商店

1 角色上新增CharacterController 组件

1.1 角色上新增CharacterController 组件

 1.2 如果没有这个则会报错

2 速度

2.1 默认速度,按帧率计算

2.2 修改速度为按时间计算

2.3 movespeed,基础是1米/秒,这个就是每 movespeed米/秒

3 测试移动的代码

3.1 CharacterController  变量的声明

3.2 实现移动

3.2.1 方向向量

3.2.2 移动语句

3.3 代码和移动效果:测试可移动


0  应用商店

  • 甚至外部,能找到很多免费,的角色控制,摄像机,等等资源
  • 不光是角色的资源,动作资源,甚至对应的动作脚本都写好了
  • 这个是不是起到了类似 python 各种包的效果,而且还是 官方应用商店,下载起来更方便

1 角色上新增CharacterController 组件

1.1 角色上新增CharacterController 组件

  • 新建角色
  • 角色上新增CharacterController 组件
  • 新建脚本
  • 拖到这个角色上

 1.2 如果没有这个则会报错

  • 如果没有CharacterController,直接在gameObject上挂脚本会报错

  • There is no 'CharacterController' attached to the "player" game object, but a script is trying to access it.

MissingComponentException: There is no 'CharacterController' attached to the "player" game object, but a script is trying to access it.
You probably need to add a CharacterController to the game object "player". Or your script needs to check if the component is attached before using it.
UnityEngine.CharacterController.SimpleMove (UnityEngine.Vector3 speed) (at <bff907ed581f483ab4bd129472866e97>:0)
TestPlayerControl.Update () (at Assets/TestPlayerControl.cs:26)

2 速度

2.1 默认速度,按帧率计算

  • 每帧1米,肯定太快了
  • player1.Move(dir1*moveSpeed);

2.2 修改速度为按时间计算

  • player1.Move(dir1*moveSpeed*Time.deltaTime);
  • *Time.deltaTime 把移动速度,按帧率转化为按秒来计算
  • 但是,每秒1米太慢(这个是unity的基本速度)

2.3 movespeed,基础是1米/秒,这个就是每 movespeed米/秒

  • player1.Move(dir1*moveSpeed*Time.deltaTime);
  • movespeed,声明为公共变量
  • public float moveSpeed = 5.0f; // 移动速度
  • 这样在脚本外unity里也可以修改

3 测试移动的代码

3.1 CharacterController  变量的声明

因为 GetComponent<CharacterController>() 返回一个CharacterController 变量

  • private CharacterController player1
  • player1=GetComponent<CharacterController>()

或者只在函数内部用,直接声明且同时赋值为

  • CharacterController  player1=GetComponent<CharacterController>()

    

3.2 实现移动

3.2.1 方向向量

  • //水平轴
  • float horizontal=Input.GetAxis("Horizontal");
  • //垂直轴
  • float vertical=Input.GetAxis("Vertical");
  • //创建成一个方向向量
  • 一般:X是水平轴,Z是数值轴,Y是第3维高度
  • Vector3 dir1=new Vector3(horizontal,0,vertical);

显示移动方向

Debug.DrawRay(transform.position,dir1,Color.red);

3.2.2 移动语句

  • player1.SimpleMove(dir1);
  •  //player1.transform.Translate(2.0f*Time.deltaTime);
  • player1.Move(dir1*moveSpeed*Time.deltaTime);

3.3 代码和移动效果:测试可移动

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestPlayerControl : MonoBehaviour
{
    private CharacterController player1;
    public float moveSpeed = 5.0f; // 移动速度

    // Start is called before the first frame update
    void Start()
    {
        player1=GetComponent<CharacterController>();
    }

    // Update is called once per frame
    void Update()
    {
        //水平轴
        float horizontal=Input.GetAxis("Horizontal");
        //垂直轴
        float vertical=Input.GetAxis("Vertical"); 
        //创建成一个方向向量
        Vector3 dir1=new Vector3(horizontal,0,vertical);
        Debug.DrawRay(transform.position,dir1,Color.red);
        //
        player1.SimpleMove(dir1);
        //player1.transform.Translate(2.0f*Time.deltaTime);
        player1.Move(dir1*moveSpeed*Time.deltaTime);
    }
}


 


http://www.kler.cn/a/537172.html

相关文章:

  • 机器学习数学基础:19.线性相关与线性无关
  • [Deepseek-自定义Ollama 安装路径+lmStudio 简易安装]
  • Copilot量化指标参数及其方法
  • 免费windows pdf编辑工具
  • 【redis】数据类型之string
  • 哪些专业跟FPGA有关?
  • 课程知识图谱生成系统设计与实现
  • 【Android】版本和API对应关系表
  • BUU27 [SUCTF 2019]CheckIn1
  • Android开发经验谈:2021年Android网络编程总结篇,经典好文_android网络编程心得
  • 【redis】redis集群时的槽Slot是什么?
  • 深度学习:解码智能的“数字炼金术”
  • Java面试题及答案整理( 2022最新版,持续更新)
  • 链式前向星复习图论
  • 【GitHub】相关工具下载及使用
  • 高阶C语言|和结构体与位段的邂逅之旅
  • 109,【1】攻防世界 web 题目名称-文件包含
  • 1Panel应用推荐:WordPress开源博客软件和内容管理系统
  • 设计模式与技术组件
  • Office/WPS接入DS等多个AI工具,开启办公新模式!
  • 32.日常算法
  • javaEE初阶————多线程初阶(3)
  • 实现一个页面来维护定时任务,并在状态更改时实时启动或停止Job
  • PHP 面向对象编程详解
  • 使用PyCharm进行Django项目开发环境搭建
  • 【重新认识C语言----结构体篇】