1.打印函数
print 需要继承MonoBehaviour类
Debug.Log
2.事件函数(生命周期函数)
(1)void Reset()
此函数只在编辑器模式下(不运行)调用
脚本挂载到对象时或者使用Reset命令后调用
用于初始化脚本各个属性,常用于在检视面板中提供良好默认值
(2)void Awake()
加载场景时初始化包含脚本的处于激活状态的GameObject时;
GameObject从非激活状态转变为激活状态时;
初始化使用Instantiate创建的GameObject时调用
脚本实例生存期内(生存期持续到包含它的场景被卸载为止),仅调用Awake一次
Unity调用每个GameObject的Awake顺序不一定
(3)void OnEnable()
每次游戏物体或脚本组件被激活时调用一次
用于重复赋值,变为初始状态
(4)void Start()
游戏物体或脚本组件被激活时,在第一帧的Update之前被调用一次,后于Awake执行
(5)void Update()
游戏物体或脚本组件被激活时,每一帧调用一次
(6)void LateUpdate()
游戏物体或脚本组件被激活时,每一帧调用一次,后于Update
(7)void OnDisable()
游戏物体被禁用或脚本组件被禁用或游戏物体被销毁时即时调用一次
(8)void OnApplicationQuin()
在程序退出之前或编辑器中终止播放模式时或网页视图关闭时即时调用一次
(9)void OnDestroy()
场景(游戏)结束或编辑器中终止播放模式或网页视图关闭或当前脚本被移除或当前脚本挂载的游戏物体被删除时即时调用一次
(10)变量赋值顺序
(先)变量声明并直接赋值->检视面板赋值->Awake->OnEnable->Start->外部赋值(后)
3.游戏物体
创建方式:
使用构造函数(声明+实例化)
根据现有的预制体(游戏物体)资源或者游戏场景已有的游戏物体来实例化 GameObject.Instantiate(GameObject)
使用API创建一些基本的游戏物体类型
GameObject.CreatePrimitive(PrimitiveType.xxx)
游戏物体的获取和查找:
this 指当前脚本组件
this.成员方法(变量) 获取当前脚本成员
this.gameObject 获取当前脚本挂载的游戏物体
(this一般可省略)
gameObject.SetActive(true) 改变激活状态
gameObject.tag 标签
gameObject.layer 层级
gameObject.name 名字
gameObject.activeInHierarchy 游戏激活状态
gameObject.activeSelf
查找其他游戏物体
有引用:引用名.xxx
无引用:
GameObject.Find(游戏物体名称) 查找对应游戏物体
GameObject.FindGameObjectWithTag(标签名)
GameObject.FindObjectOfType<类型(组件名)>();
多数查找:
GameObject[] xxx=GameObject.FindGameObjectsWithTag(标签名)
GameObject.FindObjectsOfType<类型(组件名>();
4.MonoBehaviour(基类),所有Unity脚本都派生自该基类
this.enabled 激活状态
this.name 名称
this.tag 标签
this.isActiveAndEnabled 是否激活且启用Behaviour
Destroy() 销毁组件
5.组件
MonoBehaviour->Behaviour->Component->Object
gameObject.GetComponent<类型>() 查找当前游戏物体组件
xxx.GetComponentInChildren<类型>() 查找对应游戏物体的第一个子物体组件
xxx.GetComponentsInChildren<类型>() 查找对应游戏物体的所有子物体组件
xxx.GetComponentInParent<类型>() 查找对应游戏物体的父物体组件
xxx.GetComponent<类型>().GetComponent<类型>() 通过组件查找同个游戏物体其他组件
6.变换组件
transform.name 名称
transform.gameObject 游戏物体的引用
transform.childCount 子对象transform个数
transform.position 世界坐标
transform.rotation 旋转(四元数形式)
transform.eulerAngles 旋转(度数)
transform.parent 父类transform
transform.localPositon 相对父对象的坐标
transform.localRotation 相对父对象的旋转(四元数形式)
transform.localEulerAngles相对父对象的旋转(度数)
transform.localScale 相对父亲对象的变换缩放
transform.forward 自身坐标正前方(z轴方向)
transform.right 自身坐标正右方(x轴方向)
transform.up自身坐标正上方(y轴方向)

查找:
transform.Find() 查找当前游戏对象的子对象的transform组件
transform.GetChild(int) 查找当前游戏对象的第x个子对象的transform组件
transform.GetSiblingIndex() 查找当前对象的父对象的同级子对象内的索引位置
静态方法:
Transform.Destroy()
移动:
transform.Translate(Vector2.rightmoveSpeed,Space.Self); 移动((缺省)使用自身坐标系)
transform.Translate(Vector2.right
moveSpeed,Space.World); 使用世界坐标系
旋转:
transform.Rotate(new Vector3(a,b,c));
transform.Rotate(Vector3.forward,1);
7.Vector2
静态变量:
Vector2.down
Vector2.up Y轴正方向单位向量
Vector2.left
Vector2.right X轴正方向
Vector2.one (1,1)
Vector2.zero (0,0)
成员变量
vector2.magnitude 模长
vector2.sqrMagnitude 模长平方
vector2.normalized 模长单位化后的坐标
vector2.x vector2.y v2[0] v2[1] xy值
vector2.Equals 完全相同才是true
vector2.Normalized() 将该向量单位化
vector2.Set(x,y) 设置向量的值
不能单独设置transform.position.x的值(可以x,y同时赋值)
(用属性和方法返回的结构体不能修改其字段)
静态函数:
Vector2.Angle(Vector2,Vector2) 计算两个向量的无符号夹角
Vector2.Distance(Vector2,Vector2) 计算两点之间的距离
Vector2.Dot(Vector2,Vector2) 计算两个向量的点积
Vector2.Max(Vector2,Vector2) 两个向量在各个方向上的最大分量组成的新向量
Vector2.Min(Vector2,Vector2) 两个向量在各个方向上的最小分量组成的新向量
Vector2.Lerp(Vector2,Vector2,float) 第一个向量向第二个向量按照float比例线性插值的新向量(由快到慢)
Vector2.LerpUnclamped(Vector2,Vector2,-1) 无限制线性插值
Vector2.MoveTowards(Vector2,Vector2,float) 将第一个点以最大距离不超过float的步频移向第二个点(匀速)
Vector2.SignedAngle(Vector2,Vector2) 有符号角度
Vector2.Scale(Vector2,Vector2) 两个向量在各个方向上的分量相乘得到的新向量
Vector2.SmoothDamp(Vector2,Vector2,ref Vector2(差值速度),float(平滑时间)) 平滑阻尼
8.访问输入系统的接口类
连续检测(移动)
Input.GetAxis(“Horizontal”) 轴值
Input.GetAxis(“Vertical”)
Input.GetAxisRaw(“Horizontal”) 边界轴值
Input.GetAxisRaw(“Vertical”)
Input.GetAxis(“Mouse X”) 鼠标水平移动增量
Input.GetAxis(“Mouse Y”)
连续检测(事件)
Input.GetButton(“Fire1”) 按下或按住鼠标左键
Input.GetButton(“Fire2”) 按下或按住鼠标右键
Input.GetButtonDown(“”) 按下时
Input.GetButtonUp(“”) 松开时
Input.GetKeyDown(“KeyCode.Q”) 按下Q键时
Input.anyKeyDown 按下任意键时
Input.GetMouseButton(0) 按下或按住鼠标左键
Input.GetMouseButtonDown(1) 按下鼠标右键时
Input.GetMouseButtonUp(2) 抬起鼠标中键时
9.消息的发送
仅发送消息给自己(以及身上其他MonoBehaviour对象)
gameObject.SendMessage(“方法名”)
SendMessage(“方法名”,方法参数)
SendMessage(“方法名”,SendMessageOptions.DontRequireReceiver)
广播消息(包括自己所有子对象)
BroadcastMessage(“方法名”)
向上发送消息(父对象包括自己)
SendMessageUpwards(“方法名”)
10.动画
animator.Play(“动画名”); 播放动画
animator.speed 动画播放速度(默认为1)
animator.SetFloat(“参数名”,值); 设置参数
animator.SetBool(“参数名”,值);
animator.SetInteger(“参数名”,值);
animator.GetFloat(“参数名”) 获取参数
animator.CrossFade(“动画名”,值) 以标准单位化时间进行淡入淡出来播放动画
animator.CrossFadeInFixedTime(“动画名”,值) 以秒为单位进行淡入淡出来播放动画
11.时间信息
Time.deltaTime 完成上一帧所用时间(以秒为单位)
Time.fixedDeltaTime 执行物理或者其他固定帧率更新的时间间隔
Time.fixedTime 自游戏启动以来总时间,通过fixedDeltaTime累积得到
Time.time 自游戏启动以来总时间通过deltaTime累积得到
Time.realtimeSinceStartup 游戏开始以来的实际时间
Time.smoothDeltaTime 经过平滑处理的Time.deltaTime的时间
Time.timeScale 时间流逝的标度
Time.timeSinceLevelLoad 当前场景运行时间
12.数学库函数
静态变量:
Mathf.Deg2Rad 度到弧度换算常量
Mathf.Rad2Deg 弧度到度换算常量
Mathf.Infinity 正无穷大的表示形式
Mathf.NegativeInfinity 负无穷大的表示形式
Mathf.PI
静态函数:
Mathf.Abs(参数); 绝对值
Mathf.Acos(参数); 反余弦
Mathf.Floor(参数); 小于或等于参数的最大整数
Mathf.FloorToInt();
Mathf.Lerp(a,b,t); a和b按参数t进行线性插值 a+(b-a)*t
Mathf.LerpUnclamped(a,b,t); a和b按参数t进行线性插值
Mathf.MoveTowards(当前值,目标值,t);
13.随机数
静态变量:
Random.rotation 随机旋转数(以四元数表示)
Random.rotation.eulerAngles 四元数转换欧拉角
Quaternion.Euler(Random.rotation.eulerAngles) 欧拉角转换四元数
Random.value 随机出[0,1]之间的浮点数
Random.insideUnitCircle 在(-1,-1)到(1,1)范围内随机生成的Vector2
静态函数:
Random.Range(a,b); 在区间[a,b)之间产生的随机数
整型重载不包含右边 浮点型重载包含右边
Random.InitState(int) 设置随机数状态
14.鼠标回调事件(MonoBehaviour里的方法)
需要碰撞器
private void OnMouseDown(){} 鼠标按下触发
private void OnMouseUp(){} 鼠标松开
private void OnMouseDrag(){} 鼠标按住不松拖拽
private void OnMouseEnter(){} 鼠标移入
private void OnMouseExit(){} 鼠标移开
privtae void OnMouseOver(){} 鼠标悬停
private void OnMouseUpAsButton(){} 鼠标在游戏物体身上松开
15.协程(协同程序)
IEnumerator 协程名() 协程方法中可以调用协程 协程可以带参数
{
yield return new WaitForSeconds(int); 协程挂起int秒
yield return null; 等待1帧
yield return 0;(任何数字都是1帧)
yield return new WaitForEndOfFrame(); 在本帧帧末执行以下逻辑
yield break; 协程方法终止
}
StartCoroutine(“协程名”); 协程启动与关闭
StopCoroutine(“协程名”);

StartCoroutine(协程名()); 可以启动
StopCoroutine(协程名()); 无法关闭 应当如下使用
IEnumerator ie=协程名();
StartCoroutine(ie);
StopCoroutine(ie);
StopAllCoroutines(); 停止所有协程
16.延时调用方法(Invoke调用的方法不带参数)
Invoke(“方法名”,int) 延时int秒调用方法
InvokeRepeating(“方法名”,a,b);延时a秒调用方法后每隔b秒调用方法
CancelInvoke(“方法名”); 停止
CancelInvoke(); 停止所有
IsInvoking(“方法名”); 判断方法是否被Invoke调用
IsInvoking(); 判断场景中是否有Invoke调用
17.刚体
rigidbody2D.position 刚体的位置
rigidbody2D.gravityScale 刚体受重力影响的程度
移动刚体位置
rigidbody2D.MovePosition(rigidbody2D.postion+Vector2.rightmoveSpeedTime.deltaTime)
rigidbody2D.AddForce(Vector2.right2); 给刚体施加(持续)力
rigidbody2D.AddForce(Vector2.right
2,ForceMode2D.Impulse); 给刚体施加(瞬时)力
rigidbody2D.velocity=Vector2.right*moveSpeed; 给刚体施加速度
rigidbody2D.MoveRotation(90); 刚体旋转90度
18.音频
audioSource.clip=AudioClip; 播放的音频资源
audioSource.Play(); 播放
audioSource.mute 静音
audioSource.volume 音量
aduioSource.Pause(); 暂停播放
audioSource.UnPause(); 恢复播放
aduioSource.Stop(); 停止
audioSource.time 开始播放时间
audioSource. PlayOneShot(AudioClip); 播放一次
AudioSource.PlayClipAtPoint(AudioClip,transform.position);
19.资源加载
Resources.Load<资源类型>(“资源名”); 加载资源(资源需放在Resources文件夹下);
Object obj=Resources.Load(“资源名”); 加载资源
资源类型 xx=obj as 资源类型; 类型转换
资源类型 xx=(资源类型)obj;
Resources.LoadAll<资源类型>(“”); 加载所有相应资源的对象
20.场景管理
using UnityEngine.SceneManagement;
SceneManager.LoadScene(场景编号); 加载场景
SceneManager.LoadScene(“场景名字”);
SceneManager.LoadSceneAsync(场景编号); 异步加载场景
AsyncOperation ao=SceneManager.LoadSceneAsync(场景编号);
ao.process 场景加载进度
ao.allowSceneActivation 场景是否允许激活

Q.E.D.