Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

18
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Unityのネットワーク対戦で相手にデータを送信する最も単純で簡単な方法

Last updated at Posted at 2017-09-02

Unity2017+C#でやってます。PhotonNetworkを使えばUnityでネトゲ開発も余裕です!
#Photonで値同期
まず、PhotonはAssetStoreからImportされた状態+PhotonServerに自動でログインと部屋にINする設定が前提としてある。まずここがわからないなら最初に補足から見てください。

以下がソース↓

{SystemControl.cs}
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に追加されていることを確認。↓
SnapCrab_NoName_2017-9-2_23-56-21_No-00.png

適当に送信メソッドのボタン作ってとGUI.Labelで反応を試そう↓

SnapCrab_NoName_2017-9-2_23-55-33_No-00.png

ボタン押した後↓

SnapCrab_NoName_2017-9-2_23-55-58_No-00.png

これだけでも、ちゃんと送信されてます。おわり。 
今回は配列を送信したけど、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-うら干物書き

以上。

18
28
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Comments

No comments

Let's comment your feelings that are more than good

Qiita Advent Calendar is held!

Qiita Advent Calendar is an article posting event where you post articles by filling a calendar 🎅

Some calendars come with gifts and some gifts are drawn from all calendars 👀

Please tie the article to your calendar and let's enjoy Christmas together!

18
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Login to continue?

Login or Sign up with social account

Login or Sign up with your email address