赞
踩
Object类是Unity中所有对象的基类,例如GameObject、Component、Material、Shader、Texture、Mesh、Font等都是Object的子类。本博客介绍Object类的一些实例方法和静态方法。
在Object类中,涉及的实例方法主要有GetInstanceID方法:Object对象ID
public int GetInstanceID();
此方法用来返回Object对象的实例化ID
每个Object对象的实例、Object子类的实例如GameObject、Component等以及Object子类的子类的实例如Transform、Rigidbody等工程中都有唯一的ID(intl类型)。并且从程序开始运行到结束,除非对象被销毁,否则每个实例对应的ID都不会改变。
从GameObject.CReatePrimitive()或Object.Instantiate()中创建或克隆的每个名字相同的GameObject对象都有唯一的ID,即虽然名字相同,但ID却是不同的。在游戏开发中有时需要克隆大量的物体,而每个物体的声明周期需要单独记录,此时这两种方法很有用
using System; using System.Collections; using System.Collections.Generic; using System.Numerics; using UnityEngine; public class GetInstanceID_test : MonoBehaviour { void Start() { Debug.Log("gameObject的ID:" + gameObject.GetInstanceID()); Debug.Log("tranform的ID:" + transform.GetInstanceID()); GameObject g1, g2; //从GameObject创建一个对象 g1 = GameObject.CreatePrimitive(PrimitiveType.Cube); //克隆对象 g2 = Instantiate(g1, UnityEngine.Vector3.zero, UnityEngine.Quaternion.identity) as GameObject; Debug.Log("GameObject g1的ID:" + g1.GetInstanceID()); Debug.Log("Tranform g1的ID:" + g1.transform.GetInstanceID()); Debug.Log("GameObject g2的ID:" + g2.GetInstanceID()); Debug.Log("tranform g2的ID:" + g2.transform.GetInstanceID()); } }
在Object类中,设计的静态方法有Destroy
方法、DontDestroyOnLoad
方法、FindObjectOfType
方法、FindObjectsOfType
方法和Instantiate
方法,FindObjectOfType
方法和FindObjectsOfType
方法功能相似
(1)public static void Destroy(Object obj);
(2)public static void Destroy(Object obj,float t);
其中参数obj为待销毁的对象,参数t为销毁延迟时间,默认为0
此方法的功能是在执行完本方法t秒后销毁obj对象。方法DEstroy可以销毁一个GameObject对象,也可以销毁GameObject对象中的某个组件如Rigidbody、脚本等,但是除非销毁整个GameObject对象,否则不可单独销毁Transform组件。当销毁整个GameObject时GameObject的所有组件及子类将一并被销毁。
notes:与此方法功能相似的方法有DestroyIMMediate和DestroyObject。其中方法DestroyImmediate可以立即销毁某个Object对象及其在Assets中的资源文件,编程中慎用,推荐使用Destroy方法代替。
using System; using System.Collections; using UnityEngine; public class Destroy_test : MonoBehaviour { public GameObject GO,Cube; void Start() { //5秒后销毁GO对象的Rigidbody组件 Destroy(GO.rigidbody,5.0f); //7秒后销毁GO对象的Destroy_ts脚本 Destroy(GO.GetCompoent<Destroy_ts>(),7.0f); //10秒后销毁Cube对象,同时Cube对象的所有组件及其子类将一并销毁 Destroy(Cube,10.0f); } }
在这段代码中,首先声明了两个变量GO和Cube,然后再Start方法中一次销毁了GO独享的RIgidbody组件、GO对象的脚本组件和Cube对象。运行程序可以发小,销毁对象的某个组件时,对象自身不会被销毁,但销毁某个对象时,其所包含的组件将一并销毁。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。