目录
0 应用商店
1 角色上新增CharacterController 组件
1.1 角色上新增CharacterController 组件
1.2 如果没有这个则会报错编辑
2 速度
2.1 默认速度
2.2 修改速度为按时间计算
2.2 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 如果没有这个则会报错![](https://i-blog.csdnimg.cn/direct/4b06ea977e4f4f8684756d3f901a91a7.png)
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.2 movespeed,
- player1.Move(dir1*moveSpeed*Time.deltaTime);
- movespeed,声明为公共变量
- public float moveSpeed = 5.0f; // 移动速度
- 这样在脚本外unity里也可以修改
3 测试移动的代码
3.1 CharacterController 变量的声明
- private CharacterController player1
- player1=GetComponent<CharacterController>()
3.2 实现移动
3.2.1 方向向量
- //水平轴
- float horizontal=Input.GetAxis("Horizontal");
- //垂直轴
- float vertical=Input.GetAxis("Vertical");
- //创建成一个方向向量
- 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 updatevoid Start(){player1=GetComponent<CharacterController>();}// Update is called once per framevoid 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);}
}