脳汁portal

アメリカ在住(だった)新米エンジニアがその日学んだIT知識を書き綴るブログ

UnityでObjectのPivotを変更する

Unityでオブジェクトの中心というか重心というかPivotを変更する方法です
これをするとなにがいいかというと、オブジェクトをRotationするときに通常だとオブジェクトの中心を起点にしてしか回転することができませんが、回転の起点を任意に変更することができます

そもそもUnityのデフォルトの機能でできるのかどうか

Changing the pivot point of meshes. - Unity Answers
Move gameobject pivot - Unity Answers
Moving pivot points? - General Discussion - ProCore Forum

色々ぐぐっていると、「出来るよ!」って情報もあれば「それはUnityでは出来ないよ」って情報もあります
なんか見た感じだと、

  • Unity以外のObject作成ツールでPivotを指定して作成し、それをimportした場合は変更できるらしい
  • UnityのEditorから作成したオブジェクトは変更できないらしい
  • 軸をベースに回転することはできるらしい
  • 2Dオブジェクトだとできる?

結局自分の意図した設定はできませんでしたが、最終的に以下の動画を見つけて解決しました
www.youtube.com

Pivot変更の手順

「簡単に説明すると、ObjectのPivotを直接変更することはできないので、Empty GameObjectを作成してそれを仮のPivotとして機能させよう」
という流れです

1. Pivotを変更させたいObjectの用意

今回はCylinderを使います
見やすいようにRotationとScaleを少し変えています
f:id:portaltan:20160415130554p:plain

2. 仮PivotになるGameObjectを作成する

GameObjectからEmpty GameObjectを選択し、Positionを回転の起点にしたい位置にします
f:id:portaltan:20160415130754p:plain

3. GameObjectにスクリプトをセットする(見やすいように)

GizmoというC# scriptを作成し、以下のように処理を記述します

using UnityEngine;
using System.Collections;

public class Gizmo : MonoBehaviour {

	public float gizmoSize = 0.3f;
	public Color gizmoColor = Color.yellow;

	void OnDrawGizmos()
	{
		Gizmos.color = gizmoColor;
		Gizmos.DrawWireSphere (transform.position, gizmoSize);
	}
}

f:id:portaltan:20160415131554p:plain

4. 回転させたいオブジェクトを仮Pivotの子オブジェクトにする

f:id:portaltan:20160415131801p:plain

5. 仮pivotを回転させる

これで仮pivotを回転させれば、仮Pivotを起点にCylinderが回転します


以下のように複数のオブジェクトを一つのPivotで同時に回転させることも可能です
f:id:portaltan:20160415133912p:plain