[Unity]从零开始认识C#脚本——Unity官方案例研究(第三人称控制器)

参考方案:以官方的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)返回未开方的数据。

 

参考文档:

[1] [Unity]从零开始认识C#脚本

[2] [Unity3D]向量Vector3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章