Object 体系结构常用方法
发表于2017-08-07
Object 体系结构
Monobehavior 常用方法 继承函数:
物体销毁:
static Destroy()
static DestroyImmdiate()
static DontDestroyOnLoad()
物体生成:
static Instantiate()
以上方法继承自 Object 类
物体辨认:
CompareTag()
消息的推送:
SendMessage()
SendMessageUpwards()
BroadcastMessage()
以上方法继承自 Component 类-------------------------------------------------------------------------------------------------------------------------------------------------
自身函数
延迟执行程序
Invoke()
InvokeRepeating()
IsInvoking()
CancelInvoke()
协同执行程序
StartCoroutine()
StopCoroutine()
StopAllCoroutine()
-------------------------------------------------------------------------------------------------------------------------------------------------
我是分割线 呜哈哈哈哈
-------------------------------------------------------------------------------------------------------------------------------------------------
Destroy 物体销毁
Destroy() : 可以在游戏中动态销毁任何东西,但是内存中并没有立即去释放,在刚销毁的时
候去调用物体的函数还是可以调用的
参数 1 : obj everyone
参数 2 : obj everyone,float 0.0f 多长时间后销毁everyone
DestroyImmdiate() : 立即销毁任何东西,可以直接删除资源
参数 1: obj everyone
参数 2: obj everyone, bool allowsDestroyAssets 是否允许连同资源删除,慎用
DontDestroyOnLoad():当切换了场景,在新场景中该物体以及该物体的子物体不会被销毁,会继续保留到新场景中。
PS:场景切换的时候,上一个场景的东西 都会被销毁。
-------------------------------------------------------------------------------------------------------------------------------------------------
Instantiate 物体的生成
public static function Instantiate(original: Object, position: Vector3, rotation: Quaternion): Object;
public static function Instantiate(original: Object): Object;
生成的物体没有父物体,需要后续指定。生成的物体的 name 后面会多出 (Clone) ,生成物体的参数可以是 GameObject 也可以是 Component 如果是 Component 那么生成的这个Component 所绑定的物体。 original 这里传入参数是什么类型,那么返回也一定是什么类型,无法强转成其他类型
-------------------------------------------------------------------------------------------------------------------------------------------------
CompartTag 物体标签的辨认
对物体标签对比的方法有两种:
gameObject.tag == "name"
gameObject.CompareTag("name");
两种方法,第二种要比第一种更高效
-------------------------------------------------------------------------------------------------------------------------------------------------
SendMessage 消息的推送
SendMessage() : 向特定的物体发送消息,在物体绑定的脚本中搜索方法名,搜索到了则执行
参数:string functionName ,obj 参数,SendMessageOptions 是否返回错误信息
SendMessageUpwards() : 向特定的物体发送消息,在物体以及物体的父Object绑定的脚本中搜索方法名,搜索到了则执行
参数:同上
BroadcastMessage():向特定的物体发送消息,在物体以及物体的子Object绑定的脚本中搜索方法名,搜索到了则执行
参数:同上
该调用是可以调用不同语言的,比如 JS 脚本中可以调用 C# 的方法,
PS:如果 GameObject 中搜索到了绑定的两个脚本,并且两个脚本中由同样的方法名那么两个方法都会被执行
-------------------------------------------------------------------------------------------------------------------------------------------------
Invoke 延迟执行程序
Invoke() : 设置多长时间后调用某方法
参数:string functionName, float time
InvokeRepeating() : 设置多长时间后以没多久调用一次的方式来重复调用某方法
参数:string functionName, float time, float repeatRate
IsInvoking():判断这个函数是否还在 Invoke 调用中
参数:string functionName
CancelInvoke:停止对某脚本的 Invoke 调用
参数:string functionName
PS:Invoke 调用的方法必须是无返回值 无参数的 ,Invoke 中的调用时间是受到 TimeScale 影响的
-------------------------------------------------------------------------------------------------------------------------------------------------
Coroutine 协同执行程序
协同程序是在主程序运行时同时开启另一段逻辑处理,来协同当前程序的执行,开启协同程序就是类似于开启了一个线程,但是协程不是线程
StartCoroutine()
StopCoroutine()
StopAllCoroutine()
有大量计算的功能不要写在 Update 中 会大大的拖慢程序的运行,需要加到StartCoroutine中运行
Yield return 后面可以有的表达式
null:下一帧运行
WaitForSeconds:输入一个时间,程序将被挂起一段时间
WaitForEndOfFrame:当帧结束即 GUI 渲染结束之前程序将被挂起
WaitForFixedUpdate:FixedUpdate 时间内挂起
Another coroutine:放入另一个协同程序,那么将在另一个协同程序执行完成前被挂起,知道完成再执行该程序
WWW:等待网络响应