StrixCloud入門 #3RPC

Unity

目的

Unityでオンラインマルチプレイを実装するために、StrixCloudを使用しての開発を開始した。前回、最低限度のゲーム機能の行ったので、今回はそのプロジェクトをベースにRPC機能を実装する。

RPCとは

リモートプロシージャコールというプレイヤー間で送信されるメッセージであり、ここでは、

  • 自分の画面に表示されている自分のキャラクター
  • 他プレイヤーの画面に表示されている自分のキャラクター

の間での通信を目的とする。

RPCを使用しない場合、自分の画面に表示されている自分のキャラクターに変化が置きた時に、他プレイヤーの画面に表示されている自分のキャラクターに変化が置きないというゲーム上の矛盾が発生する。

RPC機能作成

RPC機能概要

ゲーム終了時に勝利プレイヤーの操作キャラクターの色を変更する。
ゲーム開始時のプレイヤー色:青
ゲーム処理時のプレイヤー色:黄

プロジェクト作成

  1. 前回のプロジェクトを開く
  2. マテリアル[MaterialIngame]と[MaterialWin]を作成
  3. PlayerControllerにRPC関連処理の追加
  4. インスペクタからアタッチする項目のアタッチ

PlayerController

PlayerControllerの追加項目は、保持するマテリアル、スタート時の初期マテリアル設定、Clear接触時のRPC送信、勝利マテリアル設定処理のRPC登録。

PlayerController.cs

using UnityEngine;
using SoftGear.Strix.Unity.Runtime;

public class PlayerController : StrixBehaviour
{
    public GameObject clear;

    public Material materialIngame;
    public Material materialWin;

    float speed = 3.0f;

    void Start()
    {
        GetComponent().material = materialIngame;
    }

    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);
        }
        RpcToAll("GameWinEffect");
        Destroy(other.gameObject);
    }

    [StrixRpc]
    public void GameWinEffect()
    {
        GetComponent().material = materialWin;
    }
}

動作チェック

想定通り、RPCの呼び出しが成功し、勝利側プレイヤーの色が変わった。

 

コメント

タイトルとURLをコピーしました