unityunity3d transformm.find 能遍历所有对象吗

Unity 3D之进阶篇Transform与foreach
我们通常使用Transform作为3D物体的一个位置属性来看待,从这个类中获取或者控制,物体的大小、位置、缩放值,或者通过transform来找到物体的子节点。but!!Transform继承了IEnumberable,是可以使用foreach遍历的。
Position, rotation and scale of an object.
public class Transform : Component, IEnumerable
首先获取unity里面对Transform类的定义。
Transform类继承自component类,并且继承IEnumerable的接口。
继承IEnumerable的对象我们知道是可以使用迭代器foreach来遍历的。
通常使用foreach的都是list、dictionary等耳熟能详的容器,那么和transform有什么关系呢?
Transform的迭代器
public class TestTransFind : MonoBehaviour {
void Start () {
Debug.Log(parent.transform.name);
foreach (Transform item in parent.transform)
Debug.Log(item.name);
}//end_class
将脚本挂在一个物体上,然后将canvas赋值给parent,
运行后输出:
可以看到在输出后将parent的所有子物体都输出出来了。
我们不知道getEnumberator内部是怎么实现的,但是我们知道,可以使用foreach来获取到transform的所有子对象。Gameobject是一个类型,所有的游戏物件都是这个类型的对象。
gameobject是一个对象, 就跟java里面的this一样, 指的是这个脚本所附着的游戏物件
public class ShowSliderValue : MonoBehaviour
private GameO //定义GameObject类型的指针
void Start(){
lal =gameObject.GetComponent&Text& (); //通过gameObject获取到Text组件.
Debug.Log ("Text" + lal.text); //打印获取到组件的中的text的属性
Text &lal =gameObject.GetComponent&Text& () 中不使用gameObject , 直接通过GetComponent&Text& (),也是可以的.
Transform是一个类,用来描述物体的位置,大小,旋转等等信息。transform是Transform类的对象,依附于每一个物体。也是当前游戏对象的一个组件(每个对象都会有这个组件)
transform与gameObject
<span style="color: #&二者的含义& & & &&transform : &当前游戏对象的transform组件& & & gameobject :当前游戏对象的实例
2&两者的联系和区别& & & & * 在unity中每个游戏对象都是一个gameobject. monodevelop中的gameobject就代表着本脚本所依附的对象. 每个gameobject都包含各种各样的组件,但从这点可以看出transform是gameobject的一个组件,控制着gameobject的位置,缩放,和旋转,而且每个gameobject都有而且必有一个transform组件& & & & *&gameobject.find用来获取场景中那个我们需要查找的对象(object). &而transform.find方法则是获取当前对象的子对象下我们需要获取的目标对象位置信息。& & & &&& & & & * 注意:&&在update() 中尽量不使用find() 方法,影响性能.& & &
3&gameobject.transform与transform.gameobject
& & & & * &gameobject.transform,是获取当前游戏对象的transform组件.& & & & & & 所以在start函数中 gameobject.transform 和this.transform,指向的都是同一个对象。即:gameobject.transform == this.transform == transform
& & & & * transform.gameobject:可以这么理解为:获取当前transform组件所在的gameobect& & & & & &所以在start()函数中transform.gameobject == this.gameobject == gameobect
&  所以他们可以无限的引用下去
意思就是。gameobject.transform == this.transform == gameobject.transform.gameobject.tranform == tranform.gameobect.transform
public class ShowSliderValue : MonoBehaviour
private GameO //定义GameObject类型的指针
private T//定义Transform类型的指针
void Start(){
Debug.Log ("gameObject.name:" + gameObject.name);
Debug.Log ("gameObject.transform.gameObject.name:" + gameObject.transform.gameObject.name);
Debug.Log ("ThisGame.name:" + this.gameObject.name);
参考链接:http://blog.csdn.net/lxl_815520/article/details/
阅读(...) 评论()相关文章推荐
1.GameObject.Find():寻找Hierarchy面板中的activie 不为false的游戏对象;
路径如官方事例写法:
public class ExampleClass : Mo...
GameObjectFindTransformFind查找游戏对象
前置条件相关API
1 GameObjectFind2 TransformFind3 其他查找
实际测试即使隐藏root节点ga...
今天跟着视频写代码,最后是获得游戏主角身上的脚本的信息来使物品栏显示。
就在Awake()方法里面写了GameObject.FindGameObjectWithTag(Tags.player).Get...
两者完全没有区别,用法完全一致。
唯一的不同就是 Transform.FindChild目前在文档中已经查不到。估计是官方已经用Transform.Find取代了它。Transform.FindChi...
今天用transform.Find()了,跟着 视频一步步敲的!
代码如下:
void InitProperty()
iconname_sprite...
在Unity中有以下两个Find方法,都是通过游戏对象名称来查找游戏对象的。public static GameObject Find(string name);
public Transform F...
主要有两种gameObjce.Find(".....");和transformFind(".....");
1.transformFind(".....");
优点:速度快,节省资源
GameObjectFindTransformFind查找游戏对象
前置条件相关API
1 GameObjectFind2 TransformFind3 其他查找
实际测试即使隐藏roo...
在unity3d中用Find可以直接查找组件
该脚本时绑在main Camera上的,"/Scene/player"这是在Hierarchy目录下直接找寻Scene
制作游戏时,我们游戏开发者所做的事情就是:通过编写脚本来控制场景中的游戏物体完成目标行为来表现游戏过程的发展。要控制游戏物体,首先就得找到它。所以,我们在编写脚本时会非常频繁的用到GameObject...
他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)GameObject.Find()、Transform.Find查找游戏对象
1.前置条件
Unity中常用到查找对象,非隐藏的、隐藏的,各种方法性能有高有低,使用又有各种条件限制。
在此对查找的性能和条件进行分析。开发时遇到的主要问题是查找隐藏对象。
没有完美的查找方法,只有最合适的查找方法
最后附带上测试代码
GameObject.Find&
Transform.Find&
GameObject.FindWithTag&
GameObject.FindGameObjectsWithTag&
Resources.FindObjectsOfTypeAll
2.1 GameObject.Find
通过名字或路径查找游戏对象。
GameObject.Find("GameObject");
GameObject.Find("GameObject/ChildGameObject);&
使用规范:&
1.无法查找隐藏对象&
隐藏对象包括查找路径的任何一个父节点隐藏(active=false)
2.如果查找不在最上层,建议合理使用路径查找,路径查找是把双刃剑
优点1:解决查找中可能出现的重名问题。&
优点2:如果有完全的路径,减少查找范围,减少查找时间。
缺点:&路径或结构调整后,容易影响到程序中的查找,需要重新定位查找路径。
3.如果路径查找中的任何一个父节点active=false,这个对象都将查找不到。
4.使用方便但效率低下&
此查找相当于递归遍历查找,虽使用方便但效率堪忧,建议在Start()函数中查找对象并保存引用,切忌在Update()中动态查找。
2.2 Transform.Find
1.可以查找隐藏对象&
2.支持路径查找&
3.查找隐藏对象的前提是transform所在的根节点必须可见,即active=true
GameObject root = GameObject.Find("root")
root.SetActive(false)
// 总是查找失败
root.transform.Find("root/AnyChildObjectName")
实际开发:&
实际开发中会将功能预制体放到一个可见的GameObject目录下,将这个GameObject目录作为查找根节点,下面的所有对象(隐藏、非隐藏)都可以查找到。
你可以把”map”节点放在一个active = true的MapRoot上,无论是关闭 或者 显示 代码中写起来都很方便。 假如你的map节点就是顶级节点,那么它一旦天生acive = false ,那么你将无法得到它的对象,更无法设置它的属性了。
GameObject root = GameObject.Find("MapRoot")
GameObject map = root.transform.Find("map").gameObject
map.SetActive(true)
2.3 其他查找
GameObject.FindWithTag&
GameObject.FindGameObjectsWithTag&
使用极少,并无卵用
Resources.FindObjectsOfTypeAll&
返回指定类型的对象列表。主要用于编辑器中,eg。检测内存泄露、批量查找的功能等
3 实际测试
目录结构如下,绿色代表现实,红色代表隐藏
void Start () {
// GameObject.Find
GameObject.Find("A11"); // true
// 父节点(受父节点影响)
GameObject.Find("A21"); // false
GameObject.Find("A22"); // true
// 孙子节点(受父节点影响)
GameObject.Find("A31"); // false
GameObject.Find("A32"); // false
GameObject.Find("A33"); // false
GameObject.Find("A34"); // true
GameObject.Find("A34"); // true 相对路径查找
GameObject.Find("/A34"); // false 绝对路径查找
GameObject.Find("/A11/A22/A34"); // true
GameObject.Find("A11/A22/A34"); // true
GameObject.Find("/A22/A34"); // false
GameObject.Find("A22/A34"); // true
// Transform.find
Transform A11 = transform.Find("A11"); // false
// 父亲节点
Transform A21 = transform.Find("A21"); // true
Transform A22 = transform.Find("A22"); // true
// 孙子节点
Transform A31 = transform.Find("A31"); // false
Transform A32 = transform.Find("A32"); // false
Transform A33 = transform.Find("A33"); // false
Transform A34 = transform.Find("A34"); // false
// 使用相对于根节点的查找目录
Transform AA31 = transform.Find("A21/A31"); // true
Transform AA32 = transform.Find("A21/A32"); // true
Transform AA33 = transform.Find("A22/A33"); // true
Transform AA34 = transform.Find("A22/A34"); // true
// 包含根节点的查找目录
Transform AA311 = transform.Find("A11/A21/A31"); // false
Transform AA321 = transform.Find("A11/A21/A32"); // false
Transform AA331 = transform.Find("A11/A22/A33"); // false
Transform AA341 = transform.Find("A11/A22/A34"); // false
// 绝对路径
Transform AA3111 = transform.Find("/A11/A21/A31"); // false
Transform AA3211 = transform.Find("/A11/A21/A32"); // false
Transform AA3311 = transform.Find("/A11/A22/A33"); // false
Transform AA3411 = transform.Find("/A11/A22/A34"); // false
4 即使隐藏root节点gameObject也能进行查找的方法
找到了一个即使隐藏root节点gameObject也能进行查找的方法。&
GameObject[] pAllObjects = (GameObject[])Resources.FindObjectsOfTypeAll(typeof(GameObject));
foreach (GameObject pObject in pAllObjects)
if (pObject.transform.parent != null)
if (pObject.hideFlags == HideFlags.NotEditable || pObject.hideFlags == HideFlags.HideAndDontSave)
if (Application.isEditor)
string sAssetPath = AssetDatabase.GetAssetPath(pObject.transform.root.gameObject);
if (!string.IsNullOrEmpty(sAssetPath))
Debug.Log(pObject.name);
参考文章:雨凇Unity获取游戏对象详解&
阅读(...) 评论()相关文章推荐
1.GameObject.Find():寻找Hierarchy面板中的activie 不为false的游戏对象;
路径如官方事例写法:
public class ExampleClass : Mo...
首先GameObject类下有一个find方法,参数是物体的名称,返回胶这个名称的物体。但缺点在于,查找不够精准,例如:GameObject.find("point");
凡是场景中有...
using System.C
using System.Collections.G
using UnityE
using UnityEpub...
GameObjectFindTransformFind查找游戏对象
前置条件相关API
1 GameObjectFind2 TransformFind3 其他查找
实际测试即使隐藏roo...
GameObjectFindTransformFind查找游戏对象
1 GameObjectFind
2 TransformFind
3 其他查找
即使隐藏root节点...
看API时想到了这个问题,如何获得一个物体的所有子物体,在Unity的API有这个函数 Component.GetComponentsInChildren 获取子物体组件列表。
首先是在Unity软件...
问题:如何遍历一个游戏物体的子对象
方法一: void FindObjects(GameObject obj){ print (obj.transform.childCount);int i=0;wh...
public GameObject[]
void Awake()
for (int i = 0; i
开始是找了下U3D的SCRIPT手册,发现找不到这玩意。然后在谷歌搜"unity3d get all child"才找到了答案。很简单的答案,不过挺有意思的,挺好用。
foreach (...
using System.Cusing System.Collections.G
using UnityE
using UnityE
他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 unity transform对象 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信