unity中如何unity 获得子物体多个子物体的Transform

信念就是不可动摇的意志
测试常用的层级内组件查找接口,但一些需求还是需要扩展
比如按照名称批量查找节点,查找接口对象等
1.Transform - Transform Find(string name)
可以直接根据名称搜索到子层级节点和孙节点等,支持非激活的节点,但不能返回数组
不支持搜索自身
var bTransform = transform.Find("a/b");
Debug.Log(bTransform);
void OnEnable()
var cc = GameObject.Find("cc");
Debug.Log(cc);
2.Transform - Transform&FindChild(string name)
可以搜索到子节点,但不支持孙节点,曾孙节点等。支持非激活的节点
不支持搜索自身,出场率很低,基本用不到
var aTaransform = transform.FindChild("a");
Debug.Log(aTransform);
<ponent -&T&GetComponentInChildren&T&(bool includeInactive)
支持深度搜索,而不是只搜索下一层级。
如果自身存在这个组件,可返回自身
如果是非激活的对象,第二个参数includeInactive设为true即可搜索到
但缺点是只能搜索组件,不能按照名称搜索
但GetComponentsInChildren可以搜索多个,返回数组
GetComponentInParent规则同此条
阅读(...) 评论()特殊情况下我们要用GetChild定位引用对象但是 手机和电脑上测试的结果不一样,所以尽量有名字或者&FindChild来定位一个对象。
本文已收录于以下专栏:
相关文章推荐
特殊情况下我们要用GetChild定位引用对象但是 手机和电脑上测试的结果不一样,所以尽量有名字或者&#160;FindChild来定位一个对象。
1.GameObject.Find():寻找Hierarchy面板中的activie 不为false的游戏对象;
路径如官方事例写法:
public class ExampleClass : Mo...
一。三角形的种类
三角形一般可以分为如下的四种类型(这四种类型是对于计算机来说的,不是数学意义上的分类):
平顶三角形:就是在计算机中显示的上面两个顶点的Y坐标相同。
平底三角形:就是在计算机中...
如何判断一个物体下是否有子物体?getchild(0)!=null?显然不可取
那去获取拿到子物体数量?transform.GetChildCount();可以解决
但在新版本中已被弃用,可用tran...
for (int i = 0; i & rewardGrid.transform.childC i++)
GameObject it = rewardGrid.transform...
杨树明 &#160;  杨树明 个人简介 杨树明  杨树明,男,1940年出生,现任西南政法大学教授,研究生部主任,博士生导师,校法学学科高级职务评审组成员,校学术、学位和研究生招生委员会委员,中国国际经济法学...
在学习unity3d的时候很容易看到下面这个例子:
1 void Start () {
StartCoroutine(Destroy());
5 IEnumerat...
他的最新文章
讲师:王哲涵
讲师:韦玮
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)Unity3D获取物体的所有子物体对象(child)
日期: 18:06:23
来源:ITeye
Unity3D获取物体的所有子物体对象(child)
开始是找了下U3D的SCRIPT手册,发现找不到这玩意。然后在谷歌搜"unity3d get all child"才找到了答案。很简单的答案,不过挺有意思的,挺好用。
foreach (Transform child in transform)
Debug.Log(child.gameObject.name);
transform是你所需要找的物体gameobject的transform。这个for循环就相当于遍历了它的子对象,此时你只要做的是将一个个放进个数组里面就行了。想过滤掉一些子物体在循环里面写一下也就OK了。
删除所有子物体的话:
foreach(Transform child in transform){
Destroy(child.gameObject);
忘了是什么时候,以前是不可以这样删的,不过现在可以了。
遍历删除的方法好像是不可以的,还是要将它储存到一个LIST里面一个个去删。貌似有的情况可以有的不可以,很奇怪。
本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
本篇文章是继续上篇 android图片压缩上传系列-基础篇 文章的续篇。主要目的是:通过Service来执行图片压缩任务来讨论如何使用Service,如何处理任务量大的并发问题。 了解下Service 大家都知道如果有费时任务,这时需要将任务放到后台线程中执行,如果对操作的结果需要通过ui展示还需要在任务完成后通知前台更新。当然对于这种情况,大家也可以在Activity中启动线程,在线程中通过Handler和sendMessage来通知Activity并执行更新ui的操作,但是更好的方法是将这些操作放到单
学习如何处理和加载Bitmap,显示在UI上非常的重要。如果你不重视这块,Bitmap讲很快耗尽你的内存资源,最终导致oom内存溢出。 移动设备的内存资源很稀缺,很多时候每个应用只能分配到16MB的内存空间。部分机型可能分配的会更多,但是我们必须保证不超过最大内存的限制。 Bitmaps本身就非常占用资源。比如一个Galaxy Nexus拍一张照片分辨率。如果使用ARGB_版本以后默认值)加载bitmap的话,加载这张图将耗费将近19MB( byte
AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作, 并 提供接口反馈当前 异步执行的程度 (可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程. 使用的优点: l
简单,快捷 l
过程可控 使用的缺点 : l
在使用多个异步操作和并需要进行Ui变更时,就变得复杂起来. 2 Handler异步实现的原理和适用的优缺点 在Handler 异步实现时,涉及到 Handler, Loo
第1节 选择Arduino开发板 1.1 Arduino是什么 对Arduino,官方有一堆解释。 作为一个软件程序猿,在我眼里,Arduino是学习“可怕硬件”的一个便捷通道。它把复杂的硬件名称,属性给我们隐藏起来,只需要一些简单的软件知识,就可以学习硬件开发。 1.2 怎么选择Arduino开发板 1.2.1 官方版本还是兼容版本 Arduino是开源项目,硬件结构,软件设计都开源。 所以不存在盗版的问题。 官方版质量肯定是杠杠的,但价格也贵。 两者价格数字差不多,一个卖人民币,一个卖美元。 不差钱就
1.问题是如何发生的,会在什么情况下发生此类问题? 当用户运用手机清理助手或后台回收我们的应用造成我们应用程序进程被杀死的时候就有可能出现这种空指针的问题,下面举个例子我们一起来看看这种情况是如何发生的。 如图所示我们新建一个程序Demo,程序中有三个Activity,分别为SplashActivity MainActivity InfoActivity,下面我们简称这三个Activity为A B C.这三个Activity也是模拟我们平时项目的进入流程,SplashActivity也就是我们的欢迎页面,
开始我们的Activity 不同于使用 main() 方法启动应用的其他编程范例,Android 系统会通过调用对应于其生命周期中特定阶段的特定回调方法在 Activity 实例中启动代码。 有一系列可启动Activity的回调方法,以及一系列可分解Activity的回调方法。 每个activity的入口时ActivityThread的main函数 本文概述了最重要的生命周期方法,并向大家展示如何处理创建Activity新实例的第一个生命周期回调。 文章中间会穿插一些项目中使用这些生命周期回调的用法 了解
注:我师父给了我很大的帮助,各位大神的帖子我也有很多参考。 属性动画是为了弥补之前两种动画模式的不足之处产生的(Android3.0之后才有的),特点是 真实对view的属性进行改动,并且能支持自定义属性动画, 基本上能实现所有能想到的动画。 属性动画是通过不断对view的属性调用set和get方法,然后重绘在界面上来达到“动画”的效果。 大纲:
1. PropertyAnimation简单使用
2. ValueAnimator高级用法
3. ObjectA
RecyclerView的使用(Android开发必备,替换掉ListView)
当有人看了你写的代码,说你现在还在使用ListView?是不是感觉快跟不上时代了啊!不错,今天就带给大家一个ListView的最新升级控件RecyclerView,Android 5.0推出的新控件,不过它在support-v7包,可以往下兼容,当你学会了RecyclerView之后,发现了它的强大,你就会替换到ListView和GridView了。
RecyclerView简介
分析 : 根据敌机类型区分 敌机 运动逻辑 以及绘制 /** * 敌机 * * @author liuml * @time
下午4:14:59 */ public class Enemy { // 敌机的种类标识 // 苍蝇 public static final int TYPE_FLY = 1 ; // 鸭子(从左往右运动) public static final int TYPE_DUCKL = 2 ; // 鸭子(从右往左运动) public
一、Android SDK简介 环信SDK为用户开发IM相关的应用提供的一套完善的开发框架。 包括以下几个部分: SDK_Core为核心的消息同步协议实现,完成与服务器之间的信息交换。 SDK是基于核心协议实现的完整的IM功能,实现了不同类型消息的收发、会话管理、群组、好友、聊天室等功能。 EaseUI是一组IM相关的UI控件,旨在帮助开发者快速集成环信SDK。 SDK采用模块化设计,每一模块的功能相对独立和完善,用户可以根据自己的需求选择使用下面的模块: EMClient: SDK的入口,主要完成登录、
Copyright (C)
ITfish.net程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
Unity3D研究院transform.parent = parent坐标就乱了
Unity3D研究院transform.parent = parent坐标就乱了
围观21080次
编辑日期: 字体:
昨天有朋友问我了一个问题,它将Hierarchy视图里的某个子节点下的GameObject拷贝到另外一个对象的子节点下面,他使用的方法就是 transform.parent = parent 但是拷贝过去以后坐标就全乱了。如下图所示我们搭建一个测试环境,我的目标是把a2拷贝在b2下面。
如下图所示,a0 a1 和 b0 b1作为父节点, 为了验证测试的可行性,我把它们的坐标 旋转 缩放 完全搞乱。
一 . 不改变拷贝坐标的情况下
1.直接copy 这个是最简单的
private void MoveGameObject(GameObject copy,Transform parent) {
copy.transform.parent = parent; }
2.先实例化一份新的,然后在copy ,重点说说这个,因为他出问题的也是在这里。
12345678910
private void CopyGameObject(GameObject copy,Transform parent) {
GameObject go = Instantiate(copy) as GameObject;
go.transform.parent = parent;
go.transform.position = copy.transform.position;
go.transform.rotation = copy.transform.rotation;
Vector3 pLoss = copy.transform.lossyScale;
Vector3 panelLoss = parent.lossyScale;
go.transform.localScale = new Vector3((pLoss.x/panelLoss.x),(pLoss.y/panelLoss.y),(pLoss.z/panelLoss.z)); }
1. GameObject go = Instantiate(copy) as GameO
实例化一份新的GameObject 在根目录下,此时 坐标、旋转、缩放系数取的是copy的相对坐标。那么这一步就坐标就已经乱了。。
2.go.transform.parent =
仅仅是move的操作,换算到相对parent的坐标 旋转 缩放 。
3.go.transform.position = copy.transform.
go.transform.rotation = copy.transform.
Unity的Transform组件中看到的位置、旋转、缩放,都是相对父节点的,它并不是相对世界的。所以此时需要把 &#8220;被拷贝者&#8221; 的世界坐标系数拷贝给 &#8220;拷贝者&#8221;
4. Vector3 pLoss = copy.transform.lossyS
Vector3 panelLoss = parent.lossyS
go.transform.localScale = new Vector3((pLoss.x/panelLoss.x),(pLoss.y/panelLoss.y),
因为Unity不能直接设置世界缩放系数,只能设置相对缩放系数。所以这里我利用lossyScale来换算了一下相对坐标,lossyScale是一个只读的属性,就是只读某个对象的世界缩放系数。
二 . 改变拷贝坐标的情况下
这种情况一般都是从Resources.Load后实例化的。实例化完毕后把Prefab里面预先设置的拷贝给Instiate()后的对象。
private void LoadPrefab(string name,Transform parent) {
GameObject prefab = Resources.Load&GameObject&(name);
GameObject go = Instantiate(prefab) as GameObject;
go.transform.parent = parent;
go.transform.localPosition = prefab.transform.position;
go.transform.localRotation = prefab.transform.rotation;
go.transform.localScale = prefab.transform.localScale; }
其实大多数情况下 都用 localPostion:000 localRotation:000 localScale:111。
private void LoadPrefab(string name,Transform parent) {
GameObject prefab = Resources.Load&GameObject&(name);
GameObject go = Instantiate(prefab) as GameObject;
go.transform.parent = parent;
go.transform.localPosition = Vector3.zero;
go.transform.localRotation = Quaternion.Euler(Vector3.zero);
go.transform.localScale = Vector3.one }
相对坐标、旋转 localPosition localRotation (可以在Transform组件中看到)
世界坐标、旋转 position rotation(不能在编辑器中看到, 可以通过代码输出出来)
只有localScale比较特殊,它的世界缩放系数lossyScale是只读的,但是不能写。
复制过去的两个完全重合。。
本文固定链接:
转载请注明:
雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!为什么有这个需要,原因是如果一个父物体下有很多子物体,此时如果要做摄像机的旋转,那么摄像机肯定要定位一个目标点,,要求这个目标点至少要在众多物体的中心,这样旋转的体验会非常好,如何做呢,看下面的一个小demo
程序运行一下:
public class delete : MonoBehaviour {
public Transform parent
public GameObject tt
// Use this for initialization
void Start () {
tt.transform.position = GetCenter(parent)
// Update is called once per frame
void Update () {
//计算模型的中心点
public static Vector3 GetCenter(Transform tt)
Transform parent = tt
Vector3 postion = parent.position
Quaternion rotation = parent.rotation
Vector3 scale = parent.localScale
parent.position = Vector3.zero
parent.rotation = Quaternion.Euler(Vector3.zero)
parent.localScale = Vector3.one
Vector3 center = Vector3.zero
Renderer[] renders = parent.GetComponentsInChildren&Renderer&()
foreach (Renderer child in renders)
center += child.bounds.center
center /= parent.GetComponentsInChildren&Renderer&().Length
Bounds bounds = new Bounds(center, Vector3.zero)
foreach (Renderer child in renders)
bounds.Encapsulate(child.bounds)
parent.position = postion
parent.rotation = rotation
parent.localScale = scale
foreach (Transform t in parent)
t.position = t.position - bounds.center
FR:徐海涛(Hunk Xu)
(QQ技术交流群:)
本文已收录于以下专栏:
相关文章推荐
using UnityE
using System.C
public class NewBehaviourScript :MonoBehaviour
给定一个点集,求出能覆盖点集内所有点的半径最小的圆。包含点在圆上的情况。个人感觉算是比较麻烦的计算几何模板了。
在网上看了很多解题,大多数都摘抄自《求一个包含点集所有点的最小圆的算法》这篇论文。
第一天学习unity,一开始以为unity听起来觉得高大上,应该会是很难的。
但是一接触,可能是刚开始的原因觉得并不是很难,学习unity用的是C#语言,一开始大部分都是图形界面,用到的代码很少。
...
对Unity UGUI 坐标和中心点的研究。
美术在做场景的时候可能会出现这个情况? 如下图所示,这个地块的中心点远离模型十万八千里?与其相信美术或者策划我觉得程序要更相信自己!!
[MenuItem (&MyMenu/Do ...
下面通过一个简单的案例来说明js相对路径和fs相对路径的区别我鼠标停在js02.js脚本,然后鼠标右键,选择Run,控制台输出如下:从输出结果来看,js01.js文件中的fs模块已经成功的读取了mm....
.cn/u/FR:海涛高软(QQ群:)
他的最新文章
讲师:王哲涵
讲师:韦玮
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 unity 获得子物体 的文章

 

随机推荐