UnityAPI学习之游戏物体的方法使用

目录

游戏物体

创建游戏物体的三种方式

组建的获取和查找

游戏物体的方法与其他成员变量

游戏物体的生成

游戏物体的激活状态/标签(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) 是一种根据给定类型查找游戏对象的便捷方法,可以用于获取场景中的特定类型的对象引用。

  • 8
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值