本日はPhotonのチュートリアル記事です。
〇Photonとは?
PhotonはUnityでのマルチユーザーアプリの実現のためのSDKとその仕組みを指します。
オリジナルのチュートリアルは下記になります。
今回はプレイヤーのプレファブの構築を行います。
〇プレファブの基本
Unityにおいてプレファブとは複数のコンポーネントやオブジェクトをひとまとまりにしたオブジェクトのことを指します。
UIや敵キャラクターなどのシーンをまたいで使いまわすものや、複数生成する際に便利でUnityでは非常によく使われます。
このプレファブがPhotonを使用したネットワーク上でインスタンス化される際にはAssets内の[Resource]フォルダに格納しておく必要があります。
[Resource]フォルダはUnityに用意されている特殊なフォルダで、通常動的にプレファブを生成する場合パス名を指定する必要がありますが、[Resource]フォルダ内に配置したプレファブはResources.Loadでパスを指定できます。
例えばこの[Resource]フォルダ内に同名の複数のオブジェクトが存在した場合、開発者側が望んだ結果が得られない可能性があります。名前が重複しないようにする必要があります。
今回のチュートリアルではユーザーのプレファブとして[Robot Kyle.fbx]を使用します。 このモデルは[Assets\Photon\PhotonUnityNetworking\Demos\Shared Assets]に格納されています。
①Assets直下に[PunBasics_tutorial]フォルダを作成しその中に[Resources]フォルダを作成します。
②[PunBasics_tutorial]フォルダ内に[Scenes]フォルダを作成し新規のシーン[Kyle Test]を作成します。 このシーンはプレファブを作成するために使用し、この工程が完了したらシーンを削除します。
③[Kyle Test]シーンを開き[Robot Kyle]を配置します。
④[Robot Kyle]の名前を[My Robot Kyle]に変えます。そのまま[Resources]フォルダにドラッグ&ドロップします。
これによってプレファブが作成されました。
〇キャラクターのコントローラー
①シーン上の[My Robot Kyle]オブジェクトのinspectorウィンドウから[Charactor Controller]コンポーネントを加えます。
②[My Kyle Robot]オブジェクトをダブルクリックしシーンビュー上でMy Kyle Robotオブジェクトへズームします。
この状態では[Capsule Collider]がオブジェクトに対しずれています。
③[Charactor Controller]コンポーネントの[Center]のYの値を1に変更します。
これでずれが解消されます。
この状態を[Resource]プレファブに対応させます。
④[My Kyle Robot]オブジェクトのinspectorウィンドウ上部から[Overrides]→[Apply]を選択します。
これでプレファブにも変更が反映されます。
〇Animatorの設定
〇Animator Controllerの割り当て
Kyle Robotの移動に対してのアニメーションを作成します。このアニメーション自体はプロジェクト内に既に同梱されています。
①[Kyle Robot]の[Animator]コンポーネントから[Controller]に[Kyle Robot]を指定します。
②[My Kyle Robot]オブジェクトのinspectorウィンドウ上部から[Overrides]→[Apply]を選択します。
〇コントローラパラメーターと連携
[My Kyle Robot]オブジェクトにアニメーションが設定されていますが、ユーザーの入力との連携がまだとれていないため動きません。
スクリプトを記述します。
①[PlayerAnimatorManager]という名前のコンポーネントを作成します。
using UnityEngine; using System.Collections; namespace Com.MyCompany.MyGame { public class PlayerAnimatorManager : MonoBehaviour { #region MonoBehaviour Callbacks // Use this for initialization void Start() { } // Update is called once per frame void Update() { } #endregion } }
このスクリプトを[My Robot Kyle]に追加します。
〇速度制御
[PlayerAnimatorManager]
①スタート関数を以下のように書き換えます。
private Animator animator; // Use this for initializationいつもコードを書くべきです。手間ですが、長い目で見るとそのほうがずっといいです。 void Start() { animator = GetComponent<Animator>(); if (!animator) { Debug.LogError("PlayerAnimatorManager is Missing Animator Component", this); } }
animatorはこの場合[My Robot Kyle]オブジェクトのAnimatorに該当します。
②Update関数を次のように書き換えます。
void Update() { if (!animator) { return; } float h = Input.GetAxis("Horizontal"); float v = Input.GetAxis("Vertical"); if (v < 0) { v = 0; } animator.SetFloat("Speed", h * h + v * v); }
これはキーボードによるキー入力が与えられた場合animatorのスピードに値が渡るようになっています。
このチュートリアルの場合後退はしないので下キーの入力の場合返り値が0になるようにされています。
これでチュートリアル用のプレイヤーの作成が完了しました。
次回テストとネットワーク化での共有を行います。