目录
游戏物体
创建游戏物体的三种方式
组建的获取和查找
游戏物体的方法与其他成员变量
游戏物体的生成
游戏物体的激活状态/标签(tag)/层级(layer)
游戏物体的激活与失活
游戏物体的查找
1. 名称查找(Find)
2. 通过标签查找游戏物体(FindGameObjectWithTag/FindGameObjectsWithTag())
FindGameObjectWithTag
FindGameObjectsWithTag()
3. 通过类型查找游戏物体(FindObjectOfType(Type type))
游戏物体
创建游戏物体的三种方式
1.使用构造函数(声明+实例化) 创建一个空的游戏对象
2.根据现有的预制体(游戏物体)资源或者游戏场景已有的游戏物体
3.使用特别的API创建一些基本的游戏物体类型
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NO3_GameObject : MonoBehaviour
{
public GameObject grisGo;
// Start is called before the first frame update
void Start()
{
//1.使用构造函数(声明+实例化) 创建一个空的游戏对象
GameObject myGo = new GameObject("MyGameobject");
//2.根据现有的预制体(游戏物体)资源或者游戏场景已有的游戏物体
Instantiate(grisGo);
//3.使用特别的API创建一些基本的游戏物体类型
GameObject.CreatePrimitive(PrimitiveType.Plane);
}
// Update is called once per frame
void Update()
{
}
}
组建的获取和查找
this关键指的是当前代码中的游戏物体
现在要通过this关键字访问Gris物体的名字
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NO3_GameObject : MonoBehaviour
{
public GameObject grisGo;
// Start is called before the first frame update
void Start()
{
/*//1.使用构造函数(声明+实例化) 创建一个空的游戏对象
GameObject myGo = new GameObject("MyGameobject");
//2.根据现有的预制体(游戏物体)资源或者游戏场景已有的游戏物体
Instantiate(grisGo);
//3.使用特别的API创建一些基本的游戏物体类型
GameObject.CreatePrimitive(PrimitiveType.Plane);*/
Debug.Log(this.grisGo.name);
}
// Update is called once per frame
void Update()
{
}
}
游戏物体的方法与其他成员变量
游戏物体的生成
GameObject.Instantiate(可以生成任何已经存在的游戏物体)
GameObject.CreatePrimitive(用于生成Unity中一些基本的UI物体)
游戏物体的激活状态/标签(tag)/层级(layer)
游戏物体的激活与失活
gameobject.SetActive()
查看当前游戏物体的激活状态/标签/层级
//查看游戏物体标签
Debug.Log(gameObject.tag);
//查看游戏物体层级
Debug.Log(gameObject.layer);
//查看游戏物体的激活状态
Debug.Log(gameObject.activeInHierarchy);
Debug.Log(gameObject.activeSelf);
游戏物体的查找
1. 名称查找(Find)
示例:查找名为Main Camera的游戏物体并将其放在创建的容器里,输出其激活状态
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NO3_GameObject : MonoBehaviour
{
public GameObject grisGo;
// Start is called before the first frame update
void Start()
{
/*//1.使用构造函数(声明+实例化) 创建一个空的游戏对象
GameObject myGo = new GameObject("MyGameobject");
//2.根据现有的预制体(游戏物体)资源或者游戏场景已有的游戏物体
Instantiate(grisGo);
//3.使用特别的API创建一些基本的游戏物体类型
GameObject.CreatePrimitive(PrimitiveType.Plane);*//*
Debug.Log(this.grisGo.name);
//查看游戏物体标签
Debug.Log(gameObject.tag);
//查看游戏物体层级
Debug.Log(gameObject.layer);
//查看游戏物体的激活状态
Debug.Log(gameObject.activeInHierarchy);
Debug.Log(gameObject.activeSelf);*/
GameObject MainCamera = GameObject.Find("Main Camera");
Debug.Log(MainCamera.activeSelf);
}
// Update is called once per frame
void Update()
{
}
}
总结
1)函数的返回值是一个被查找到的对象(GameObject类),如果存在多个同名的物体,也只是返回其中一个。(可能不是你想要的那一个)
2)物体需要处于active()处于true状态才能被找到。
3)FInd()非常消耗性能,不建议在Update()方法里面使用。
4)该函数也可以查找子游戏物体对象。如果多个游戏场景同时运行,那么Find()查找的范围是所有场景。
2. 通过标签查找游戏物体(FindGameObjectWithTag/FindGameObjectsWithTag())
FindGameObjectWithTag
该方法与Find()用法比较相似,区别就是该方法是通过标签来查找一个不是特定的游戏物体,如果找到,则返回一个游戏物体对象,没有找到会传一个空字符或者null.抛出一个异常
示例:通过查找标签名为Main Camera的游戏物体查找该游戏物体的名称
GameObject MainCamera = GameObject.FindGameObjectWithTag("MainCamera");
Debug.Log(MainCamera.name);
总结
1)函数的返回值是一个被查找到的对象(GameObject类),如果存在多个同名的物体,也只是返回其中一个。(可能不是你想要的那一个)
2)物体需要处于active()处于true状态才能被找到。
3)该方法消耗的性能比Find()方法小
4)该函数也可以查找子游戏物体对象。如果多个游戏场景同时运行,那么Find()查找的范围是所有场景。
FindGameObjectsWithTag()
这个函数也是根据标签来查找游戏物体对象,它返回的是一个游戏物体对象数组,场景中存在相同标签的物体都将被返回。
示例:查找标签为enemy的游戏物体
创建Enemy空物体保存标签为enemy的物体(标签可以自行创建)
GameObject[] enemy = GameObject.FindGameObjectsWithTag("enemy");
for (int i = 0; i < enemy.Length; i++)
{
Debug.Log(enemy[i]);
}
总结
1)该函数方法的返回值是一个游戏数组对象,存在多个同标签的游戏物体,将全部返回、
2)物体需要处于active()处于true状态才能被找到。
3)该方法消耗的性能比Find()方法小
3. 通过类型查找游戏物体(FindObjectOfType(Type type))
示例:
NO3_GameObject No3 = GameObject.FindObjectOfType<NO3_GameObject>();
Debug.Log(No3.name);
总结
该函数会在场景中查找第一个匹配给定类型的游戏对象,并返回找到的游戏对象的引用。 参数 type 是一个 System.Type
类型的对象,用于指定要查找的类型。 请注意,该函数只返回在激活的场景中找到的对象。如果对象在不激活的场景中或被禁用,将无法找到。
该函数通常用于获取指定类型的单个组件实例。如果你想要一次获取多个匹配的组件实例,可以使GameObject.FindObjectsOfType(Typetype) 函数。
总而言之,GameObject.FindObjectOfType(Type type) 是一种根据给定类型查找游戏对象的便捷方法,可以用于获取场景中的特定类型的对象引用。