ここではオブジェクトの回転についてテストを行います。
こちらのクラスと次のCubeControllerクラスの両方を扱って一連の動作を行うように設計されています。
まずはこちらのクラスを作成してください。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// オブジェクトの回転テスト用クラス
/// </summary>
public class RotateTest : MonoBehaviour
{
[Header("回転させる軸と回転させる回数")]
public int x;
public int y;
public int z;
/// <summary>
/// Cubeを回転させる処理
/// </summary>
/// <param name="argumentEulerAngle">回転させる角度</param>
/// <param name="argumentAxis">回転させる軸</param>
/// <param name="isReverseFlag">正回転か逆回転かどうかのフラグ 基本はfalseで正回転</param>
public void RotateCube(float argumentEulerAngle, int argumentAxis, bool isReverseFlag = false) {
// 回転させたい軸の情報をrotationPosに代入
Quaternion rotationPos = transform.rotation;
Debug.Log(transform.rotation);
// 逆回転させるフラグがON(true)なら、回転させる向きを逆にする
if (isReverseFlag) {
argumentEulerAngle = -argumentEulerAngle;
Debug.Log("Reverse");
}
// 回転させる軸を決める分岐 いずれかのcaseに入る
// 軸ごとに回転した回数がカウントされる
switch (argumentAxis) {
case 0: // x軸
x++;
rotationPos.x = argumentEulerAngle * x;
break;
case 1: // y軸
y++;
rotationPos.y = argumentEulerAngle * y;
break;
case 2: // z軸
z++;
rotationPos.z = argumentEulerAngle * z;
break;
}
// 上記の分岐で決定した角度で回転させる
// 分岐以外の2つの軸は元々の数値がそのまま再度入る
transform.rotation = Quaternion.Euler(rotationPos.x, rotationPos.y, rotationPos.z);
Debug.Log(transform.rotation);
}
/// <summary>
/// Cubeの回転を初期状態に戻す処理
/// </summary>
public void ResetRotate() {
// identityはゲーム開始時(生成時)の回転軸の情報の状態
transform.rotation = Quaternion.identity;
//transform.rotation = Quaternion.Euler(0,0,0);
}
/// <summary>
/// Cubeの各回転軸の回転回数を0に戻す処理
/// </summary>
/// <param name="argumentCount"></param>
public void ResetAxisCount(int argumentCount) {
x = argumentCount;
y = argumentCount;
z = argumentCount;
}
}
こちらのクラスをCubeオブジェクトにアタッチします。
このクラスには他のクラスのような、キー入力のメソッドはありません。
キー入力を別のクラス(CubeController)で管理し、こちらでは回転させる処理のみを行うようにしているためです。