当前位置:   article > 正文

【Unity】Transform—用代码设置父子关系_unity 获取父物体

unity 获取父物体

1.获取和设置父对象

子对象在世界坐标系下的位置是加法运算:子对象在世界坐标系下的位置 = 子对象的位置 + 父对象的位置
子对象在世界坐标系下的缩放是乘法运算:子对象在世界坐标系下的位置 = 子对象的位置 + 父对象的位置

现有:
在这里插入图片描述
Lesson9脚本中的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson9 : MonoBehaviour
{
    void Start()
    {
        //获取父对象
        //可以通过Transform 获取我自己的父对象是谁
        print(this.transform.parent.name);

        //设置父对象
        //1.断绝父子关系
        this.transform.parent = null;

        //2.找个新父亲(需要赋值一个对象的transform)
        this.transform.parent = GameObject.Find("Father2").transform;

        //3.通过API来进行父子关系的设置
        //参数1 父对象的Transform
        //参数2 是否保留本对象在世界坐标系下的位置、角度、缩放信息
        //      如果填true,则会保留世界坐标系下的状态和父对象进行计算 得出想对父对象的本地坐标系的信息
        //      如果填false,则不会进行计算,直接把在世界坐标系下的信息 赋值到在本地坐标系中
        this.transform.SetParent(GameObject.Find("Father2").transform, true);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

运行:
在这里插入图片描述

2.抛弃所有子对象

现有:
Lesson9脚本的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson9 : MonoBehaviour
{
    void Start()
    {
        //与自己的所有子对象 断绝关系
        this.transform.DetachChildren();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

运行:
在这里插入图片描述

3.获取子对象

现有:
在这里插入图片描述
Lesson9脚本的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson9 : MonoBehaviour
{
    void Start()
    {
        //1.按名字查找儿子
        //  返回一个儿子的transform信息
        //  只能找儿子,找不了孙子
        //  transform.Find能找到失活的儿子,而GameObject相关的查找 是找不到失活对象的
        print(this.transform.Find("Son2").name);

        //2.得到有多少个儿子(失活的儿子也算,孙子不算)
        print(this.transform.childCount);

        //3.通过索引,去得到自己对应的儿子
        //  返回值是transform,可以得到对应的儿子位置相关信息
        //  注意 索引越界会报错
        this.transform.GetChild(0);

        //4.遍历儿子
        for (int i = 0; i < this.transform.childCount; i++)
        {
            print(this.transform.GetChild(i).name);
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

运行:
在这里插入图片描述

4.儿子的操作

现有:
在这里插入图片描述
Lesson9脚本的代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson9 : MonoBehaviour
{
    //要进行以下操作的儿子
    public Transform son;

    void Start()
    {
        //1.判断传入的这个对象是不是自己父亲
        if (son.IsChildOf(this.transform))
        {
            print("传入的这个对象是我父亲");
        }

        //2.得到自己作为儿子的编号
        print(son.GetSiblingIndex()); //将会打印 0

        //3.把自己设置成第一个儿子
        son.SetAsFirstSibling();

        //4.把自己设置成最后一个儿子
        son.SetAsLastSibling();

        //5.把自己设置为指定个儿子
        //  索引越界也不会报错,而是直接把它设置到最后一个
        son.SetSiblingIndex(1);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/140669
推荐阅读
相关标签
  

闽ICP备14008679号