Unity:GUIのスライダーでオブジェクトの位置や回転を制御する

今回は、GUIのスライダーやボタンでオブジェクトの位置や回転を制御する方法を試してみました。

シーンの作成

オブジェクトの配置

シーンにフリーアセットのキャラクター、Space Robot Kyle を画面中央に配置。画面左右と下側にスライダーを配置しました。リセットボタンを画面上部に配置しました。

オブジェクトの階層設定

オブジェクトの回転制御をするために、Empty オブジェクトで親子階層を作成。X、Y、Z軸回転を別々に制御する構造にしました。

スクリプトの作成

GUIスライダーでオブジェクトを制御するためのスクリプトを作成します。
回転制御のオブジェクト、スライダーオブジェクト、リセットボタンを格納する変数をすべて public 変数にして[Inspector]ウィンドウから割り当てる方法にしました。
コードは次の通りです。

Y軸とZ軸の回転制御オブジェクトは子オブジェクトなので、回転値の受渡しに localEulerAngles を使用しました。下記のとおり、公式スクリプトリファレンスを参考にしました。
Transform.localEulerAngles – Unity スクリプトリファレンス

親の Transform オブジェクトから見た相対的なオイラー角としての回転値
x、y、z の値により、Z軸で z 度、X軸で x 度、Y軸で y 度 回転します。またこの順番で回転します。
Unity は自動的に Transform.localRotation に格納されている回転から角度を変換します。

座標値の制御についてはこちらの記事で紹介した、Vector3 のローカル変数を使用して特定の座標値だけ更新する書き方を使いました。

スクリプトの設定

作成したスクリプト SliderControl はCanvasにアタッチ。
[Inspector]ウィンドウで表示されている変数フィールドにそれぞれGUIスライダー、リセットボタンをドラッグ&ドロップで割り当てました。

WebGLでビルドしたシーン

今回作成したシーンをWebGLでビルドしました。