Quaternion.identityでも回転なしの値を得られますが、defaultを使って0に初期化することもできます。
シーンには親子にした2つのCubeをおいて、親にスクリプトを付けました。
左ドラッグでCubeを回転して、右クリックで回転にdefaultを代入して0に初期化しています。
using UnityEngine;
using UnityStandardAssets.CrossPlatformInput;
public class CubeController : MonoBehaviour
{
[SerializeField] float turnSpeed = 5f;
Transform childCube;
// Start is called before the first frame update
void Start()
{
// 黄色いCubeのトランスフォーム
childCube = transform.GetChild(0);
Debug.Log("Quaternion.identity = " + Quaternion.identity);
Quaternion rot = default;
Debug.Log("default = " + rot);
}
// Update is called once per frame
void Update()
{
// 左クリック中は回転させる
if (Input.GetMouseButton(0))
{
var x = CrossPlatformInputManager.GetAxis("Mouse X");
var y = CrossPlatformInputManager.GetAxis("Mouse Y");
// シフトキーを押している時は子を回転
if (Input.GetKey(KeyCode.LeftShift))
{
childCube.localRotation *= Quaternion.Euler(childCube.InverseTransformDirection(Camera.main.transform.up) * x * -turnSpeed);
childCube.localRotation *= Quaternion.Euler(childCube.InverseTransformDirection(Camera.main.transform.right) * y * turnSpeed);
}
// 押していないときは親を回転
else
{
transform.localRotation *= Quaternion.Euler(transform.InverseTransformDirection(Camera.main.transform.up) * x * -turnSpeed);
transform.localRotation *= Quaternion.Euler(transform.InverseTransformDirection(Camera.main.transform.right) * y * turnSpeed);
}
}
// 右クリックでリセット
else if(Input.GetMouseButtonDown(1))
{
// シフトキーを押しているときは子
if (Input.GetKey(KeyCode.LeftShift))
{
// コントロールキーを押しているときはワールド
if(Input.GetKey(KeyCode.LeftControl))
{
//childCube.rotation = Quaternion.identity;
Quaternion rot = default;
rot.w = 1f;
childCube.rotation = rot;
}
// 押していないときはローカル
else
{
// childCube.localRotation = Quaternion.identity;
childCube.localRotation = default;
}
}
// シフトキーを押していないときは親
else
{
// transform.localRotation = Quaternion.identity;
transform.localRotation = default;
}
}
}
}
しかし、defaultを入れるだけだと、子のワールド回転に代入しても、親の軸に揃ってしまいます。Quaternion.identityのときはワールドの軸に揃いました。
これは、Quaternion.identiryと回転のdefaultでは、4つ目の値が異なるからだと思います。
上のスクリプトでは、回転のdefaultのwに1を入れると、ワールドの軸に揃うようになりました。
Quaternion rot = default;
rot.w = 1f;
childCube.rotation = rot;