当前位置: 首页 > news >正文

Unity3D 入门:如何在脚本中找到游戏对象的父子级 祖孙级对象和它们的组件

在真正能玩的游戏场景中,很多脚本的执行是在不确定的游戏对象上进项的,于是会考虑在父对象或者子对象上去写脚本。这时,可能需要查找游戏对象。那么如何在脚本中找到父子游戏对象(gameObject)呢?


本文内容

    • 场景
    • 找父组件/子组件
    • 找父对象/子对象

场景

如下图所示,Windows 游戏对象下面可能有很多不确定数量和位置的游戏对象,需要操作它们。

游戏场景

在为游戏对象创建脚本的时候,这个脚本中的类会继承自 MonoBehavior

using UnityEngine;

public class WindowUpdater : MonoBehaviour
{
    void Start()
    {
    }

    void Update()
    {
    }
}

找父组件/子组件

MonoBehavior 直接提供了查找父子组件的方法 GetComponent(s) / GetComponent(s)InParentGetComponent(s)InChildren,因此直接调用即可。对于泛型方法,每个子对象只会找到一个组件,所以通常适用于子组件非常简单的场景。

var renderers = GetComponentsInChildren<Renderer>();
for (var i = 0; i < renderers.Length; i++)
{
    var texture = textures[i];
    renderers[i].material.mainTexture = texture;
}

找父对象/子对象

MonoBehavior 并没有提供直接查找父子对象的方法。

但是 Transform 有!

所以,通过 Transform 可以间接获取到子对象。GetChild() GetChildCount

var transform = GetComponent<Transform>();
for (int i = 0; 0 < renderers.Length; i++)
{
    transform.GetChild(i).gameObject.SetActive(true);
}

我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

相关文章:

  • Unity3D 入门:如何制作天空效果?天空盒的使用
  • Unity3D 入门:使用 Visual Studio 开发 Unity C# 脚本,说说根目录的那些 sln 和 csproj 文件
  • Unity3D 入门:最简单的控制视角,以及控制角色前进、转向的脚本
  • 比较 Windows 上四种不同的文件(夹)链接方式(NTFS 的硬链接、目录联接、符号链接,和大家熟知的快捷方式)
  • 了解 Windows Linux 下命令行 Shell 启动程序传参的区别,这下不用再担心 Windows 下启动程序传参到 Linux 下挂掉了
  • 适合 .NET 开发者用的 GitHub Actions(时不时更新)
  • 在 CMD 里根据进程名杀掉进程
  • 在 PowerShell 里根据进程名杀掉进程
  • 在制作多框架项目的 NuGet 包时应该注意的问题(buildMultiTargeting TargetFrameworks)
  • 专业团队:推荐一个网站,生成巨幅文字注释
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • 通过设置启用 Visual Studio 默认关闭的大量强大的功能提升开发效率
  • 使用 SetWindowCompositionAttribute 来控制程序的窗口边框和背景(可以做 Acrylic 亚克力效果、模糊效果、主题色效果等)
  • input 不能为空 js_我用JS刷LeetCode | Day 9 | Implement strStr()
  • 宝塔同时安装苹果cms海洋cms_maccms安装了后接下来做什么?
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Angular6错误 Service: No provider for Renderer2
  • docker-consul
  • iOS | NSProxy
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • LeetCode29.两数相除 JavaScript
  • Webpack 4 学习01(基础配置)
  • 高程读书笔记 第六章 面向对象程序设计
  • 今年的LC3大会没了?
  • 我是如何设计 Upload 上传组件的
  • 由插件封装引出的一丢丢思考
  • 做一名精致的JavaScripter 01:JavaScript简介
  • Spring Batch JSON 支持
  • 回归生活:清理微信公众号
  • ![CDATA[ ]] 是什么东东
  • #宝哥教你#查看jquery绑定的事件函数
  • #图像处理
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (¥1011)-(一千零一拾一元整)输出
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)ORM
  • (转载)CentOS查看系统信息|CentOS查看命令
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .net 提取注释生成API文档 帮助文档
  • ?.的用法
  • [ C++ ] 继承
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器
  • [2]十道算法题【Java实现】
  • [20190113]四校联考
  • [2024最新教程]地表最强AGI:Claude 3注册账号/登录账号/访问方法,小白教程包教包会
  • [22]. 括号生成
  • [3D游戏开发实践] Cocos Cyberpunk 源码解读-高中低端机性能适配策略
  • [C#基础知识系列]专题十七:深入理解动态类型
  • [Docker]三.Docker 部署nginx,以及映射端口,挂载数据卷
  • [HTML]Web前端开发技术12(HTML5、CSS3、JavaScript )——喵喵画网页