什么是API?——预先设置好的编程接口
事件函数及常用脚本
事件函数的执行顺序
具体可参考:docs.unity.cn/cn/current/Manual/ExecutionOrder.html
*函数前加fix和不加fix的区别(如Fixupdate和update的区别):加fix后调用执行的次数固定,不会再受到电脑硬件影响。正常来说,电脑的一帧受硬件本身的影响,在0.02s左右上下浮动,update调用的次数就是0.02s左右一次,而fixupdate受客观时间影响,固定0.0166...667s执行一次
常用的事件函数
Time类
CaptureFrameRate 设置帧速率并截图
deltaTime 当前帧所占用时间
//在update方法中1s向前移动1m
//正常而言,update时间是0.02s(1/50 s)上下,直接写移动方法后物体相当于0.02s左右移动1m
cube.Translate(Vector3.forward/50f);
cube.Translate(Vector3.forward * Time.deltaTime); //更为精确的写法
fixedDeltaTime 固定的一帧所占用的时间
realtimeSinceStartup 从游戏开始运行到现在所用时间(不受暂停等操作影响)
//测试哪个方法更占用性能
public int runCount = 10000; //一条代码运行多次放大时间测试性能
void Method1()
{
int i = 1+2;
}
float time1 = Time.realtimeSinceStartup;
for(int i=0;i<runCount;i++)
{
Method1();
}
float time2 = Time.realtimeSinceStartup;
Debug(time2-time1); //该方法执行10000次所用时间
//-----------------------------------------------------------
void Method2()
{
int j = 1*2;
}
float time3 = Time.realtimeSinceStartup;
for(int i=0;i<runCount;i++)
{
Method2();
}
float time4 = Time.realtimeSinceStartup;
Debug(time4-time3);
//通过比较这两个差值,得出哪个方法更加占用性能
time 游戏实际运行时间
fixedTime 游戏实际运行时间,值和time接近
timeSinceLevelLoad Scene在加载后游戏运行的时间,如果进入下一个scene将重新计时
frameCount 帧数
timeScale 让游戏暂停/加速/减速
//游戏暂停
Time.timeScale = 0;
//影响Time.deltaTime的系数 可以理解为 Time.deltaTime *=Time.timeScale
//注意:物体需要*Time.deltaTime才会暂停
//0.5倍速
Time.timeScale = 0.5;
创建游戏物体
方法一:
GameObject go = new GameObject(); //括号内可加字符串如“Cube”,则创建一个方块
方法二:
//根据prefab或场景中的游戏物体创建
public GameObject prefab;
GameObject.Instantiate(prefab);
方法三:
GameObject.CreatePrimitive(PrimitiveType.Plane);
//该方法可创建U3D中基本形状
为游戏物体添加组件
GameObject go = GameObject.CreatePrimitive(PrimitiveType.Plane);
go.AddComponent<Rigidbody>();
go.AddComponent<API01EventFunction>(); //可以添加自定义脚本
判断游戏物体是否被禁用
xxx.activeInHierachy //判断场景中的物体是否被禁用,返回bool值
//物体会受到父物体是否被禁用的影响,如果父物体被禁用,则该物体也不显示,此时返回false
xxx.activeSelf //判断自身是否激活,即使父物体被禁用,如果物体本身未被禁用则返回true
Unity常用类
游戏——>场景——>游戏物体——>组件
一个游戏由多个场景组成
一个场景由多个游戏物体组成
一个游戏物体由多个组件组成
UnityEngine.Object(基类)——>GameObject
——>Component
UnityEngine.Object
属性
name 返回名称
方法
Destroy();
DontDestroyOnLoad(); 将物体从A场景带入B场景时不销毁游戏物体
FindObjectOfType<>(); 在游戏场景中找到第一个含有该组件物体下的第一个该组件
Light light = FindObjectOfType<Light>();
light.enabled = false;
FindObjectsOfType<>(); 找到游戏场景中的所有该组件并返回一个数组