Unity学习02-引用赋值的两种方式

1. 在Inspector窗口上拖拽

引用定义:


物体拖拽(如果引用的不是物体(GameObject),就会自动赋物体身上的组件或脚本):
在这里插入图片描述

2. 在代码中通过内置API进行查找

  • 通过名字或路径查找游戏对象

    • 很消耗性能,不建议在updata中使用

    • GameObject.Find()

      GameObject gameObject =	GameObject.Find("GameObject");
      GameObject gameObject =	GameObject.Find("GameObject/ChildGameObject");
      
      • 无法查找隐藏对象(路径上任意一个对象被隐藏就找不到了)
    • Transform.Find()

      Transform gameObject =	transform.Find("GameObject");
      Transform gameObject =	transform.Find("GameObject/ChildGameObject");
      
      • 可以查找隐藏对象(前提是transform所在的根节点必须可见)
      • 可以把要寻找的物体放在一个不会被隐藏的物体下以便于查找隐藏物体。
  • 通过Tag标签查找

    • 查找不到禁用物体,使用时需确认要查找的物体是启用(显示)状态;

    • GameObject.FindGameObjectWithTag()

      GameObject camera= GameObject.FindGameObjectWithTag("MainCamera");
      
      • 根据标签查找游戏物体并返回。
    • GameObject.FindGameObjectsWithTag()

      GameObject[] grounds= GameObject.FindGameObjectsWithTag("Ground");
      
      • 根据标签查找当前场景中所有这个标签的游戏物体并返回所有物体的数组。
      • 只能单个物体识别(当多个物体都设置为同一个标签时候,只会识别程序运行后第一个获取到的物体)
  • 根据类型(组件/自定义脚本)查找并返回这个类

    • 查找不到禁用物体,使用时需确认要查找的物体是启用(显示)状态;
    • 查找场景中不存在类型时会返回null,不会报错;
    • GameObject.FindObjectOfType<类型>()
      Camera typeCamera = GameObject.FindObjectOfType<Camera>();
      
      • 根据标签查找当前场景中所有这个标签的游戏物体并返回所有物体的数组。
    • GameObject.FindObjectsOfType<类型>()
      Transform[] typeTransArr = GameObject.FindObjectsOfType<Transform>();
      
      • 根据类型(组件/自定义脚本)查找当前场景中所有这个类并返回一个这个类的数组。
  • 以自身为基础,查找子物体

    • Transform.GetChild()
      Transform child1 = transform.GetChild(0);  //一级子物体的第一个物体
      Transform child13 = transform.GetChild(0).GetChild(2); //找一级子物体的第一个物体的第三个子物体
      //遍历子物体
      for (int i = 0; i < transform.childCount; i++)
      {
              
              
           Debug.Log(transform.transform);
      }
      

参考详情:
#你好Unity3D#Unity获取游戏对象详解(来自我的长微博)
Unity查找游戏物体的六种方式详解

猜你喜欢

转载自blog.csdn.net/anxious333/article/details/126351809