(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

頭上に名前を表示してオンラインで同期【Unity】【NGUI】【photon】


このエントリーをはてなブックマークに追加

photonって何?設定の仕方は?みたいな事は以下の記事で。
iOSでオンラインゲーム開発はじめました【Unity】【photon】 - (:3[kanのメモ帳]


キャラクターを同期させるまでは以下の記事で。
photonの基本的な流れ【Unity】【photon】 - (:3[kanのメモ帳]


頭上に名前を表示


今回やりたいのはオンラインゲームでよくある、頭の上に名前を表示させ、それをキャラクターの動きに同期させる事です。
↓こんな感じ

f:id:kan_kikuchi:20140515060923p:plain



デモも先に提示しときます。

Unity Web Player | OnlineTest



A,D,W,Sキーで移動
矢印キーでカメラ操作
真ん中のボタンでゲーム開始(returnか左クリックを連打)
※音でます!


今回は名前を表示するラベルはNGUIのものを使用しています。
実際にラベルを作成、管理をしているスクリプト"NameScript"は以下のようにしました。
参考:[Unity] 各キャラのHPをNGUIで表示してみる: ものづくりログ


StartでPrefab化してあるNameLabel(UILabel(Script)をコンポーネントに持ったGameObject)をインスタンス化して、Updateの中では同期が成功しているか分かり易いように現在の座標を名前の代わりに表示しています。
また、遠くに行くほどラベルを小さく、一定以上文字が小さくなると文字を消しています。

このスクリプトを頭上に名前を表示したい物にアタッチ(追加)すると頭上に名前を表示して、メインカメラの動きに合わせて表示場所を変えられます。


オンライン上で同期


同期の仕方は前回の記事と同様に、NamePlayer上で行います。
NamePlayerの内容は以下の通りです。


今回追加したのは以下の部分です。

//ラベルの内容を送る
NameScript NameScript = GetComponent<NameScript> ();
GameObject NameLabel = NameScript.NameLabel;
if(NameLabel){
        stream.SendNext (NameLabel.GetComponent<UILabel> ().text);
}


//ラベルの内容を反映
NameScript NameScript = GetComponent<NameScript> ();
GameObject NameLabel = NameScript.NameLabel;
if(NameLabel){
        NameLabel.GetComponent<UILabel> ().text = (string)stream.ReceiveNext ();
}

ラベルのtextをそのまま送って反映させているという単純なものです。