【Unity】ローカル座標を保って親子関係をつくる

投稿者: | 2023-04-03

CapsuleとCubeを作りました。Capsuleにはアニメーションが付いており、Cubeはワールド原点の真上にあります。

スクリプトを使ってCubeをCapsuleの子にします。

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

public class TestScriipt2 : MonoBehaviour
{
    [SerializeField] Transform parent;
    [SerializeField] Transform child;

    public void SetParent(bool worldPositionStays)
    {
        child.SetParent(parent, worldPositionStays);
    }

    public void SetParent()
    {
        child.parent = parent;
    }
}

子のTransform.parentに親のトランスフォームを代入すると、子のCubeは、Capsuleと一緒にその場で回り始めます。

親子関係を作るときに、子のワールド座標が保たれています。なので、親子関係をつくったあとにCubeのトランスフォームを見ると、ローカル座標が変更されています。

これはSetParentメソッドの第二引数をtrueにしたときと同じです。SetParentメソッドの第二引数はデフォルトでtrueになっています。

第二引数をfalseにすると、CubeはCapsuleの真上に来ます。このとき、Cubeのローカル座標は元の座標と同じになっていて、その代わりに、ワールド空間での位置は変わっていることがわかります。

Cubeを初めから別のゲームポブジェクトの子にすると、第二引数がfalseのときは、前の親との位置関係を保ったまま親を変更できます。

true
false

コメントを残す

メールアドレスが公開されることはありません。