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);
    }
}