Unity2017+C#でやってます。PhotonNetworkを使えばUnityでネトゲ開発も余裕です!
#Photonで値同期
まず、PhotonはAssetStoreからImportされた状態+PhotonServerに自動でログインと部屋にINする設定が前提としてある。まずここがわからないなら最初に補足から見てください。
以下がソース↓
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class SystemControl:MonoBehaviour{
private PhotonView _PhotonViewControl;
//PhotonのRPCを使うときのコントローラ。こいつを使って相手に値を送る。
private int[] sendData ={123,666666,2121212 };//送るデータ
private int[] ReciveData = {0,0,0};//受信データ
private void Awake(){ //初期化
_PhotonViewControl = GetComponent<PhotonView>();
//Inspectorに突っ込んでおいたComponentからPhotonViewを引っ張りだす
}
public void Send_ToOthers(){//送信メソッド
_PhotonViewControl.RPC("SendFunc",PhotonTargets.Others,sendData);
//RPC([使うメソッドの名前],[メソッドを発動させる対象],[メソッドの引数に突っ込む値])
}
[PunRPC]//RPCで呼び出したいメソッドは、メソッドの前にこいつを必ず書いとく
private void SendFunc(int[] SendedData){//相手が送ってきたときに自動的に発動
ReciveData = SendedData;
//相手から来たデータを自分の受け皿に上書き保存
}
}//end this class
#実験
SystemControlとPhotoviewがちゃんとComponetに追加されていることを確認。↓
適当に送信メソッドのボタン作ってとGUI.Labelで反応を試そう↓
ボタン押した後↓
これだけでも、ちゃんと送信されてます。おわり。
今回は配列を送信したけど、Stringでもintでも当然boolでも大丈夫みたい。ListとQueueは非対応なので、ToArrayして送る必要があります。
#どうやって動いてる?
PhotonRPCは、「Targetで指定した人に指定したRPCメソッドを発動させる」というのが前提としてあります。そして、引数も指定できます。今回はTargetをOthersとして、自分以外の部屋にいる全員が引数付きでメソッドを発動します。
そうやって、引数で届いた相手のデータを自分の持ってる受け皿にコピーして保存しておけば、受信ができるという形になります。
あと、Objectの位置共有でこの手法を用いることは推奨されていません。
当然ですが、それ用のPhotonコンポーネントなどもあるので、そちらをご利用ください。
#使いどころさん
自分はカードゲームとか、ボードゲームとかターン制のゲームにでも使ってました。
OnSerializeなんちゃらの手法はいっぺんに全部共有だし、ずれるわろくなことがない。
こいつは、共有したいやつだけをRPCメソッドに梱包しちゃえばいいので、何個も作れて使い分けもできるので、使い勝手がいいです。
#補足
ネトゲ作りたいんだけどPhotonとかServerにログインってまずなに・・・?ってところだけど、
Unityでネトゲを作るにはUNetとPhotonNetworkServiceというのがあります。PhotonNetworkは安いしリファレンスが分かりやすいし、利用者も多いので詰まりにくいのがいい点。100人同時接続ロビーも、月額300円で運営できますよ。
詳しい実装方法、利用はこちらから
https://photonengine.jp/
Photon公式サイト
利用についてはこちらの記事が非常にわかりやすいです。↓
http://www.urablog.xyz/entry/2016/09/13/080115
僕もPhotonを使いたい author-うら干物書き
以上。
Comments
Let's comment your feelings that are more than good