1、事件函数:
start函数(只执行一次);
update函数(一帧执行一次);
事件执行顺序(Execution Order Of Event Functions)2、事件函数的执行时机和先后顺序:
Reset
Aweak
OnEnable(OnDisEnable)
FixedUpdate(每帧可能会调用多次,具有物理属性的)
Update和LateUpdate(每帧调用一次,与硬件设备相关联)触发触发器(OnTriggerXXX)
OnTriggerEnter 进入
OnTriggerStart 进行中
OnTriggerQuit 结束
触发碰撞器(OnCollisionXXX)
OnCollisionEnter 进入
OnCollisionStart 进行中
OnCollisionQuit 结束FixedUpdate每秒执行固定次数,应该将处理跟物理相关的运动的代码放在FixedUpdate中。
Update和LateUpdate跟硬件和代码性能有关,每秒执行次数不固定。3、Time类中静态变量介绍
<1> captureFramerate(减慢游戏回放时间,以便在帧间保存屏幕截图)
<2> deltaTime(当前帧所占用的时间,每一帧所占用的时间大概在1/60左右,常用的)
控制cube向前移动:public GameObject cube;
void Upate()
{
cube.Translate(Vector3.forward); // 1秒运行50次,每次运行1米
cube.Translate(Vector3.forward*Time.deltaTime); Time.deltaTime == 0.02秒
Time.timeScale = 0; //停止 与Time.deltaTime有关,可以做物体的停止或者慢运动
}
<3> fixedDeltaTime
<4> fixedTime(从游戏开始到现在所执行的时间)
<5> realTimeSinceStartup(做性能测试)Time.time 表示从游戏开始到现在的时间,会随着游戏的暂停而停止计算。
Time.timeSinceLevelLoad 表示从当前Scene加载完成到目前为止的时间,也会随着暂停操作而停止。4、Timedelta和realTimeSinceStartup的使用
Time.deltaTime 表示从上一帧到当前帧(上一帧所消耗的)时间,以秒为单位。
Time.fixedTime 表示以秒计游戏开始的时间,固定时间以定期间隔更新(相当于fixedDeltaTime)直到达到time属性。
Time.fixedDeltaTime 表示以秒计间隔,在物理和其他固定帧率进行更新,在Edit->ProjectSettings->Time的Fixed Timestep可以自行设置。
Time.SmoothDeltaTime 表示一个平稳的deltaTime,根据前N帧的时间加权平均的值。
Time.timeScale 时间缩放,默认值为1,若设置<1,表示时间减慢,若设置>1,表示时间加快,可以用来加速和减速游戏,非常有用。
Time.frameCount 已渲染总帧数。
Time.realtimeSinceStartup 表示自游戏开始后的总时间,即使暂停也会不断的增加,也不受timeScale影响。
Time.captureFramerate 表示设置每秒的帧率,然后不考虑真实时间。
Time.unscaledDeltaTime 不考虑timescale时候与deltaTime相同,若timescale被设置,则无效。
Time.unscaledTime 不考虑timescale时候与time相同,若timescale被设置,则无效。5、创建游戏物体的三种方法
1.第一种创建方法(当我们想创建一个空的游戏物体,然后在游戏物体下面添加东西时可以这样创建,新建的游戏物体相当于一个空物体)
GameObject go = new GameObject(“Cube”);
2.第二种
根据Prefab进行初始化
根据另外一个游戏物体进行实例化(场景中的物体比如MainCamera)
GameObject.Instantiate(prefab);
3.第三种
根据原始的一些图形来创建,需要指定类型
GameObject.CreatePrimitive(PrimitiveType.Plane);
GameObject.CreatePrimitive(PrimitiveType.Cube);6、如何给游戏物体通过代码添加组件
创建出来的物体可以通过AddComponent<>添加组件。
go.AddComponent();//添加组件
go.AddComponent();//添加脚本7、如何禁用和启用一个游戏物体
Debug.Log(go.activeInHierarchy);//activeInHierarchy(当我们将父物体禁用时,子物体的activeInHierarchy属性也为false但是子物体的activeSelf为true)
go.SetActive(false);
Debug.Log(go.activeInHierarchy);
Debug.Log(go.tag);8、GameObject、Component及Object之间的关系
一个游戏可以由多个场景构成;
一个场景可以由多个游戏物体组成;
多个组件构成一个游戏物体;C#的基类是System.Object,UnityEngine.Object是U3D游戏引擎的基类,该基类下又包含GameObject和Component两个子类。
UnityEngine.Object有name可供GameObject和Component进行访问,访问的name都是一样的。
9、GameObject独有的静态方法
CreatePrimitive
Find; // 通过游戏对象的name对所有的对象进行查找,耗费性能
FindWithTag // 返回一个活动的游戏对象标签。如果没有找到GameObject(游戏物体),返回null
FindGameObjectWithTag // 返回带有标签的活动游戏对象列表。如果没有找到GameObject(游戏物体),返回空数组。10、游戏物体间信息的发送和接收
发送消息:
BroadcastMessage;//以广播的形式发送
SendMessage;
SendMessageUpwards;
接受消息:
GetComponent;
GetComponentInChildren;
GetComponentInParent;
GetComponents;
GetComponentsInChildren;
GetComponentsInParent;BroadcastMessage()向所有子物体包括自身广播消息。
SendMessage()向自身发送消息。
SendMessageUpwards()向所有父物体包括自身广播消息。11、得到组件的各种方法函数
GetComponent
GetComponents
GetComponentInChildren
GetComponentsInChildren
GetComponentInParent
GetComponentsInParent12、MonoBehaviour总览
继承层次:Object->Component->Behaviour->MonoBehaviour13、MonoBehaviour里面的常用变量
isActiveAndEnabled
enabled
name
tag
gameObject
transform14、MonoBehaviour中Invoke的使用
CancelInvoke() 取消在这个脚本上的所有调用
void Invoke(string methodName, float time) 在time时间内调用名字为methodName的函数
void InvokeRepeating(string methodName, float time, float repeatRate) 在time时间内调用名字为methodName的函数,此后每
repeatRate秒就调用一次该函数
bool IsInvoking() 该MonoBehaviour上是否有等候调用的函数15、什么是协程,它是如何执行的
StartCoroutine(IEnumerator routine) 开启一个协程,利用yield语句暂停在某点,yield返回值指定了什么时机协程恢复。对于多帧执行一次的行为非常适合用协程解决,它几乎没有什么性能开销。该函数总是会立即返回,然而可以yield结果,这样可以等到协程执行完成返回。使用javascript不需要显示调用该函数,因为编译器已经为你调用了,而C#中必须显示调用。
StartCoroutine(string methodName, object value = null) 开启指定名字的协程。主要应用的场合是,当使用指定函数名字来开启协程时,就可以使用StopCoroutine来终止指定名字的函数。限制是仅能传递一个参数,而且有更高的运行时代价。
StopAllCoroutines() 终止运行在该MonoBehaviour上的所有协程。
StopCoroutine(string methodName) 终止运行在该MonoBehaviour上名字为methodName的协程。仅仅StartCoroutine的字符串开启的协程才可以使用该函数进行终止。16、使用Coroutine实现颜色动画渐变
IEnumerator Fade()
{
for (; ; )这是个死循环
{
1.cube.GetComponent().material.color = new Color(i,i,i,i);
Color color = cube.GetComponent().material.color;
Color newColor = Color.Lerp(color,Color.red,0.02f);
cube.GetComponent().material.color = newColor;
yield return new WaitForSeconds(0.02f);
if (Mathf.Abs(Color.red.g-newColor.g)<=0.01f)
{
break;
}
}
}
Coroutine
1.返回值IEnumerator
2.返回参数的时候使用yield return
3.协程方法的调用StartCoroutine(method());
IEnumerator ChangeColor()
{
print(“haColor”);
yield return new WaitForSeconds(3);//暂停三秒在执行后面的代码
cube.GetComponent().material.color = Color.blue;
print(“hahaColor”);
yield return null;
}
}
unity的api compatibility level怎么更新 unity api update required
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Unity解析key不确定的Json
Unity解析key不确定的Json
JSON Unity