• Unity查找物体的四大主流方法及区别


    优点:

    使用简单方便
    不会因为重名而报错,同时查找的是自上而下的第一个物体
    缺点

    不能查找被隐藏的物体,否则出现“空引用异常”,这是很多新人在查找出现空引用bug的原因。
    全局查找(遍历查找),查找效率低,很消耗性能。
    代码演示:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;

    public class GameObjectFind : MonoBehaviour {

    private GameObject thing;

    void Start () {

    thing = GameObject.Find("C4");
    thing.name = "thing";

    }
    }

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Transform.Find(),通过Transform组件查找子物体。
    用这个方法查找物体时,根节点一定要处于“显示”状态,不能被隐藏。
    用它查找孙物体及孙孙物体,一定要使用“绝对路径”,否则出现“空引用异常”。
    代码演示:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;

    public class TransformFind : MonoBehaviour {

    private Transform m_Transform;
    private GameObject one;
    private GameObject two;

    void Start () {

    m_Transform = gameObject.GetComponent<Transform>();
    one = m_Transform.Find("D2").gameObject;
    two = m_Transform.Find("D2/D3").gameObject;

    Debug.Log(one.name);
    Debug.Log(two.name);

    }
    }

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    GameObject.FindGameObjectWithTag()和GameObject.FindGameObjectsWithTag(),通过Tag标签查找物体。
    GameObject.FindGameObjectsWithTag():通过Tag标签查找到一组物体,返回一个数组。
    GameObject.FindGameObjectWithTag():查找到这类tag标签,自上而下第一个物体。

    代码演示:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;

    public class TagFind : MonoBehaviour {

    private GameObject thing;
    private GameObject[] things;
    void Start () {

    things = GameObject.FindGameObjectsWithTag("Player");
    thing = GameObject.FindGameObjectWithTag("Player");

    Debug.Log(things.Length);
    Debug.Log(thing.name);

    }
    }

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    FindObjectsOfType()
    FindObjectsOfTypeAll():返回指定类型的对象列表。

    代码演示:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;

    public class FindObjectOfType : MonoBehaviour {

    private GameObject[] things;
    private GameObject thing;

    void Start () {

    things = FindObjectsOfType<GameObject>();
    thing = FindObjectOfType<GameObject>(http://www.my516.com);

    Debug.Log("第一个" + thing.name);
    for(int i = 0; i < things.Length; i++)
    {
    Debug.Log(things[i].name);
    }
    }
    }
    --------------------- 

  • 相关阅读:
    dnc开源梦之队2018 开源项目精选集
    2018年4月更新70多个公司dnc招聘职位
    首届.NET Core开源峰会
    回顾Google IO 2016 -Keynote【图解】
    SharedPreferences实现记住密码功能
    Android 五大布局
    Visual Studio Code 编辑器相关
    你好!2015!
    Get Start StrangeIOC for Unity3D
    Unity3d Web Player 的server端联网配置
  • 原文地址:https://www.cnblogs.com/ly570/p/11044514.html
Copyright © 2020-2023  润新知