上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Unityはマッチングを手軽に行うための機能を提供してくれて非常にありがたいのだが
バグがあるようで今回の制作で少し苦しめられたのでメモしておく

サーバーから送られてくるルームリストの情報(HostData)には、
ルームに何人接続しているかの情報(connectedPlayers)が含まれているが、この値が1しか返ってこない。
サーバープレイヤーのみでも1。 3人接続しても1が返ってきた。
Unity HostData connectedPlayers always return 1
週が変わるとなおるらしい。 クレイジー

接続人数を調べられないと、ルームに参加可能か判定が出来ないのでなんとかする必要がある。

サーバープレイヤー側で、クライアントプレイヤーが接続してきたら
MasterServer.UnregisterHostでルーム登録を取り消す方法を試す。
MasterServer.UnregisterHost() seemingly does not work?
失敗。
サーバーを閉じないとルームの登録解除が出来ない・・・?
サーバーを閉じるとマッチング相手との接続も切れてしまうため、この手法も使えない。

じゃあどうすんの?

MasterServer.RegisterHost(gameTypeName: string, gameName: string, comment: string = "");を使う。
RegisterHostはルーム登録を行う関数だが、
既に登録されている場合は情報を上書きするようになっているようだ。
comment引数に接続情報を入れてルームを登録し直すと良い。
スポンサーサイト
複数のシーンを非同期読み込みしたくてテストコードを書いたんやけど

using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour {
AsyncOperation ao0;
AsyncOperation ao1;
AsyncOperation ao2;

void Start () {
ao0 = Application.LoadLevelAdditiveAsync("Scene0");
ao1 = Application.LoadLevelAdditiveAsync("Scene1");
ao2 = Application.LoadLevelAdditiveAsync("Scene2");
ao0.allowSceneActivation = false;
ao1.allowSceneActivation = false;
ao2.allowSceneActivation = false;
}

void Update () {
if(ao0.progress==0.9&&ao1.progress==0.9&&ao2.progress==0.9)
{
Debug.Log("SUCCEEDED!");
}
}
}

ao0のprogressしか進まない
コマッタナー
tht20140721.png
p2p通信がほぼ完成

NetworkViewで詰まったこと
ViewIDがシーンごとに割り振られるので
チャット等シーンをまたぐオブジェクトと同一IDになってしまい通信できなくなった

ゲームシーンのViewIDを1
チャットのViewIDを
AddComponent NetworkView→AddComponent NetworkView→RemoveComponent
で2にしたら通信できるようになった

けど地雷臭がする・・・誰か良い方法教えて~
メモ記事
Animator animator = GetComponent ();
AnimatorStateInfo animInfo = animator.GetCurrentAnimatorStateInfo(0);
if(animInfo.normalizedTime < 1.0f)
{
Foo();
}

normalizedTime
アニメーション開始/終了時間が正規化されたもの
整数部はループ回数
プレハブ化されたマップチップを配置したステージを、ステージプレハブとしてプレハブ化すると
配置したチップのプレハブは元のチップではなく、ステージプレハブに配置されたチップになる
元のチップに変更を加えてもステージプレハブに配置されたチップは変更を受けない

何を言ってるのかわからんと思うから分かりやすい例

例えばダイアログを 1個作ったときに、ダイアログの中に使われているボタンっていうのも、他でよく使われている「はい」のボタン、「いいえ」のボタンというのをプレハブ化して、ボタンのプレハブを変えればダイアログに使われているプレハブも変えられるように作っていければ理想なんですが、現状そのダイアログっていうプレハブがあると、ボタンのプレハブを変えてもダイアログのボタンは変わらないというように、そのプレハブの入れ子をなかなか制御できないという問題があります。
もののけ大戦“陣”制作事例より


解決策
チッププレハブを配置したステージをプレハブではなくシーンとして保存する
stagescene.png
Instantiateの変わりにLoadLevelAdditiveを使う
(Build Settings -> Add Currentを忘れないように)

これで階層が1つだけなら対応できる

4.xで入れ子出来るようになるらしいけどまだかな

//追記
こんなんあるんやな
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。