参考方案:以官方的Standard Assets的ThirdPersonCharacter.cs为例。
最基础的C#请看这里→C#入门基础(一)
ThirdPersonCharacter.cs Part1 | ||||
代码块 | 简介 | 用法 | 放置位置 | |
01 | [RequireComponent(typeof(Rigidbody))] [RequireComponent(typeof(CapsuleCollider))] [RequireComponent(typeof(Animator))] |
请求组件,当挂上脚本的时候,会帮你添加这3个组件 | [RequireComponent(typeof(XXX))],改写XXX部分 | 继承MonoBehaviour的类外面 |
02 | [SerializeField] | 在面板序列化显示,但不想其它脚本访问它 | 直接加在变量前面,具体请看→这里 | 继承MonoBehaviour的类的类里面,方法的外面 |
03 | [Range(1f, 4f)] | 规定变量的范围,在面板会出现可以拖动的调节器 | 直接加在变量前面,具体请看→这里 | 继承MonoBehaviour的类的类里面,方法的外面 |
04 |
Rigidbody CapsuleCollider Animator |
物理相关,定义物体的重量等信息 | 这3个是Unity为你准备好的类,你可以正常使用类的方式,来使用它。 | 一般作为类声明,当然不止这3个,相对于胶囊碰撞体,还有一个立方体的碰撞体 |
胶囊碰撞体,用于碰撞检测 | ||||
动画状态机 | ||||
05 | m_Animator = GetComponent<Animator>(); | 用于获得组件变量 | 基础C#用法 | void Start()方法里面 |
06 | m_Rigidbody.constraints = RigidbodyConstraints.FreezeRotationX | RigidbodyConstraints.FreezeRotationY | RigidbodyConstraints.FreezeRotationZ; | 用于冻结XYZ轴,和你自己在面板上勾选一样 | 如代码所示 | void Start()方法里面 |
07 | Vector3 | 向量 | 基础C#用法,具体介绍请看→这里 | 在类或方法里面 |
先解释[1]为什么要请求对象?
作为一个人形物体,添加Rigbody、CapsuleColider、Animator是家常便饭的事情,手动添加其实也可以。
一方面,用代码添加方便选择并设置,一定程度减少了操作,比如 冻结XYZ轴。
另一方面,产生依赖,即你必须先移除该脚本,才能移除Rigbody、CapsuleColider、Animator,否则会报错。
第二,magnitude是个敏感词,它代表空间向量的距离;sqrMagnitude是未开平方的距离,它主要用于比较。
因为比较sqrMagnitude可以省去开方的资源消耗,所以一旦涉及向量大小比较,优先考虑sqrMagnitude。
magnitude源定义:
public float magnitude
{
get
{
return Mathf.Sqrt(this.x * this.x + this.y * this.y + this.z * this.z);
}
}
sqrMagnitude源定义:
public float sqrMagnitude
{
get
{
return this.x * this.x + this.y * this.y + this.z * this.z;
}
}
magnitude (Read Only)返回向量的长度,也就是点P(x,y,z)到原点(0,0,0)的距离。
sqrMagnitude (Read Only)返回未开方的数据。
参考文档: