[Unity] その回転、なかったことに。



親の回転をなかったことにしたい

シーンを組み立てていたら、なんかのオブジェクトにスプライトを追加したら親に回転が入ってスプライトまわりまくっていた。
ということがあったりなかったりしてしまったときは、こんな感じで親の回転を打ち消すことができますよ。
役に立つかどうかは、おいておいて。





ローカルで反映する場合

transform.localRotation = Quaternion.Inverse(transform.parent.rotation);

グローバルで反映する場合

transform.rotation = Quaternion.identity;

使用前



使用後

※回転させてないのは右の1つだけ

回転は・・・

クォータニオンのInverseでなかったことにできるよ。

簡単なサンプルコードですよ
using UnityEngine;
namespace Chigusa
{
/// <summary>
/// 回転を打ち消す
/// (スプライトなどで常に正面を向かせるなど)
/// </summary>
[ExecuteInEditMode]
[DisallowMultipleComponent]
public class RotationCancel : MonoBehaviour
{
[Tooltip("Edit中にも反映させる")]
public bool executeInEditMode = true;
/// <summary>
/// Update
/// </summary>
void Update()
{
#if UNITY_EDITOR
if (!executeInEditMode)
return;
#endif
// 打ち消す
if (transform.parent)
transform.localRotation = Quaternion.Inverse(transform.parent.rotation);
else
transform.localRotation = Quaternion.identity;
}
}
}

0 件のコメント :

コメントを投稿