※ これは 2018/01/08 Unity 2017.3.0f3 時点の情報です
最新版では動作が異なる可能性がありますのでご注意ください
ラッキービーストのモデルの準備ができたので、今回はこのモデルをカメラの向きを向くようにしてみたいと思います
まずは Blender の エクスポートメニューから fbx ファイルとして出力後、Unity の新規プロジェクトにインポートします
fbx のインポート設定は上記のように UV マップ生成と自動スムージングだけ変更しました
さらにマテリアルを新規に作成し、テクスチャを作成したマテリアルの Albedo マップに指定します
そしてインポートした fbx のモデルを Hierarchy 上にドラッグドロップして配置します
先ほど作成したマテリアルもつかんでモデルにドロップすることで適用、カメラの位置などなど調整してとりあえず舞台は整いました
さて、ラッキービーストをカメラに向けるため、C# スクリプトを追加します
Hierarchy 上の beast を選択後、Inspector の Add Component ボタンからスクリプト追加で Beast.cs を追加します
Beast.cs はこんな感じ
using UnityEngine; public class Beast : MonoBehaviour { /// <summary> /// 顔の部分のボーン /// </summary> [SerializeField] private Transform coreBone = null; /// <summary> /// キャッシュ用カメラ Transform /// </summary> private Transform camra; /// <summary> /// 初期処理 /// </summary> public void Start() { this.camra = Camera.main.transform; } /// <summary> /// 固定毎フレームの処理 /// </summary> public void FixedUpdate() { var cameraPosition = this.camra.position; // 目の高さに合わせる cameraPosition.y -= 0.3f; // 顔だけカメラに向かせる(X軸の回転) this.transform.LookAt(cameraPosition); var angle = this.transform.rotation.eulerAngles.x; angle = angle > 180f ? angle - 360f : angle; this.coreBone.localRotation = Quaternion.Euler(90f + Mathf.Clamp(angle, -30f, 30f), 0f, 0f); // 身体全体をカメラに向ける(Y軸の回転) cameraPosition.y = this.transform.position.y; this.transform.LookAt(cameraPosition); } }
基本 Transform.LookAt() メソッドで対象に向けて回転できるのですが、X 軸の高低差に応じた回転だけは特別にモデルのボーンだけ回転させて向きを変えています
また、ラッキービーストが見た目上不自然なほど傾かないように、Mathf.Clamp() メソッドでボーンの回転角度は上下30度以内に制限しています
最後に Beast.cs の coreBone に UnityEditor 上でボーンをドラッグドロップで設定
これで動かしてみます
それっぽく動きました!