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