unity3d查找游戏物体_unity3d查找游戏物体的方式 - CSDN
  • Unity查找游戏物体各种方法

    千次阅读 2019-04-29 23:07:06
    查找游戏物体各种方法 Object下的方法 FindObjectOfType 查找相应类型的游戏物体,查找到第一个就返回 不查找未激活的物体,如果物体未激活,返回值为Null Light light = FindObjectOfType<Light>();/...

    查找游戏物体各种方法

    • Object下的方法

    FindObjectOfType
    查找相应类型的游戏物体,查找到第一个就返回
    不查找未激活的物体,如果物体未激活,返回值为Null

    Light light = FindObjectOfType<Light>();//查找光
    

    FindObjectsOfType
    查找相应类型的游戏物体,查找全部,返回数组
    不查找未激活的物体

     Transform[] ts = FindObjectsOfType<Transform>();//查找所有Transform组件
    
    • GameObject下的方法

    GameObject.Find
    通过名称, 全局查找,比较消耗性能

    GameObject mainCamera = GameObject.Find("Main Camera");//查找主相机
     Camera camera = mainCamera.GetComponent<Camera>();//可以通过查找到的物体获取组件
    

    GameObject.FindGameObjectsWithTag
    通过标签查找,返回所有符合条件的游戏物体的集合
    在这里插入图片描述

     GameObject[] gos = GameObject.FindGameObjectsWithTag("MainCamera");
    

    GameObject.FindGameObjectWithTag
    通过标签查找,找到符合的第一个

     GameObject go = GameObject.FindGameObjectWithTag("MainCamera");
    

    GameObject.FindWithTag
    与FindGameObjectWithTag相同

    展开全文
  • 仅适用于tag场景中只有一个player tag时,若场景中有多个player tag,也只返回一个(场景中你最后创建的那个游戏物体)注意:无论运行该函数的游戏物体处于哪个父子层级,也无论目标tag处于哪个父子层级均能正常找到...

    1.添加tag

    GameObject obj = GameObject.FindWithTag("Player");

    仅适用于tag场景中只有一个player tag时,若场景中有多个player tag,也只返回一个(场景中你最后创建的那个游戏物体)

    注意:无论运行该函数的游戏物体处于哪个父子层级,也无论目标tag处于哪个父子层级均能正常找到(遍历所有游戏物体)

    2.GameObject.FindGameObjectsWithTag

            GameObject[] objs = GameObject.FindGameObjectsWithTag("Player");
            foreach (GameObject obj in objs)
            {
                Debug.Log(obj.name);
            }

    查找所有目标tag的游戏物体

    3.transform.find

            Transform t = transform.Find("3");
            Debug.Log(t.name);

    注意:该函数只能查找运行该函数的游戏物体下的子物体

    4.GetComponentsInChildren<>()

    4.1.GetComponentsInChildren<Transform>()

        public Transform[] transforms;
        private void Start()
        {
           test_4();
        }
        public void test_4()
        {
            GameObject obj = GameObject.FindWithTag("Player");
            transforms = obj.GetComponentsInChildren<Transform>();
        }

    注意:其中1的tag为player,GetComponentsInChildren<Transform>()包含自身的transform

    4.2GetComponentsInChildren<test>()

        public test[] transforms;
    	private void Start()
    	{
            test_4();
    	}
        public void test_4()
        {
            GameObject obj = GameObject.FindWithTag("Player");
            transforms = obj.GetComponentsInChildren<test>();
        }

    注意:1的tag为player,1与3-2与2-3没有挂载test脚本


    总结:GetComponentsInChildren<>()包含自身的Component

    5.遍历所有子物体(包含孙物体)

          GameObject obj = GameObject.FindWithTag("Player");
          transforms = obj.GetComponentsInChildren<Transform>();
          test_6(obj.transform);
        public void test_6(Transform transform)
        {
            foreach (Transform t in transform.GetComponentsInChildren<Transform>())
            {
                Debug.Log(t.name);
            }
        }

    注意:这里包含了1这个游戏物体

    6.遍历所有子物体(不包括孙物体)

        GameObject obj = GameObject.FindWithTag("Player");
        transforms = obj.GetComponentsInChildren<Transform>();
        test_7(obj.transform);
        public void test_7(Transform transform)
        {
            foreach (Transform t in transform)
            {
                Debug.Log(t.name);
            }
        }
    

    7.正确的Destroy()销毁游戏物体的方式

     GameObject obj = GameObject.FindWithTag("Player");
     transforms = obj.GetComponentsInChildren<Transform>();
     test_8(obj.transform);
     public void test_8(Transform transform)
        {
            List<GameObject> lst = new List<GameObject>();
            foreach(Transform t in transform)
            {
                lst.Add(t.gameObject);
            }
    
            for (int i = 0; i < lst.Count;i++)
            {
                Destroy(lst[i]);
            }
        }

    注意:某些时候也可以使用

       foreach(Transform t in transform)
            {
                Destroy(t.gameObject);
            }

    8.判断一个游戏物体下是否有子物体

    if(transform.childCount > 0)
    


    展开全文
  • 1.通过物体名字查找游戏物体 GameObject.Find(“Cube”);//查找名为Cube的游戏物体 GameObject.Find(“GameObject/Canvas/Text”);//可以指定路径位置 2.查找一个组件FindObjectOfType Transform ts=GameObject....

    1.通过物体名字查找游戏物体
    GameObject.Find(“Cube”);//查找名为Cube的游戏物体

    GameObject.Find(“GameObject/Canvas/Text”);//可以指定路径位置

    2.查找一个组件FindObjectOfType
    Transform ts=GameObject.FindObjectOfType ();//查找一个Transform组件(其他组件和脚本都可以查找),接受对象要和查找类型相同

    查找多个组件FindObjectsOfType
    Transform[] ts=GameObject.FindObjectsOfType ();

    foreach(Transform t in ts){
    print (t);
    }
    3.通过标签查找游戏物体
    GameObject.FindWithTag (“Player”)//查找一个标签
    GameObject.FindGameObjectWithTag (“Player”)//查找一个标签,一般用上面的FindWithTag
    GameObject.FindGameObjectsWithTag (“Enemy”)//查找多个标签,返回的是一个数组

    transform.Find()游戏运行可以查找隐藏的物体,GameObject.Find()不可以

    展开全文
  • Unity几种查找物体的方法

    万次阅读 2017-05-05 17:21:54
    Unity版本为5.3.2在脚本中查找游戏物体是非常常见的,这里列一些查找方法首先是Transform下面的using UnityEngine; using System.Collections;public class Communicate : MonoBehaviour { // Use this for ...

    Unity版本为5.3.2

    在脚本中查找游戏物体是非常常见的,这里列一些查找方法


    首先是Transform下面的

    using UnityEngine;
    using System.Collections;
    
    public class Communicate : MonoBehaviour {
    
        // Use this for initialization
        void Start () {
            Transform name1 =  transform.Find ("GameObject/name");//使用transform.find只能查询自身下一级的子物体,且子物体是否激活都能查到,若查询多级的子物体则加'/',hierarchy的路径
            Transform name2 = transform.FindChild("name");//这个跟transform.find一样
            print(name1);
            print(name2);
        }
    
        // Update is called once per frame
        void Update () {
    
        }
    }
    

    GameObject下面的

    using UnityEngine;
    using System.Collections;
    
    public class Communicate : MonoBehaviour {
    
        // Use this for initialization
        void Start () {
            GameObject name1 = GameObject.Find("name");//能查询,hierarchy中所有的物体,但是必须是激活的
            GameObject name2 = GameObject.FindGameObjectWithTag("name");//根据tag查找物体,但是必须是激活的
            GameObject[] name3 = GameObject.FindGameObjectsWithTag("name");//根据tag查找同一tag的物体,但是必须是激活的
        }
    
        // Update is called once per frame
        void Update () {
    
        }
    }
    

    这里注意出于性能原因,建议不要每帧使用GameObject.Find(),而应在启动时将结果缓存到成员变量中,或使用GameObject.FindWithTag。


    Object下面的

    using UnityEngine;
    using System.Collections;
    
    public class Communicate : MonoBehaviour {
    
        // Use this for initialization
        void Start () {
            Transform name1 = FindObjectOfType(typeof(Transform))as Transform;//在hierarchy中查找有transform组件的物体,必须是激活的
            Transform[] name = FindObjectsOfType(typeof(Transform))as Transform[];//在hierarchy中查找有transform组件的物体,必须是激活的
        }
    
        // Update is called once per frame
        void Update () {
    
        }
    }
    

    这里需要注意一点,使用这个方法很慢


    展开全文
  • Unity中各种查找物体的方法

    万次阅读 2018-06-26 10:42:54
    GameObject.Find()、Transform.Find查找游戏对象 1.前置条件 2.相关API 2.1 GameObject.Find 2.2 Transform.Find 2.3 其他查找 3 实际测试 4 即使隐藏root节点gameObject也能进行查找的方法 GameObjec...
  • using System.Collections; using System.Collections.Generic;...using UnityEditor; using UnityEngine;public class TestRes : MonoBehaviour { public GameObject go; // Use this for initialization vo
  • Unity查找物体的子物体、孙物体

    千次阅读 2018-07-06 14:40:04
    Unity查找物体下的所有物体 GetComponentsInChildren &lt;Transform&gt;() —— 获取物体下的所有物体 本文提供全流程,中文翻译。助力快速完成服务器的购买、配置、以及网站的搭建为新手节省宝贵的时间,...
  • 如何在unity3d查找子对象

    千次阅读 2017-01-01 18:01:11
    Unity3d中GameObject对象可以包括其他子GameObject,并且本身包括多个Component. 1.GameObject.Find("myObject") or FindGameObjectByTag will search the scene for an object called myObject.
  • Unity开发VR之Vuforia 本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) Chinar —— 心分享、心创新!助力...
  • Unity3D(通过Tag 标签查找物体)

    万次阅读 2018-09-01 23:01:42
    1.Tag 简介 Tag 标签,就是一个标签。标签可以起到标识,区分的作用。 同一类的模型,我们可以根据需要给他们设置成统一的标签。 2.给模型添加Tag 标签 ...3.通过Tag 标签查找N 个物体 GameObject....
  • unity:unity 在场景中查找物体

    千次阅读 2019-02-12 23:09:25
    直接上代码如图物体排列顺序,脚本挂在了第一个Cube上,基于Hierarchy 中查找,从上往下查找 直接上代码  void Start()  {  Transform transform= this.transform.GetChild(0); // 获取第一个子物体 括号里面...
  • Unity3D查找丢失材质和脚本工具

    千次阅读 2017-07-19 19:50:27
    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。CSDN视频网址:...
  • * 主题:查找一个物体的子物体 * Description: * 功能:XXX * Date:2019 * Version:0.1版本 * Author:Coffee * Modify Recoder: */ using System.Collections; using System.Collections.Generic; using U.....
  • 一般而言,我们在游戏中寻找物体可以使用 GameObject.Find(),GameObject.FindGameObjectWithTag(),FindObjectOfType()等这方式,在游戏运行的过程中,这几种方法各自都能运行的良好(有效率上的区别,我没有做过...
  • 本次表述的技术点是:unity3d--动态加载资源和查找资源的方式. 首先,先说下动态加载资源的方式吧. 1.对Resource.Load加载资源,这是耳熟能详的.资源放在Assets/Resources下面.(没有的话,自己创建)
  • Unity 3D 网络游戏架构设计

    千次阅读 2019-07-05 10:04:13
    本课程是 Unity 3D 系列教程,目标是带领读者搭建一个商业游戏的网络架构设计,该架构设计是游戏的核心技术,将采用 Unity 2017.2 最新版本作为开发工具。内容分为 UI 架构、技能架构、服务器和网络同步四大部分,共...
  • 步骤: 1 新建场景,并新建3个测试脚本,名称分别为 TestScript1、Test1、Test...3 在游戏物体GameObject1上挂载脚本TestScript1和TestScript2,在游戏物体GameObject2挂载脚本TestScript2,在游戏物体Test上挂载...
  • 本文介绍了Unity3D界面及游戏对象基本操作。
  • Unity3d 引擎原理详细介绍

    万次阅读 2014-03-25 13:22:52
     为了更好地理解游戏的软件架构和对象模型,它获得更好的外观仅有一名Unity3D游戏引擎和编辑器是非常有用的,它的主要原则。 Unity3D 引擎  Unity3D的是一个屡获殊荣的工具,用于创建交互式3D应用程序在多个...
  • Unity3D获得当前场景所有物体

    千次阅读 2019-02-22 16:41:32
    前言 1,GameObject.FindObjectsOfType(typeof(GameObject));//只能获得所有active...可以使用Resources.FindObjectsOfTypeAll获得所有物体,然后判断物体是否在当前场景中,来曲线救国。 核心代码如下: GameO...
1 2 3 4 5 ... 20
收藏数 2,130
精华内容 852
关键字:

unity3d查找游戏物体