Object类是Unity中所有对象的基类,例如GameObject、Component、Material、Shader、Texture、Mesh、Font等都是Object的子类。本博客介绍Object类的一些实例方法和静态方法。
一、Object类实例方法
在Object类中,涉及的实例方法主要有GetInstanceID方法:Object对象ID
1、基本语法
public int GetInstanceID();
2、功能说明
此方法用来返回Object对象的实例化ID
每个Object对象的实例、Object子类的实例如GameObject、Component等以及Object子类的子类的实例如Transform、Rigidbody等工程中都有唯一的ID(intl类型)。并且从程序开始运行到结束,除非对象被销毁,否则每个实例对应的ID都不会改变。
从GameObject.CReatePrimitive()或Object.Instantiate()中创建或克隆的每个名字相同的GameObject对象都有唯一的ID,即虽然名字相同,但ID却是不同的。在游戏开发中有时需要克隆大量的物体,而每个物体的声明周期需要单独记录,此时这两种方法很有用
3、代码实现
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类静态方法
在Object类中,设计的静态方法有Destroy
方法、DontDestroyOnLoad
方法、FindObjectOfType
方法、FindObjectsOfType
方法和Instantiate
方法,FindObjectOfType
方法和FindObjectsOfType
方法功能相似
1、基本语法
(1)public static void Destroy(Object obj);
(2)public static void Destroy(Object obj,float t);
其中参数obj为待销毁的对象,参数t为销毁延迟时间,默认为0
2、功能说明
此方法的功能是在执行完本方法t秒后销毁obj对象。方法DEstroy可以销毁一个GameObject对象,也可以销毁GameObject对象中的某个组件如Rigidbody、脚本等,但是除非销毁整个GameObject对象,否则不可单独销毁Transform组件。当销毁整个GameObject时GameObject的所有组件及子类将一并被销毁。
notes:与此方法功能相似的方法有DestroyIMMediate和DestroyObject。其中方法DestroyImmediate可以立即销毁某个Object对象及其在Assets中的资源文件,编程中慎用,推荐使用Destroy方法代替。
3、代码实现
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对象。运行程序可以发小,销毁对象的某个组件时,对象自身不会被销毁,但销毁某个对象时,其所包含的组件将一并销毁。