【Unity入门】17.脚本访问父子结点

这篇具有很好参考价值的文章主要介绍了【Unity入门】17.脚本访问父子结点。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Unity入门】脚本访问父子结点

    大家好,我是Lampard~~

    欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢 

unity获取父节点,Unity原理,unity,游戏引擎,父子结点,transform,foreach

(一)父级节点

(1)访问父级节点

    父子关系我们并不陌生,在cocos中常用node:getParent()来获取父级,node:getChild()来获取子级结点,那在unity中是怎么调用的呢?

    在unity中比较奇怪,它的父子关系是记录在transform组件上的(这可能也是transform不可被删除的原因?),因此我们获得父节点可以通过下面的代码

Transform parentTransform = this.transform.parent;

    值得注意的是,通过Transform获得的父级,也是Transform类型的组件,如果我想要访问父级结点这个对象,是需要多加一步操作:

Transform parentTransform = this.transform.parent;
GameObject parent = parentTransform.gameObject;

(2)修改父级结点

    我们可以访问到父级结点,还可以通过tranform.SetParent修改物体的父子关系,比如当前的父子关系如下:

unity获取父节点,Unity原理,unity,游戏引擎,父子结点,transform,foreach

    我们创建一个船新的ParentLogic脚本挂载在BBB物体上

unity获取父节点,Unity原理,unity,游戏引擎,父子结点,transform,foreach

    首先在start中打印父类的名字,然后在update监听鼠标点击动作,点击时就把BBB结点的父类切换至CCC,代码如下:

    void Start()
    {
        Transform parentTransform = this.transform.parent;
        GameObject parent = parentTransform.gameObject;
        Debug.Log("父类的名称是:" + parent.name);
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            GameObject newParent = GameObject.Find("CCC");
            this.transform.SetParent(newParent.transform);
        }
    }

    可以看到,一开始父类的名字是AAA,执行点击后,父类就变成CCC了

unity获取父节点,Unity原理,unity,游戏引擎,父子结点,transform,foreach

(二)子节点

(1)遍历所有子节点foreach

    如果我们想遍历所有的子节点,我们可以通过foreach这个方法实现,它的语法如下:

foreach(Transform child in transform)
{
    // DO SOMETHING
}

    其中child是transform组件下面的所有子transform组件,因此我们可以通过这样的代码来访问所有子节点的名称

foreach(Transform child in transform)
{
    GameObject childObj = child.gameObject;
    Debug.Log("子物体名称为:" + childObj.name)
}

    比如现在AAA结点下面有BBB,CCC,DDD,子结点,其中DDD子节点有一个EEE孙子结点,看看打印效果怎么样

unity获取父节点,Unity原理,unity,游戏引擎,父子结点,transform,foreach

     代码如下:

    void Start()
    {
        GameObject AAA = GameObject.Find("AAA");
        foreach (Transform child in AAA.transform)
        {
            GameObject childObj = child.gameObject;
            Debug.Log("子物体名称为:" + childObj.name);
        }
    }

     可以看到,打印的结果把三个子节点都打出来了,但是孙子结点EEE并没有,所以如果我们想获得子节点中的某一个,我们可以在foreach的时候加一个If name == XXX 的判断

unity获取父节点,Unity原理,unity,游戏引擎,父子结点,transform,foreach

(2)直接精准查找某一个子节点

    之前我们不建议使用GameObject.Find来寻找物体,一方面容易重名,另一方面比较耗,那如果我们想精准找到结点下的某个子节点,就只能foreach去寻找了吗?

    unity的transform组件给我们提供了一个Find方法,和GameObject的FInd一样,需要传入物体的名字或者路径,好处就是,它是精准在它的子节点之间寻找,这样无论从损耗和精准性都强很多

    void Start()
    {
        GameObject AAA = GameObject.Find("AAA");
        Transform BBB =  AAA.transform.Find("BBB");
        Debug.Log(BBB.gameObject.name);
    }

好啦今天就到这里,谢谢各位感谢阅读!!!
点赞,关注!!!

unity获取父节点,Unity原理,unity,游戏引擎,父子结点,transform,foreach文章来源地址https://www.toymoban.com/news/detail-562895.html

到了这里,关于【Unity入门】17.脚本访问父子结点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Unity入门】16.脚本引用组件

          大家好,我是Lampard~~     欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢  (1)点击控制音频播放     还记得我们的车载音乐AudioSource吗?之前我们给小车加了这个组件使之在游戏运行的时候可以播放BGM     但是如果我们 不想一开始就播放,想在某个时

    2023年04月22日
    浏览(12)
  • 【Unity入门】11.脚本控制物体旋转

        大家好,我是Lampard~~     欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢 (1)创建RotateLogic脚本     上一篇文章我们学习了如何在脚本中获取物体对象,并使用transform组件下的translate接口使物体运动     今天我们进一步学习,用脚本控制物体的旋转。首先

    2024年02月04日
    浏览(17)
  • Unity通过访问java后台获取数据库数据

    unity项目中,需要保存,加载大量的数据信息,对于unity直接编写访问数据库的代码毕竟麻烦。而java中的ruoyi框架可以直接根据数据库表生成对应的java后台,unity调用java后台的接口即可完成数据保存和加载。代码如下: 代码很简单,但是其中涉及到的内容需要和Java后台开发人

    2024年02月12日
    浏览(13)
  • 【UGUI】如何在脚本中获取Unity中的Input Field-TextMeshPro

            首先,确保你的项目中已经安装了TextMeshPro。如果没有安装,请打开Unity编辑器,转到\\\"Window\\\"(窗口)菜单 - \\\"Package Manager\\\"(包管理器),然后搜索并安装TextMeshPro。当然,创建TMPUI元素时系统也会提示进行安装。         在场景中创建一个UI元素(InputField(TMP))

    2024年02月13日
    浏览(11)
  • 【Unity】 基础交互入门(C#脚本互相调用的方法,含动态绑定脚本)

    脚本A: 在需要被调用的类里这样写: 脚本B: 在其他类里调用: 如果出现无法识别上下文的提示,检查一下以下问题: 1、两个脚本的命名空间是否一致,如果不需要的命名空间可以直接删除。 2、类名是否大写开头,且命名合法,且和文件名一致。 3、更新编译一下保存一

    2024年02月15日
    浏览(14)
  • Unity快速入门教程-创建并启用c#脚本

    提示:本篇文章主要提供新手入门学习,初次发文,多多指教 unity通过c#脚本构建项目逻辑关系,本篇介绍c#脚本创建,启用及其简单示例 提示:以下是本篇文章正文内容,下面案例可供参考 在Project窗口依次单击右键–Create–C#Script,创建脚本,假设命名为【Test】。

    2024年02月11日
    浏览(14)
  • Unity入门(三)——VS Code配置与C#脚本编写

    这回我们将使用VS Code编写我们的第一个程序并在Unity运行。 书接前文,在项目中点开“Exit-Preferences-External Tools”,确保外部脚本编辑器选择的是VS Code 然后回到项目,在下方的“Project”中右键空白处,创建一个C#脚本文件 此时可以在右侧看到该脚本的内容,此时需要检查类

    2024年02月07日
    浏览(11)
  • Unity 组件 Constraint系列(不用设置父子关系模拟设置父子关系的操作)

    目录 目录 组件设置分析 Aim Constraints  Parent Constraints 小结 概要 Constraint组件可以约束物体,链接本物体与目标物体的Transform,跟随目标物体的位置、旋转、缩放,实现父子物体一样的效果,却不用设置父子关系。而且一个物体可以同时关联多个目标物体,设置不同的权重 A

    2024年02月03日
    浏览(16)
  • 【Unity】Transform—用代码设置父子关系

    子对象在世界坐标系下的位置是加法运算:子对象在世界坐标系下的位置 = 子对象的位置 + 父对象的位置 子对象在世界坐标系下的缩放是乘法运算:子对象在世界坐标系下的位置 = 子对象的位置 + 父对象的位置 现有: Lesson9脚本中的代码: 运行: 现有: Lesson9脚本的代码:

    2024年02月12日
    浏览(17)
  • unity学习(32)——跳转到角色选择界面(父子类问题)

     新问题 应该是两个脚本之间缺少继承关系 its children 解决起来很简单,把ResceneScript也绑到canvas上就可以了 。 此时,在账号密码正确的情况下,是可以完成场景切换。  对应的代码如下: 切换完场景其实也就完成了完整的异步操作!

    2024年02月21日
    浏览(19)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包