ページ

ラベル PhotonCloud の投稿を表示しています。 すべての投稿を表示
ラベル PhotonCloud の投稿を表示しています。 すべての投稿を表示

2017年4月21日金曜日

【BA2制作報告#41】自動

アーティストの皆さん、こんにちは!
今週の制作報告をお届けします。

◆オンライン対戦
基本的なシンプルなルールにおいて、とりあえず対戦ができるようになりました。
よかった、放送に間に合った...

しかし対人戦はやはり熱いですね。
試合前に相手の機体を見れる機能を前回ご紹介しましたが、いざ実際に相手の機体を見ると、これが今回の相手かとドキドキします。

開発のテストプレイにおける対戦相手は、
見知った友人たちなのに面白いものです。

◆CPU改良
オンライン対戦での賑やかしとして、プレイヤーが足りない分はCPUで補うべく制作しています。
従来のCPUがあまりにも走りが下手で、ブーストを使わずに勝てるレベルでしたので、
今回テコ入れを行いました。


ちなみに大きくコースアウトしたり、前方にトラップがあるとサイドブーストで回避したりします。
これが完璧だとは言いませんが、及第点ではないでしょうか。

◆生放送
23日(日)20:30~より、第三回の生放送を行います!
初めての方向けゲーム解説から始まり、
オンライン対戦のデモプレイや新グッズ紹介、今まで伏せてきた新機能のご紹介を行います。
ぜひぜひ、お気軽にどうぞ。

http://com.nicovideo.jp/community/co1278618

きっと暇つぶしぐらいにはなる・・・はず。



[Steamページ]
ウィッシュリストへのご登録をぜひよろしくお願いします!(切実)
http://store.steampowered.com/app/547360/

[ブレイクアーツ2 グッズ販売ページ]
https://mercurystudio.booth.pm/
グッズは今後も追加予定です。
ご購入していただけると制作費的にとても助かります。ぜひ。

[ブレイクアーツ2 ランディングページ]
http://www.breakarts2.info/

[フォーラムのお知らせ]
ユーザーの皆さんからアイデアやご要望を募り、それについて語らうためのフォーラムを設置しています。
ご意見いただければとても助かります。
お気軽にご利用ください。
※引き続きシステム系以外のご要望は募集しています。
※詳しくはフォーラム内、「はじめに」をご覧ください
http://breakarts.info/forum/

2016年1月13日水曜日

新年のご挨拶と新作のご紹介と部屋とYシャツと私

遅ればせながら、あけましておめでとうございます。
どうにかこうにかMercuryStudioの看板を降ろさずに新年を迎えられたこと、嬉しく思います。

今後とも、宜しくお付き合いいだければ幸いでございます。

---------------------

◆新作が出ました
「スリーライン」という避けゲーをつくりました。
黙々と限界に挑戦する系のマゾいゲームです。
特徴はMercuryStudioらしくヴィジュアル面の美しさと、謎におしゃれ感漂うBGMです。
海外の人はキノコが好き(偏見)な気がするので、キノコデザインに切り替えれるようにしています。


[Android]https://play.google.com/store/apps/details?id=info.mercurystudio.threelines
[iOS]https://itunes.apple.com/jp/app/surirain/id1063135438?l=ja&ls=1&mt=8


◆インタビューを受けました
AppC様よりデベロッパーインタビューを受けました。
そのうち公開される予定です。
しかしながら、まるで成功していない人間がインタビューを受けていいのでしょうか。
AppC様はインタビューする相手を間違っているのではないかという一抹の不安はあるものの、お世話になっている手前断れなかったというアレです。


◆翔泳社様より伝言をいただいています
「Unity5オンラインゲーム開発講座」ですが、旧版のプラグインについて翔泳社様の方で配信ができていなかったそうです。
現在はこちらのページで頒布されていますので、お困りの方がいればぜひ。

困った、といえばUnity5.2からPhotonRealtimeの使い方があれやこれや変更になっています。
Unityが公式でマルチプレイヤーをサポートしたことにより、邪魔なPhotonを消そうとしているのではないかという陰謀論を思い浮かべずにはいられないです。

いずれまとめたいと思いますが、さしあたりお伝えしたいのは以下になります。

・自動的にロビーへ入室しなくなった
※PhotonNetwork.autoJoinLobbyがデフォルトでfalseになっています

・RPCが廃止され、PunRPCに置き換わった
※基本的な使い方は一緒です



2015年9月3日木曜日

Unity本に載せきれなかった話

いよいよ明日はUnity本の発売日です。
(結構高いので買おうか悩んでいる方は値下がりしてからで良いと思います。はい。)

イベントなどでは先行販売?されているそうなので、ちょっと早いですが先立って書籍内に載せきれなかった話について、この場でお伝えします。


◆1.iPhoneでトラブルが起きる
基本的に書籍内の検証等はAndroid端末で行っています。
本来であればiPhoneでも検証すべきですが、特に新しい手法を用いているわけでもなし、問題無いだろうと油断していたのが失敗でした。

一つだけ、今まで使ったことのない文がありました。
それは「PhotonNetwork.time」です。
これはサーバーが稼働してからの時間を取得するものですが、書籍中で使用したUnity5.0.2とPUN1.51の組み合わせにおいてはiPhoneだけ異なる値が取得されます。
※各最新版ではiOSでも正しい値がとれるとのことです

とはいえUnityのバージョンを下手に上げるとトラブルの原因になりますので、一般公開版(完成版)では「PhotonNetwork.time」を使わない方法に処理を切り替えています。
具体的にはRPCを使った処理への変更ですが、こちらは一般公開版の「gameManage.cs」内をご覧ください。


◆2.iPhoneでトラブルが起きる②
おそらく私の実装方法が悪いのですが、KiiCloudにおいて書籍中の初期化方法では正しく初期化が行えません。
書籍中の初期化方法とは、
http://documentation.kii.com/ja/guides/unity/quickstart/adding-kii-cloud-sdk-to-your-application/
にあるKiiCloudが公式で用意したリファレンスガイドによるものですので、間違いはないはずですが、すみません、結局根本的な原因は未だ不明です。

回避方法として、上記の初期化方法を使わず、自ら明示的に初期化を行うという手法が有効です。
具体的には一般公開版の「kiiManage.cs」にある

    void Awake(){
        //Kii初期化を手動で行う
        DontDestroyOnLoad(this.gameObject);
        Kii.Initialize("AppID","AppKey",Kii.Site.JP);
    }

内の「Kii.Initialize」が該当します。


◆3.PhotonNetwork.countOfRoomsの罠
 countOfRoomsとは、現在ルームが何部屋あるかを取得するものです。
気をつけなければならないのは、この取得されるルームの数はisOpenやisVisibleの状態を問わず、またルームが定員一杯であったとしてもカウントされることです。

具体的にどういう問題が発生するかというと、
「countOfRooms」の値が0だったら部屋がないので自分で作成する、
これが1だったら”入室可能な”部屋があるので入室処理を行う。

といった処理ができないことにあります。
仮に値が1だとして、その部屋が入室可能かどうかはわからないのです。
 書籍の中にある複数ルームを参照したマッチングについては、思いっきりこの間違いを犯しており、状況によってはしばらく部屋に入れないことが考えられます。

そこで「PhotonNetwork.GetRoomList()」を用いて個別にルーム情報を読み込み、isOpenの状態はどうなっているか、定員に達していないかを判別した上で、入室または新規ルーム作成かを振り分ける必要があります。

こちらについては、「gameManage.cs」の「betterRoomSearch()」をご覧ください。


◆4.standaloneでの書き出し方法
AppCの導入を行うとモバイル環境以外での書き出しができなくなります。
しかしこれはSDKに問題があるわけではなく、AppC独自の構文が使用できないことに起因するものです。
ですので、例えば
「public static AppCCloud appCCloud」や「adsManage.appCCloud.Ad.ShowCutinView()」などをコメントアウトすることで、引き続きwindows,mac用として書き出すことが可能です。
デバッグの際はとても役に立つので、ご活用ください。


◆5.iOS審査対策
iOSにてアプリを審査にかける際、広告用IDの使用の有無について回答する箇所があります。
AppCは広告用IDを使用していませんが、UnityAdsは使用しているとの回答をいただいています。
ですので審査の際の回答は「広告の表示に使用している」となるのですが、
Apple側で広告の表示ができなければ審査で弾かれることになります。
ゲームを起動してすぐに広告がでるようなケースであれば気にすることはないのですが、
書籍内のサンプルのように対戦後に表示されるといった場合、Apple側ではそこまで見ていないことがあります。
(もっとスマートな方法があるかもしれませんが)対戦終了から広告が表示されるまでの過程を動画にし、予め審査の情報として提供すると、リジェクトで足止めを食らう日数が削減できるのでお試しいただければと。


こんなところでしょうか。
何かのお役に立てば幸いです。



2015年7月17日金曜日

書籍が出ます!

ひいひい言いながら作業していたUnity本ですが、翔泳社さんから予約が始まったとのご連絡を受けましたのでご紹介ですよー。

http://www.amazon.co.jp/dp/4798140732/

表紙はブレイクアーツですが、中身とは無関係でして、新規にゲームを作っています。
ざっくりと中身をご紹介しますと、PhotonRealtimeを使ってオンライン機能を実装する手順書のようなものです。
他にもゲームの設計や収益方法についても軽く書かせていただきましたが、正直これに関しては答えがありません。
あくまで私個人の考えに過ぎないので、参考書という文字通りに自身の考えを導く参考になれば嬉しいです。

対象としては、

・これからゲームを作ってみたいと考えている初心者の方
・ゲームは作ったことがあるけども、オンライン機能については初めてという中級者の方

おおよそこうした方々に向けてとなりますので、高度なことは全くしていません。
ご購入の際は、その点についてご注意ください。
あ、学校の課題研究とかに使用されると、オンライン機能って高度なことっぽく見えるのでありかもしれません。(無保証)

初心者の方は、先にUnityの基本操作に関する参考書などで予習しておくと尚良しです。
分かりやすく解説したつもりではあるのですが、基本操作まではノータッチなもので。

本文中至らぬ点はあると思いますが、興味のある方にはそこそこ使える本になっていると思いますので、値下がりした頃にぜひお手にとってみてください。


さて、現状まだ各章の修正が終わっていません。
引き続きヒイヒイ言いながら頑張ります。

2014年6月19日木曜日

PhotonCloud消滅?

消滅というと穏やかではありませんが、実際はそういう意味ではなく、
大変お世話になっているPhotonCloudですが、こちらの名称がPhotonRealtimeに変更になったそうです。

つまり、今まで私が書いた記事が検索に引っかからなくなるということですね(そっちか
そういえばPhotonCloud関連の記事も途中で放置しています。
続きを書かねばなりませんが、ブレイクアーツの開発がアレ過ぎてちょっと余裕なさ気です。

そうそう、 PhotonRealtimeと名称が変わったばかりでなく、
PhotonTurnbasedというサービスも始まったそうです。
こちらはリアルタイム対戦ではなく、ターン制のカードゲームやボードゲームに特化したプランとのことです。
アプリ開発者の皆さんは是非ご活用くださいね。

私もカードゲーム版ブレイクアーツとか創ってみたいです(妄想)

2014年2月17日月曜日

ブレイクアーツ情報公開開始!

ブレイクアーツの情報公開、および事前登録キャンペーン開始です!
開発作業もじわじわ追い込まれてきました。
果たして間に合うのか、乞うご期待。

http://breakarts.info/

余談ですが、開発はUnity、PhotonCloud、KiiCloudなどなど利用しております。
これらを使えばこんなゲームになる、という参考にもお使いいただけるかもしれません。

2014年1月7日火曜日

実際にPhotonCloudを使ってみる~基本編④~

第一回
第二回
第三回

新年あけましておめでとうございます。
本年もどうぞよろしくお付き合い下さい。

それでは、第四回とまいりましょう。

今回は前回スルーしたRPCについてご紹介します。
今回はRPCを用いて、ゲーム内のスコアを同期してみようと思います。

まずは環境づくりから。
GUI Textを追加し、こんな感じに設定します。
ついでに平行光源を追加してオブジェクトを見やすくしました。



スフィア(でも何でもいい)を追加し、適当に配置します。
わかりやすくするために色をつけてみました。



プレイヤーがターゲット(赤い玉)にぶつかると、スコアが1ずつ加算されていき、
それがGUI Textに表示される、というゲームにしたいと思います。
ゲームとして成立していないのはご愛嬌です。

処理として必要になるものは、以下の3つになります。

①衝突判定
②RPCを呼び出す
③呼び出されたRPCがスコアを加算

①について
これはPhotonCloudと関係がないので、さくっと作ります。
moveTarget.csに以下のように追記します。

「moveTarget.cs」

using UnityEngine;
using System.Collections;

public class moveTarget : MonoBehaviour {

private Rigidbody myRigid;
private bool upSw;
private bool downSw;
private bool leftSw;
private bool rightSw;
private PhotonView myPV;
private GameObject scoreText;
private GameObject scoreTarget;

void Start () {
//photonViewを取得し、自分のオブジェクトでなければスクリプト停止
myPV = PhotonView.Get(this);
if(!myPV.isMine){
this.enabled = false;
}
//一応リジッドボディをキャッシュ
myRigid = this.gameObject.GetComponent();
//
scoreText = GameObject.Find("GUI Text");
scoreTarget = GameObject.Find("Sphere");

}

《中略》

void OnCollisionEnter(Collision col){
if(col.gameObject.name == scoreTarget.name){
//衝突時の処理
}
}


}
説明不要ですね。
続きまして、②・・・の前に、呼び出すRPCの作成から行います。

③について
OnCollisionEnterの一連の流れの後に以下のように追記します。

「moveTarget.cs」

using UnityEngine;
using System.Collections;

public class moveTarget : MonoBehaviour {

private Rigidbody myRigid;
private bool upSw;
private bool downSw;
private bool leftSw;
private bool rightSw;
private PhotonView myPV;
private GameObject scoreText;
private GameObject scoreTarget;
private static int nowScore = 0;


《略》

[RPC]
void addScore(int score){
nowScore = score;
scoreText.guiText.text = "nowScore = " + nowScore + "points";
}

}
まずスコア格納用の変数を定義しています。
その後、RPC用の関数を作成していますが、RPC用の関数を作成する場合、
頭に[RPC]と記述する必要があります。
これ以外は基本的に普通の関数と同じです。

続いて②について、RPCの呼び出しを行います。
今回のポイントはここからですよ~。

先ほどの衝突時の処理に記述します。
void OnCollisionEnter(Collision col){
if(col.gameObject.name == scoreTarget.name){
//衝突時の処理
nowScore += 1;
myPV.RPC("addScore",PhotonTargets.All,nowScore);
}
}
◆PhotonView.RPC(実行するRPC名, 実行対象, 渡す変数)
RPCを呼び出し、実行対象のクライアントで実行します。
実行対象には
・PhotonTargets.All
・PhotonTargets.Others
などがあり、Othersの場合は自分で呼び出しているくせに自分では実行しません。
いつ使うんだろうと思っていたんですが、意外と使います。超便利。
「渡す変数」というのは、通常の関数と同様に使えるのですが、最大の特徴は呼び出したクライアントの変数を送信するという部分です。
これと上記のOthersを組み合わせると、自分の変数を相手に送りつけて、その変数を使った処理を相手だけ行う、なんてことが可能です。

今回のサンプルでは、
①衝突する
②自分のスコアを加算
③RPCを呼び出し、自分のスコアを(自身を含めて)他のプレイヤーに一斉送信
④受け取ったスコアを自分のスコアに代入
⑤テキスト更新

という流れになっています。



こんな風になれば成功です。
次回はOnSerialize文による同期か、プレイヤープロパティ辺りを解説できればと思います。

間違いありましたら、是非お教え下さい。

2013年12月20日金曜日

実際にPhotonCloudを使ってみる~基本編③~

第一回

第二回

最近諸々あってあまりUnityに触れません。
開発の遅れが少し心配です。

さて、第三回は、前回作成したキューブを各プレイヤーが動かせるようにしましょう。
ですがその前に、PhotonCloudによる同期について説明する必要があります。

そもそも同期とは、複数のゲーム画面で同じ処理を行う、または変数の値を等しくする、という意味です。
PhotonCloudでこれを行う場合、主に2つの方法があります。

①OnPhotonSerialize
継続的に変数を同期します。
設定により、厳密に同期するか、ざっくり同期するか選択可能です。
どちらの場合であっても、モバイル環境ではそれなりに負荷がかかることに注意です。
キャラクターの位置情報の同期などに使用することが多いです。

②RPC
リモートプレジャーコールと言うらしいです。
「リモートプレ…あぁいや、RPCか」なんてカッコつけて使いましょう。
こちらは同期というより、厳密には同じ関数を実行する、という言い方が正しいです。
その際、実行元のプレイヤーが持つ変数が渡された状態で関数が実行されるため、結果的に変数の同期もできるというわけです。
分かりにくいのでいずれ実例を含めて紹介します。
任意で同期することができるため、例えば誰かが被弾してHPが減ったとき、その情報を渡しつつ、HPバーを更新する、なんてことができます。

以上、二種類の方法がありますが、今回は移動の同期のため、上記の継続的な同期を使用します。

それではまず、移動できるように物理演算を付加し、キー入力によって動作するようにします。

新たに「moveTarget.cs」を作成し、以下のように記述します。

「moveTarget.cs」

using System.Collections;

public class moveTarget : MonoBehaviour {

private Rigidbody myRigid;
private bool upSw;
private bool downSw;
private bool leftSw;
private bool rightSw;

void Start () {
//一応リジッドボディをキャッシュ
myRigid = this.gameObject.GetComponent();
}

void Update () {
//上
if( Input.GetKey(KeyCode.UpArrow) ){
upSw = true;
}else{
upSw = false;
}
//下
if( Input.GetKey(KeyCode.DownArrow) ){
downSw = true;
}else{
downSw = false;
}
//左
if( Input.GetKey(KeyCode.LeftArrow) ){
leftSw = true;
}else{
leftSw = false;
}
//右
if( Input.GetKey(KeyCode.RightArrow) ){
rightSw = true;
}else{
rightSw = false;
}
}

void FixedUpdate(){
if(upSw){
myRigid.AddForce(Vector3.forward * 10f);
}else if(downSw){
myRigid.AddForce(Vector3.forward * -10f);
}else if(leftSw){
myRigid.AddForce(Vector3.right * -10f);
}else if(rightSw){
myRigid.AddForce(Vector3.right * 10f);
}
}

}

ざっくり解説すると、
このスクリプトがアタッチされたオブジェクトのリジッドボディを取得し、
それに対してAddForceで力を加えています。
これの制御をキーボードからのキー入力で行っているわけですね。
PhotonCloudと無関係なので、詳しくは自力で何とかしてください。

これを前回作成したプレファブにアタッチします。
その際、リジッドボディを付加することを忘れないでください。
リジッドボディのパラメータはDragを1、UseGravityをオフに、FreezePositionからYにチェックを入れて下さい。
画面を見やすくしたいので、カメラのトランスフォームを変更します。
位置をx:0, y:40, z:0に、角度をx:90, y:0, z:0と入力して下さい。



一旦ビルドして動かしてみましょう。
このスクリプトではキーボードの矢印キーに対応していますので、色々押してみてください。
動きましたか?
なにやら動けば成功です。
一度ウインドウを閉じ、今度は多重起動してみましょう。

すると、あれれ、どちらのオブジェクトも動きやがりましたね。
オブジェクトがどのプレイヤーから生成されたものなのかを判別し、 自分の物だけ動くようにしましょう。

先ほどの「moveTarget.cs」に以下のように追記します。

「moveTarget.cs」

using UnityEngine;
using System.Collections;

public class moveTarget : MonoBehaviour {

private Rigidbody myRigid;
private bool upSw;
private bool downSw;
private bool leftSw;
private bool rightSw;
private PhotonView myPV;

void Start () {
//photonViewを取得し、自分のオブジェクトでなければスクリプト停止
myPV = PhotonView.Get(this);
if(!myPV.isMine){
this.enabled = false;
}
//一応リジッドボディをキャッシュ
myRigid = this.gameObject.GetComponent();
}

《後略》


◆PhotonView.isMine
PhotonViewが自分の物であるか、他のプレイヤーの物であるかを判定します。
自分の物である場合、trueが返されます。

これを使い、自分の物でない場合はスクリプトをオフにしてしまいましょう。
もう一度多重起動して確かめていただくと、一つのオブジェクトしか動かないことが確認できるかと思います。

では、いよいよ同期に入ります。
アタッチしているPhotonViewに、同じくアタッチしているリジッドボディをドラッグします。
リジッドボディと書かれた辺りを引っ張ってみてください。



このように設定できればOKです。
PhotonViewにはトランスフォーム、リジッドボディ、スクリプトなどを格納することができ、
これが同期の対象となります。
スクリプトを同期する場合、具体的に何を同期するのか
「OnPhotonSerialize」による記述が必要です。

それでは多重起動してみましょう!
複数の実行環境で同期して動いているのが確認できたでしょうか。

今回はここまで、次回はRPCについてお話します。

例によって変な部分がありましたら是非お教え下さい。

2013年11月23日土曜日

実際にPhotonCloudを使ってみる~基本編②~

最近PhotonCloudに動きがあったそうで、何やら新しいサービスが開始されるそうです。
この講座が無意味になるような内容じゃなかったら良いのですが・・・。

それでは、前回に引き続き基本編です。
今回のテーマは可視化。
色んな物が見えるようにしてみましょう。

前回の「lobbyMain.cs」 にGUILayoutを追記します。

「lobbyMain.cs」

public class lobbyMain : Photon.MonoBehaviour {

<省略>

void OnGUI(){

GUILayout.Label( PhotonNetwork.connectionStateDetailed.ToString() );

}


}
実行してみましょう。
左上に何やら文字列が表示されましたね?
これが現在のネットワーク接続状況です。
「Joined」と表示されれば無事にルームへと入室できたことが分かります。

◆PhotonNetwork.connectionStateDetailed
現在の接続状況を返してくれる。
デバッグ的に画面に表示させる他、接続が完了するまでは処理をしない、
といった条件判断にも活用できる。


続きまして、ネットワークゲームなので操作できるキャラクターが欲しいところですね。
ということで、

・プレイヤーがルームに入室すると、そのプレイヤーのキャラクターを画面に表示する

部分をまず作ってみたいと思います。


①プレファブの設定

キューブでもスフィアでもなんでもいいので、ヒエラルキーから追加します。
名前を適当に変更します。
この場合は「playerObj」としました。

photon viewというスクリプトをアタッチします。
これは検索で出すもよし、Add ComponentからMiscellaneousを辿って追加することもできます。

それをプロジェクトのResourcesフォルダ内にドラッグし、プレハブを作成した後、ヒエラルキーに残ったオブジェクトを削除します。




②スクリプトの設定

「lobbyMain.cs」に以下のように追記します。

「lobbyMain.cs」

public class lobbyMain : Photon.MonoBehaviour {

<省略>

//ルームに入室したときに自動で実行される
void OnJoinedRoom(){

Vector3 createPos = Vector3.zero;
createPos.x = PhotonNetwork.room.playerCount * 1.5f;
PhotonNetwork.Instantiate("playerObj",createPos,Quaternion.identity,0);

}

void OnGUI(){

GUILayout.Label( PhotonNetwork.connectionStateDetailed.ToString() );

}

}
ウェブプレイヤー辺りで書き出し、 多重起動してみましょう。
以下のようになれば成功です。




窓を増やせば増やすほど、ボックスが増えていきますね。
このボックスがそれぞれのプレイヤーです。

スクリプトの解説ですが、上から
  1. createPosという原点を格納した変数を作成
  2. createPosのx座標を現在のプレイヤー数×1.5に設定
    ※オブジェクトが重なるのを避けるため
  3. ネットワーク上にオブジェクトを作成
という流れになっています。

◆PhotonNetwork.room.playerCount
現在自分がいるルームに何人プレイヤーがいるかを取得

◆PhotonNetwork.Instantiate
Instantiateをルームに入室している全てのプレイヤーで実行させるようなもの。
この命令で作成されたオブジェクトをオンラインで同期することができる。


今回はここまでです。
次回はこのオブジェクトを動かし、その動きをネットワークで同期します。

何かおかしいところがありましたら、是非お教え下さい。

2013年11月9日土曜日

実際にPhotonCloudを使ってみる~基本編①~

それでは今回から、実際のスクリプティングについて解説しようと思います。
誰かのお役に立てれば良いのですが・・・。

なお、解説は全てC#で行います。
悪いことは言わないので、こういう外部のプラグイン的な物を使うときはC#が良いです。
JSだとPhotonCloudのファイルをPluginフォルダに移動したり、ところどころ書き換える必要があるっぽいので。

さて、以前の記事にPhotonCloudについての流れが書いてありますね。
この1~7に沿って実際の構文を記します。


1.ゲームにログイン

 処理的には
  • ゲームロビー(PhotonCloud)への接続
を指します。

「lobbyMain.cs」

public class lobbyMain : Photon.MonoBehaviour {

void Start () {
  
PhotonNetwork.ConnectUsingSettings("0.1");

}

}

以上です。簡単ですね。
これを適当なゲームオブジェクトに追加してあげれば大丈夫です。
ポイントはMonoBehaviourにPhotonを継承して、Photon.MonoBeheviourとすること。
継承って何なのかよくわからないんですが、Photonというクラスで定義された関数やらを使えるようにすること、みたいです。

◆ConnectUsingSettings("0.1")
「0.1」という文字列のロビーに接続する、みたいなイメージです。
使い方としては、ゲームのバージョンアップの際など、新旧のアプリケーションが同じロビーに接続するとまずい時などに使います。
一例ですが、ここを「0.2」にすると、同じ「0.2」と定義されたアプリケーションが同じロビーへと接続されます。


2.好きな部屋を選ぶか、自分で部屋を作って入室

処理的には
  • 現在募集中のルームを検索して、存在すれば入室
  • なければ自分で作成して入室
となります。

「lobbyMain.cs」

public class lobbyMain : Photon.MonoBehaviour {

void Start () {
  
PhotonNetwork.ConnectUsingSettings("0.1");

}

//ロビーに入室した後に自動的に実行される
void OnJoinedLobby(){

PhotonNetwork.JoinRandomRoom();

}

//RandomJoinが失敗したとき(ルームが存在しなかったとき)に自動で実行される
void OnPhotonRandomJoinFailed(){

PhotonNetwork.CreateRoom("testRoom");

}

}

先ほどのスクリプトに追記しました。
OnJoinedLobbyやOnPhotonRandomJoinFaildに関しては、コメント行がそのまま説明です。
詳しいことは分かりませんが、そういうものだと理解してください。
なぁに、車の構造を知らなくても運転は出来るんですよ。私免許持ってないですが。

◆JoinRandomRoom()
存在する部屋を検索し、そのどれかに入室するという意味です。

◆CreateRoom("testRoom")
「testRoom」という名前の部屋を作成し、入室するという意味です。
部屋の名前は重複せず、検索のキーにもなります。


絵的に何の変化も無いのでわかりにくいですが、一応これだけで複数のプレイヤーが同じルームに打ち込まれる処理が完成しました。

次回はもうちょっと絵的に分かりやすくして、条件設定をしてみましょう。

おかしいところがありましたら、何卒ご教示ください。

2013年11月1日金曜日

実際にPhotonCloudを使ってみる~導入編①~

それでは今回から、PhotonCloudを実際にUnityで扱う方法についてお話したいと思います。

まずは導入編。
どこで何をどうするのかについてです。


①PhotonCloud公式からユーザー登録をする
http://cloud-jp.exitgames.com/ こちらからどうぞ
何はともあれユーザー登録です。
登録は特に難しいところもないので割愛しますね。


②UnityへPhotonCloudを導入する
アセットストアにて「photon」 と検索すると以下のようなアセットが見つかりますので、これをUnityへ読み込みます。
 

 
③ PhotonCloudの公式サイトへログインし、AppIDをコピーする


④UnityへPhotonCloudをインポートすると表示される画面からsetupをクリック

後、先ほどのAppIDを入力し、CloudRegionからJapanを選択



このウインドウを閉じ、とりあえずは導入完了です。
PhotonCloudはデフォルトだと同時20接続まで無料です。
ですので、この状態でも開発上でのテストは十分行えますね。

次回はスクリプティングの基礎から行います。


例によって、何かおかしいところがありましたら、是非ご教示ください。

2013年10月25日金曜日

PhotonCloud基礎知識③-ルームとプレイヤーのプロパティ

今回はルームとプレイヤーのプロパティのお話です。

例えば制限人数4名のルームを作成し、そのルームでオンラインプレイをしたいとしましょう。
その場合、ルームに対して「この部屋は最大4人ですよ」という情報を持たせなければなりません。

こうしたルーム自体が持つ情報のことをプロパティと表現します。

最大人数・現在人数や部屋の名前などなど、最低限こういうのは合った方がいいよね!
というものがあらかじめ設定されており、こうしたプロパティにアクセスすることで情報を持ってくるわけです。

同様に各プレイヤーにもプロパティが設定されています。
プレイヤー名や識別IDなどなど、こちらも最低限これはいるよねーというものが用意されています。

以上のように、ルームとプレイヤーに対してプロパティが設定されているのですが、これだけでは作れるゲームに限界が出てきます。

例えば、ルームの情報として最大人数だけでなく、対戦するマップの情報を持たせたい、とか。
ゲームルールがバトルロイヤルなのかチームマッチなのか設定しておきたい、とか。
そうした情報をルームに持たせておけば、その情報によって検索を行い、自分の希望とマッチした空きルームへとプレイヤーを接続させることができるので、便利ですよね。

プレイヤーのプロパティにしても同様で、ゲームの準備が完了しているか情報を持たせるとか、 プレイヤーが赤チームなのか青チームなのかの情報を持たせるとか、色々応用が出来そうです。

このようなユーザーが独自に設定するプロパティのことを「カスタムプロパティ」といいます。
カスタムプロパティを自分で設定することで、様々なゲームのバリエーションに対応できるというわけですね。


というわけで、まとめです。
  1. ルームやプレイヤーにはプロパティと呼ばれる情報が設定されている
  2. プロパティの項目は自分で増やすことができ、それをカスタムプロパティという
続きはまた次回。
お前それおかしいということがありましたら、ぜひご教示ください。

2013年10月20日日曜日

PhotonCloud基礎知識②-ロビーやらルームやら

台風がまた来ているようですね。
かなり勢力が強いようで、このまま直撃しないことを願うばかりです。

さて、引き続き基礎の基礎、PhotonCloudの解説を行いますね。

今回のテーマはロビーとかルームって何?というところです。
PhotonCloudというサーバーにユーザーを接続させ、ゲームを行うわけですが、
この辺りの流れと構造についてご紹介します。

PhotonCloudにはロビーとルームというものがあります。
まずはこの2つの説明から。

①ロビー
いわゆる大部屋です。
PhotonCloudに接続した全てのユーザーは初めにここに通されます。
この状態ではゲームのプレイは不可能です。

②ルーム
実際にゲームを行う部屋だと考えてください。
こちらが指定した条件でルームを作成し、そこにプレイヤーを通して、ゲームを行うようなイメージです。

 なので実際の流れとしては、
  1. ロビーへ接続
  2. 最大人数、ゲームルールなどの設定をしてルームを作成(または検索して入室)
  3. ルーム内のプレイヤーでゲーム開始
という感じです。
意外とこの辺りの構造は「察しろ」と言わんばかりの扱いなので、
この場で説明させていただきました。

調べればわかるけど調べる時間が勿体ないことってよくありますからねー。

もしおかしいところがあればご教示ください。
それではまた次回。

2013年10月18日金曜日

PhotonCloudの基礎知識

アプリで収益を上げると考えた際、その一つの答えはオンラインゲームです。
ソーシャルゲームだってある意味ではオンラインゲームですよね。

私が構想しているのはMOゲームというジャンルで、ネットのFPSみたいなシステムですね。
モンハンみたいな感じといえば分かりやすいでしょうか。

そうしたオンラインに対応したゲームをUnityで制作するとした場合、選択肢は幾つかあります。
ありますが、現状での最適解はPhotonCloudにぶら下がることです。

理由としては、
  • 面倒なサーバーの用意や設定を全てあちらがやってくれる
  • 同時接続数20までは無料
  • ある程度日本語のドキュメントがある
  • Unity押し(ていうかUnity用に作ったんじゃないのかってぐらい)
詳しい方はもっと良い理由を挙げられるのかと思いますが、私にはこれだけで即決するに十分な理由でした。

高校生のときにPhotonを使ってオンラインゲームを制作された方もいるそうで、対抗意識を燃やしたってのもあったりなかったり。

さてさて、そんなPhotonですが、何せ扱う側は7月にUnityを始めたばかりの素人。
色々な困難がありました。
この記事群では、そんなPhotonに関する知識を発信できればなと思います。

後に続く方々のため、そしてその見返りに誰かが何かしてくれることを期待しています。


------------------------------------------


◆そもそもPhotonCloudって何?

千里の道も何とやら、まずは根本的なところからお話します。
簡単に言ってしまえば、Unityでオンラインゲームを作るための仕組みです。
オンラインゲームをされたことがある方なら分かりやすいと思うのですが、
このような流れを見たことはありませんか?
  1. ゲームにログイン
  2. 好きな部屋を選ぶか、自分で部屋を作って入室
  3. その部屋に他のプレイヤーが集まる
  4. 全員が準備完了になるとゲーム開始
  5. オンラインで他のプレイヤーがキャラクターなどを操作し、リアルタイムにプレイ
  6. 何らかの条件でゲーム終了 結果報告へ
  7. 部屋に戻る
PhotonCloudを用いると、大体こんなことができます。
というより、ある種これが全てです。

後はこの応用であり、例えば全てのプレイヤーを自動的に同じ部屋にぶち込むように設定すれば、よくあるオンラインRPGの完成です。
(実際には負荷とか色々怖いですが)

 もちろん、これらの機能はPC、スマートフォン問わずに実現可能です。

注意としては、あくまでゲームを皆でプレイするという機能しか無いとも言えることです。
プレイヤーのデータを保存したりは出来ないよという。


では、まとめです。
  • PhotonCloudを使うと比較的楽にオンラインゲームが作れる!
  • 皆でゲームをプレイするという部分に関する機能を提供する
  • サーバーにデータの保存はできない
以上、何となくご理解いただけたでしょうか。
これだけPhoton,Photonと文にすればSEOはバッチリだね。

初心者の視点なのでミスがあるやもしれません。
「お前それ間違ってるから」ということがあればぜひご教示ください。