目的
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」と表示された。


コメント