目的
Unityでオンラインマルチプレイを実装するために、StrixCloudを使用しての開発を開始した。前回、最低限度のプレイヤー表示と複数インスタンスからの動作を行ったので、今回はそのプロジェクトをベースに簡易なゲーム機能を実装する。
ゲーム機能作成
ゲーム機能概要
プレイヤーを操作して先にクリア条件のオブジェクトに触れたら勝ち、というルールにする。
プロジェクト作成
- 前回のプロジェクトを開く
- テキスト表示用のCanvas Panel Text-TextMeshProを作成
- Cubeでクリア(勝利)条件となるオブジェクトClearを作成(以降、クリアと表記)
- Clearの色がわかりやすくなるようにマテリアルを設定
- PlayerとClearのCollider設定を行う
- PlayerControllerの変更
- ClearControllerの作成
- ClearにClearControllerをアタッチ
- インスペクタからでアタッチする項目のアタッチ
PlayerController
PlayerControllerにはClearオブジェクトを持たせる変数を追加して、Clearオブジェクトとの接触時に呼び出されるメソッドを作成する。またこの中でisLocalの判定を行っているのは、Clearと接触したPlayerが自分か、自分以外により画面表示を切り替えるため。
PlayerController.cs
using UnityEngine; using SoftGear.Strix.Unity.Runtime; public class PlayerController : StrixBehaviour { public GameObject clear; float speed = 3.0f; void Update() { if (!isLocal) return; if (Input.GetKey(KeyCode.W)) { transform.position += speed * transform.forward * Time.deltaTime; } if (Input.GetKey(KeyCode.S)) { transform.position -= speed * transform.forward * Time.deltaTime; } if (Input.GetKey(KeyCode.D)) { transform.position += speed * transform.right * Time.deltaTime; } if (Input.GetKey(KeyCode.A)) { transform.position -= speed * transform.right * Time.deltaTime; } } private void OnTriggerEnter(Collider other) { if (isLocal) { clear.GetComponent().GameFinish(true); } else { clear.GetComponent().GameFinish(false); } Destroy(other.gameObject); } }
ClearController
ClearControllerはゲーム開始時とPlayerとClearの接触時に表示テキストを変える処理を作成。GameFinish(bool winFlg)というメソッドがコライダー接触時に呼び出される。
using System.Collections; using System.Collections.Generic; using UnityEngine; using SoftGear.Strix.Unity.Runtime; using TMPro; public class ClearController : StrixBehaviour { [SerializeField] TextMeshProUGUI gameText; // Start is called before the first frame update void Start() { gameText.text = "In Game"; } public void GameFinish(bool winFlg) { if(winFlg) gameText.text = "Win"; else gameText.text = "Lose"; } }
動作チェック
目論見通り、clearと接触したplayerの画面には「Win」もう一方のplayerの画面には「Lose」と表示された。
コメント