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

しっぽを追いかけて

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

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

Unity で 3D 猫を主観視点で動かしてみる

C# Android iOS Unity Windows 10

これまではメインカメラを固定して客観視点で 3D 猫を動かしていましたが、これを猫視点の主観視点に変更しようと思います

まずはカメラの初期状態を変更

f:id:matatabi_ux:20151227183153p:plain

猫を後ろから追いかける感じに

あとはスクリプト修正

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

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

    /// <summary>
    /// 制御対象のアニメーター
    /// </summary>
    public Animator PlayerAnimator;

    /// <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 position = this.PlayerController.transform.position - this.PlayerController.transform.forward * 0.6f;
        this.MainCamera.transform.position = new Vector3(position.x, 0.3f, position.z);
        this.MainCamera.transform.rotation = this.PlayerController.transform.rotation;

        // 移動方向を決める
        var dx = CrossPlatformInputManager.GetAxis("Horizontal");
        var dz = CrossPlatformInputManager.GetAxis("Vertical");
        if (Mathf.Abs(dx) > 0.5f)
        {
            this.PlayerController.transform.Rotate(new Vector3(0, dx, 0), 1f);
        }

        // 移動速度を決める
        if (Mathf.Abs(dz) <= 0.1f)
        {
            this.PlayerAnimator.SetFloat("Speed", 0);
            return;
        }

        // 後退は速度固定
        if (dz < 0)
        {
            dz = -0.5f;
        }

        var speed = new Vector3(dx, 0, dz).magnitude;
        this.PlayerController.SimpleMove(this.PlayerController.transform.forward * dz * 0.5f);

        if (this.PlayerAnimator == null)
        {
            return;
        }

        this.PlayerAnimator.SetFloat("Speed", Mathf.Abs(dz * 2f));
    }
}

カメラの向きや位置を猫に合わせるよう修正し、ジョイスティックでの操作も左右で回転、上下で前進後退になるように変更しました

これで動かすと・・・

f:id:matatabi_ux:20151227184012g:plain

球を転がし続けやすくなりました