Api 应用程序编程接口
前言
笔记是看siki学院中《Unity中常用api》的学习笔记
课程地址: http://www.sikiedu.com/my/course/59
强烈推荐大家去看老师的课
学习方法(001)
学习中切忌死记硬背,尤其是在学习代码中,要实际动手操作一下。
常用的方法经常使用,不常用的方法留下印象(看Unity文档和api手册)。
什么是事件函数(002)
unity中创建的所有脚本,都默认继承MonoBehaviour。
MonoBehavior——Behavior——Component——Object(继承关系)
默认有Start()方法 开始执行一次;和Update()方法 每帧可执行多次。
事件函数的执行顺序(Unity中文手册):https://docs.unity.cn/cn/current/Manual/ExecutionOrder.html
事件函数的执行时机和先后顺序(004)
1.Editor
Reset函数,编辑前就会调用执行。
2.Initialization
Awake函数,Onenable函数(onDisable函数后也可以调用),Start函数在场景启用或者物体被实例化后,就会被调用。
3.Physics
FixedUpdate函数,每秒固定调用一定次数(多次)。//与帧数不挂钩
OnTriggerXXX函数,OnCollisionXXX函数;(用于触发器和碰撞器)
yleld WaltForFixedUpdate函数。
4.Input events
OnMouseXXX函数,输入事件(鼠标)。
5.Game logic
Update函数,每帧运行一次函数。
(Internal animatiom update)
LateUpdate函数。
6.Scene rendering
(与场景渲染有关的函数)
7.Gizmo rendering
OnDrawGizmos函数,辅助线
8.GUI rendering
OnGUI函数,(现在基本不用,用UGI)
9.Pausing
OnApplicationPause函数,暂停的时候运行
10.Disable/enable
OnDisable函数
11.Decommissioning
退出场景时运用,物体会被销毁
OnApplicationQuit函数,OnDisable函数, OnDestroy函数。
Time类中的静态变量介绍(005)
Unity中文手册(Time类):https://docs.unity.cn/cn/current/ScriptReference/Time.html
captureFramerate | 减慢游戏播放时间,以便在帧之间保存屏幕截图。 |
deltaTime | 完成上一帧所用的时间(以秒为单位)(只读)。 |
fixedDeltaTime | 执行物理和其他固定帧率更新(如 MonoBehaviour 的 FixedUpdate)的时间间隔(以秒为单位)。 |
fixedTime | 最近一次 FixedUpdate 已启动的时间(只读)。此为自游戏启动以来的时间(以秒为单位)。 |
fixedUnscaledDeltaTime | 从上一个固定帧到当前固定帧的独立于 timeScale 的时间间隔(以秒为单位)(只读)。 |
fixedUnscaledTime | 最近一次 FixedUpdate 已启动的独立于 TimeScale 的时间(只读)。此为自游戏启动以来的时间(以秒为单位)。 |
frameCount | 已经过的总帧数(只读)。 |
inFixedTimeStep | 如果在固定时间步长回调(如 MonoBehaviour 的 FixedUpdate)内调用,则返回 true,否则返回 false。 |
maximumDeltaTime | 帧可以耗用的最长时间。物理和其他固定帧率更新(如 MonoBehaviour 的 FixedUpdate)将仅在每帧的该持续时间内执行。 |
maximumParticleDeltaTime | 帧可以在粒子更新上耗用的最长时间。如果帧耗用的时间超过该值,则将更新拆分为多个较小的更新。 |
realtimeSinceStartup | 游戏开始以来的实际时间(只读)。 |
smoothDeltaTime | 经过平滑处理的 Time.deltaTime(只读)。 |
time | 该帧开始的时间(只读)。此为自游戏启动以来的时间(以秒为单位)。 |
timeScale | 时间流逝的缩放。可用于慢动作效果。 |
timeSinceLevelLoad | 该帧开始以来的时间(只读)。此为自加载上一个关卡以来的时间(以秒为单位)。 |
unscaledDeltaTime | 从上一帧到当前帧的独立于 timeScale 的时间间隔(以秒为单位)(只读)。 |
unscaledTime | 该帧的独立于 timeScale 的时间(只读)。此为自游戏启动以来的时间(以秒为单位)。 |
TimedeltaTime和realTimeSinceStartup的使用(006)
Time.deltaTime
时间间隔,一般用来控制一些动画效果;比如移动物体可以:Vector3.forward* Time.deltaTime 来控制3D物体的移动。
Time.timeScale
控制时间的倍数。(控制Time和deltaTime)
Time.realTimeSinceStartup
计算游戏开始运行到现在时间,可用于性能测试,比如:
float time1 = Time.realTimeSinceStartup;
for(int i; i < 10000; i++)
{
method();
}
float time2 = Time.realTimeSinceStartup;
Debug.Log(time2 - time1);
创建游戏物体的三种方法(007)
构造方法
new
在Start函数中 new一个GameObjective。(空的游戏物体)比如: GameObject go = new GameObject("Cube")
Instantiate
根据prefab进行实例化(预设一个游戏物体)比如: GameObject.Instantiate(prefab)
或者可以克隆其他物体。
CreatePrimitive
创建一些原始的图形,比如: GameObject.CreatePrimitive(PrimitiveType.Plane)
还可以是Capsule , Cube , Cylinder , Plane , Quad , Sphere。
如何给游戏物体通过代码添加组件(008)
可以添加内部组件,也可以添加自定义的脚本
GameObject go = new GameObject("Cube")
go.AddComponent<Rigidbody>(); //添加刚体组件
go.RemoveComponent<Rigidbody>();//移除组件
如何禁用和启动一个游戏物体(009)
tag 标签(区分不同的游戏物体);transform 物体的位置;
activeInHerit 是否处于激活状态; activeSelf 物体是否被禁用(子物体在父物体下有关)
GameObject go = new GameObject();
go.SetActive(false); //禁用物体
go.SetActive(true); //激活物体
GameObject、Component和Object的千丝万缕的关系(010)
UnityEngine下Object用有的静态方法(011)
Unity中文手册(UnityEngine下Object):
https://docs.unity.cn/cn/current/ScriptReference/Object.html
变量
hideFlags | 该对象应该隐藏、随场景一起保存还是由用户修改? |
name | 对象的名称。 |
公共函数
GetInstanceID | 返回对象的实例 ID。 |
ToString | 返回 GameObject 的名称。 |
静态函数
Destroy | 删除 GameObject、组件或资源。 |
DestroyImmediate | 立即销毁对象 /obj/。强烈建议您改用 Destroy。 |
DontDestroyOnLoad | 在加载新的 Scene 时,请勿销毁 Object。 |
FindObjectOfType | 返回第一个类型为 type 的已加载的激活对象。 |
FindObjectsOfType | 返回所有类型为 type 的已加载的激活对象的列表。 |
Instantiate | 克隆 original 对象并返回克隆对象。 |
运算符
bool | 该对象是否存在? |
operator != | 比较两个对象是否引用不同的对象。 |
operator == | 比较两个对象引用,判断它们是否引用同一个对象。 |
GameObject独有的静态方法(012)
Unity中文手册(UnityEngine下GameObject):
https://docs.unity.cn/cn/current/ScriptReference/GameObject.html
变量
activeInHierarchy | 定义 GameObject 在 Scene 中是否处于活动状态。 |
activeSelf | 此 GameObject 的本地活动状态。(只读) |
isStatic | 仅限 Editor 的 API,指定游戏对象是否为静态。 |
layer | 该游戏对象所在的层。 |
scene | 该 GameObject 所属的场景。 |
tag | 此游戏对象的标签。 |
transform | 附加到此 GameObject 的 Transform。 |
构造函数
GameObject | 创建一个名为 name 的新游戏对象。 |
静态函数
CreatePrimitive | 创建一个具有原始网格渲染器和相应碰撞体的游戏对象。 |
Find | 按 name 查找 GameObject,然后返回它。 |
FindGameObjectsWithTag | 返回标记为 tag 的活动 GameObject 的列表。如果未找到 GameObject,则返回空数组。 |
FindWithTag | 返回一个标记为 tag 的活动 GameObject。如果未找到 GameObject,则返回 null。 |
游戏物体间消息的发送和接收(013)
Unity中文手册(UnityEngine下GameObject):
https://docs.unity.cn/cn/current/ScriptReference/GameObject.html
Message类
BroadcastMessage | 调用此游戏对象或其任何子项中的每个 MonoBehaviour 上名为 methodName 的方法。(广播消息) |
SendMessage | 调用此游戏对象中的每个 MonoBehaviour 上名为 methodName 的方法。 |
SendMessageUpwards | 调用此游戏对象中的每个 MonoBehaviour 上或此行为的每个父级上名为 methodName 的方法。 |
得到组件的各种方法函数(014)
Unity中文手册(UnityEngine下GameObject):
https://docs.unity.cn/cn/current/ScriptReference/GameObject.html
AddComponent | 将名为 className 的组件类添加到该游戏对象。 |
CompareTag | 此游戏对象是否使用 tag 进行了标记? |
GetComponent | 如果游戏对象附加了类型为 type 的组件,则将其返回,否则返回 null。 |
GetComponentInChildren | 使用深度首次搜索返回 GameObject 或其任何子项中类型为 type 的组件。 |
GetComponentInParent | 返回 GameObject 或其任何父项中类型为 type 的组件。 |
GetComponents | 返回 GameObject 中类型为 type 的所有组件。 |
GetComponentsInChildren | 返回 GameObject 或其任何子项中类型为 type 的所有组件。 |
GetComponentsInParent | 返回 GameObject 或其任何父项中类型为 type 的所有组件。 |
SetActive | 根据给定的值 true 或 /false/,激活/停用 GameObject。 |