読者です 読者をやめる 読者になる 読者になる

しっぽを追いかけて

ぐるぐるしながら考えています

Unity と猫の話題が中心   掲載内容は個人の私見であり、所属組織の見解ではありません

Unity で 3D 猫を操作してみる

単に猫を表示するだけではおもしろくないので、スワイプ操作で動かしてみたいと思います

まずは対象プラットフォームをスマホにするため、Unity メニュー [File]-[Build Settings] を開いて iOS を選択したのち、「Switch Platform」ボタンで切り替え処理を走らせます

f:id:matatabi_ux:20151227073339p:plain

プラットフォームの切り替えが終わったら Project ビューの右クリックから [Import Package]-[CrossPlatformInput] を選び入力制御ライブラリを追加します

f:id:matatabi_ux:20151227073743p:plain

追加したら Hierarchy ビューに Event System と MobileSingleStickControl を追加します

f:id:matatabi_ux:20151227074449g:plain

MobileSingleStickControl の中の JumpButton はいらないので削除して、ついでに地面代わりの 3D Object メニューにある Plate オブジェクトを Hierarchy に追加し、名前を Ground にします

f:id:matatabi_ux:20151227074539p:plain

さらに Cat オブジェクトを選択して Add Component ボタンから [Physics]-[Character Controller] を追加します・・・これで Cat が重力や衝突の影響を受けたり、移動させやすくなったりします

f:id:matatabi_ux:20151227075010p:plain

猫モデルの小ささに合わせて Character Controller の数値は調整

ここまで来たら MobileSingleStickControl に Add Component ボタンから [New Script] で InputController というクラスを追加します

f:id:matatabi_ux:20151227075700p:plain

コードの中身は下記のとおり

using UnityEngine;
using UnityStandardAssets.CrossPlatformInput;
using System.Collections;

/// <summary>
/// 入力制御クラス
/// </summary>
public class InputController : MonoBehaviour
{
    /// <summary>
    /// 制御対象のキャラクターコントローラー
    /// </summary>
    public CharacterController PlayerController;

    /// <summary>
    /// メインカメラ
    /// </summary>
    public Camera MainCamera;

    /// <summary>
    /// Use this for initialization
    /// </summary>
    public void Start()
    {
        this.MainCamera = Camera.main;
    }

    /// <summary>
    /// Update is called once per frame
    /// </summary>
    public void Update()
    {
        if (this.PlayerController == null)
        {
            return;
        }

        // 移動方向を決める
        var dx = CrossPlatformInputManager.GetAxis("Horizontal");
        var dz = CrossPlatformInputManager.GetAxis("Vertical");
        if (Mathf.Abs(dx) + Mathf.Abs(dz) <= 0)
        {
            return;
        }
        this.PlayerController.transform.rotation = Quaternion.Euler(0, - Mathf.Atan2(dz, dx) * Mathf.Rad2Deg - this.MainCamera.transform.rotation.eulerAngles.y, 0);

        // 単純移動
        this.PlayerController.SimpleMove(this.PlayerController.transform.forward * new Vector3(dx, 0, dz).magnitude * 0.5f);
    }
}

CrossPlatformInputManager.GetAxis() メソッドで Horizontal や Vertical を指定して 各 XY 軸の入力方向を取得し、CharacterController を利用して向きと位置移動をさせてます

CrossPlatformInputManager は UnityStandardAssets.CrossPlatformInput の名前空間にあるので using の追加が必要です

Unity Editor に戻ると MobileSingleStickControl の InputController に CharacterController プロパティが増えているのでここに Cat オブジェクトをドラッグドロップします

f:id:matatabi_ux:20151227080403p:plain

最後に Add Component ボタンから [Layout]-[Canvas Scaler] を追加して複数解像度対応させたら試しに動かしてみます

f:id:matatabi_ux:20151227081016g:plain

ジョイスティックのドラッグ方向に応じて猫が動きました!