Unity(C#)初心者・入門者向けチュートリアル ひよこのたまご

AndroidやiOS向けアプリを簡単に作れるゲーム開発環境Unity(ユニティ)の使い方を、チュートリアル方式で一緒に学びましょう!

【Unity9】表示したGUI(Network Manager)を機能させる!【UNET20-2】

Unity5.1.1p3 Personal(2015年7月)

前回の続きです〜

新しいGUIの作成が完了したので、ボタンを押す等した時に処理が発生するようにしていきます〜



UNET Part 20 - UI & Custom Net Manager - YouTube

【目標】表示したGUIに処理を与える!

①OnClickの設定

それではボタンの設定をしていきます〜
まずはMenuシーンを開き、ButtonStartHostのInspectorビューを見て下さい〜

Buttonコンポーネントの一番下にOnClickという箇所があるので、プラスボタンを押し、NetworkManagerオブジェクトを指定し、イベントとしてNetworkManager_Custom > StartupHostを選択します〜

f:id:hiyotama:20150724115742p:plain

ButtonJoinGameも同じように設定します〜
イベントだけNetworkManager_Custom >  JoinGameに変更します〜

f:id:hiyotama:20150724115958p:plain


これでボタンを押した時にホストとクライアントとして接続できるようになりました〜

②Sceneロード時のボタン設定

続いてSceneをロードした時の設定を、前回作成したNetworkManager_Customスクリプトに追記していきます〜以下ソースです〜

using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
using System.Collections;

public class NetworkManager_Custom : NetworkManager {

	public void StartupHost()
	{
		SetPort();
		NetworkManager.singleton.StartHost();
	}

	public void JoinGame()
	{
		SetIPAddress();
		SetPort();
		NetworkManager.singleton.StartClient();
	}
	
	void SetIPAddress()
	{
		string ipAddress = GameObject.Find("InputFieldIPAddress").transform.FindChild("Text").GetComponent<Text>().text;
		NetworkManager.singleton.networkAddress = ipAddress;
	}
	
	void SetPort ()
	{
		NetworkManager.singleton.networkPort = 7777;
	}
	
//********** 開始 **********//
	//UnityデフォルトのAPI シーンをロードした時にlevelを引数に実行
	//各シーンのlevelはBuild Settingsにて設定
	void OnLevelWasLoaded (int level)
	{
		if (level == 0) {
			//Menuシーンへ移動した場合
			SetupMenuSceneButtons();
		} else {
			//他のシーン(Mainシーン)へ移動した場合
			SetupOtherSceneButtons();
		}
	}

	void SetupMenuSceneButtons()
	{
		//RemoveListener: Buttonのイベントを削除する
		//AddListener: ボタンのイベントを登録する
		GameObject.Find("ButtonStartHost").GetComponent<Button>().onClick.RemoveAllListeners();
		GameObject.Find("ButtonStartHost").GetComponent<Button>().onClick.AddListener(StartupHost);
		
		GameObject.Find("ButtonJoinGame").GetComponent<Button>().onClick.RemoveAllListeners();
		GameObject.Find("ButtonJoinGame").GetComponent<Button>().onClick.AddListener(JoinGame);
	}
	
	void SetupOtherSceneButtons()
	{
		//DisconnectボタンにStopHostメソッドを登録する
		GameObject.Find("ButtonDisconnect").GetComponent<Button>().onClick.RemoveAllListeners();
		GameObject.Find("ButtonDisconnect").GetComponent<Button>().onClick.AddListener(NetworkManager.singleton.StopHost);
	}
//********** 終了 **********//
}

NetworkManager_Custom.cs

OnLevelWasLoadedメソッドは、Sceneがロードされた時にSceneのlevelを引数に実行されるメソッドです〜

Build Settingsの右側にある数字がlevelです〜

f:id:hiyotama:20150724123702p:plain
Menuが0、Mainが1となっている

Menuシーンへ移動した時にSetupMenuSceneButtonsメソッドが実行され、RemoveAllListenersによって全てのOnClickイベントが削除され、AddListenerによって指定したイベントが登録されます〜

Mainシーンへ移動した時も同様で、Disconnectボタンにイベントが登録されます〜


最後にNetworkManagerについているNetworkManagerHUDコンポーネントを非アクティブ化しておきます〜

f:id:hiyotama:20150724124134p:plain
チェックを外して非アクティブ化

③結果

それではゲームを実行してみましょう〜

ゲーム画面(Build)でホストとして接続します〜

f:id:hiyotama:20150724124806p:plain

ゲームが実行されます〜

f:id:hiyotama:20150724124821p:plain

ゲーム画面(開発)でクライアントとして接続します〜

f:id:hiyotama:20150724124856p:plain

クライアントとしてゲームへ参加できます〜

f:id:hiyotama:20150724124916p:plain

Disconnectボタンを押すとMenuシーンへ戻り、再度接続することができます〜(HostがDisconnectボタンを押すと、クライアントも落ちます〜)

f:id:hiyotama:20150724124957p:plain


なんとか新しいGUIで接続することができました〜

IPアドレスについてはLogMeIN HamachiというVPN構築ソフトを使って変更できるという解説がされていますので、試したいという方は自己責任でよろしくお願い致します〜

それでは、今回はここまでです〜

ありがとうございました〜


【Unity9】UNETでマルチプレイヤーなオンラインゲーム開発【UNET1】
【Unity9】UNETでプレイヤーの動きを補間し、なめらかな動きを実現する【UNET1-2】
【Unity9】UNETでネットワーク越しに傾き(Rotation)を同期させる【UNET2】
【Unity9】UNETでオンライン開始時のプレイヤー生成位置を変更する【UNET2-2】
【Unity9】UNETのネットワークトラフィックを軽減し、効率化する【UNET3】
【Unity9】UNETのlatency(遅延時間)を改善する【UNET4】
【Unity9】UNETのlatency(遅延時間)を表示して、ちょっとだけ改善する【UNET4-2】
【Unity9】UNETのSyncVarのhookの使用例と、前時代の同期方法【UNET5】
【Unity9】UNETを使ってRotationを同期させる【UNET6】
【Unity9】UNETで各プレイヤーにPlayerIDを設定する【UNET7】
【Unity9】UNETで敵プレイヤーにダメージを与える!【UNET8】
【Unity9】UNETでHPを画面に表示し、Playerへダメージを与える【UNET9】
【Unity9】UNETでHPが0以下になった時、Playerを破壊する!【UNET10】
【Unity9】UNETで死んだPlayerを生き返らせる!【UNET11】
【Unity9】UNETでゾンビAIを出現させる!【UNET12】
【Unity9】UNETでゾンビ生成時にユニークなIDを付ける!【UNET13】
【Unity9】UNETでゾンビを撃つ!【UNET14】
【Unity9】UNETでゾンビに攻撃させる!【UNET15】
【Unity9】UNETでゾンビの動きをスムーズにシンクロさせる!【UNET16】
【Unity9】UNETでゾンビ発生地点を増やす【UNET17】
【Unity9】UNETで発生したバグを取り除く【UNET18】
【Unity9】Unity MultiPlayerを使ってネットワーク越しにマッチメイキング!【UNET19】
【Unity9】GUIを改善して、Network Managerを見やすくする!【UNET20】
【Unity9】表示したGUI(Network Manager)を機能させる!【UNET20-2】
【Unity9】UNETでAnimationを同期させる!【UNET21】