Engine続行するにはJavascriptを有効化してください。Realtimeインディーかプロのディベロッパーかを問わず、誰でもリアルタイムマルチプレイヤーゲームを開発してグローバルに配信可能です。PUNインディーかプロのディベロッパーかを問わず、誰でもリアルタイムマルチプレイヤーゲームを開発してグローバルに配信可能です。Quantumマルチプレイヤーゲーム開発の革新に参加しよう!MOBA、ブローラー、RTS、戦闘ゲーム、スポーツゲームを迅速な予測ネットワーキングエンジンで開発できます。Chat同時接続数をスケールできるクロスプラットフォームのチャットシステムをあなたのアプリに簡単に統合できます。Voice大規模かつインターナショナルな最先端のライブボイスチャット。すべてのマルチプレイヤーエンジンと併用可能。Classic(PUN1とも呼ばれます)はPUNのはじめの主要バージョンです。現在は、リファクタリングおよび機能拡張されたPUN2に切り替わっています。新しいプロジェクトはPUN2をご利用いただき、また可能であれば既存のプロジェクトについてもPUN1からPUN2へ移行していただくよう強く推奨しています。Cloassicは今後数か月メンテナンスされます。重要なバグの修正や新しいUnityバージョンのサポートは行いますが、新機能の追加はPUN2のみとなります。v2インスタンス化どのようなゲームでも、プレイヤーごとに1つ以上のプレイヤーオブジェクトをインスタンス化する必要があります。ネットワーク化されたゲームでオブジェクトを同期するには、特別なワークフローを使用します。PhotonNetwork.Instantiateメソッドに開始位置と回転およびプレハブの名前を渡すことで、ネットワークオブジェクトの生成を自動的に管理することができます。(実行時に読み込むため)、PhotonViewコンポーネントを持つ必要があります。ウェブプレイヤーに注意してください:デフォルトではResourcesフォルダのすべてのものが最初のシーンでストリーミングされます。level」を用いることで、Resourcesフォルダのどのアセットを最初のレベルで使用するかを指定することができます。最初のゲームシーンでこれを設定し、Resourcesフォルダのアセットを使わないようにすればプリローダーとメインメニューの速度は低下しません。info)をスクリプト内に実装できます。info)にコールされます。GameObjectをプレイヤーのタグオブジェクトとして設定することが可能です。TopネットワークオブジェクトのライフタイムPhotonNetwork.Instantiateで作成されるゲームオブジェクトは通常、同じルーム内にいる限り存在し続けます。Unityのシーンを切り替えるときと同様に、ルームを替えてもオブジェクトが移動することはありません。クライアントがルームを退出するとき、そのプレイヤーが所有または作成したオブジェクトはすべて破壊されます。この処理がゲームロジックに合致しない場合、このステップは省略してください。その場合、PhotonNetwork.autoCleanUpPlayerObjectsをfalseに設定して下さい。PhotonNetwork.InstantiateSceneObject()を使用して、ルームと同じライフタイムを持つGameObjectを作成することができます。このオブジェクトはマスタークライアントではなく、ルームにひもづいています。デフォルトではマスタークライアントがこれらのオブジェクトを管理しますが、photonView.TransferOwnership()を用いてその管理を渡すことができます。オーナーシップの移行については、デモを参照してください。Topネットワーク化されたシーンオブジェクトシーン内のオブジェクトにPhotonViewsを設定できます。PhotonViewsはデフォルトではマスタークライアントによって管理されますが、ルームに関連するRPCを送信するための「ニュートラル」なオブジェクトを作ると便利かもしれません。重要:ルームに入る前に、ネットワーク化されたオブジェクトを持つシーンを読み込む場合、まだ使用できないPhotonView値がいくつかあります。Topシーンの切り替えシーンを読み込むとUnityは通常、階層内のすべてのGameObjectsを破壊します。ネットワークオブジェクトも含まれるため、混乱を招く場合があります。例:メニューシーンでは、ルームに参加して別のシーンを読み込みます。ルームに早く到着してしまい、ルームの初期メッセージを取得するかもしれません。PUNはネットワークオブジェクトのインスタンス化を始めますが、あなたのロジックは別のシーンを読み込むため、インスタンス化されたオブジェクトは失われてしまいます。シーンの読み込みに関する問題を避けるにはPhotonNetwork.automaticallySyncSceneをtrueに設定し、PhotonNetwork.LoadLevel()を用いてシーンを切り替えることができます。RPCのタイミングと読み込みレベルを参照してください。多くのオブジェクトを高い頻度で再利用する場合には、メモリ割り当てと開放の繰り返しを避けるためプレハブプールを使用して、ゲームパフォーマンスへの悪影響を防止できます。IPunPrefabPoolインターフェースを実装する必要があります。インターフェースにはオブジェクトをプールに追加する機能と、プールから削除する機能があります。gameObject);です。プール自体にはすべての種類の(動的)データ構造が可能です。以下の例ではキューを使用していますが、リストやHashsetの使用も可能です。GameObjectにはパブリックリファレンスも追加されており、後にインスペクターにも設定できます。プールと名づけられたクラスは、以下のとおりです。}}プール化システムを正常に動作させるため、UnityのAwake機能を追加しています。この機能によって、キューがインスタンス化され、PUNに通知が送信されます。this;}PhotonNetwork.InstantiateまたはPhotonNetwork.Destroyを使用する場合は常に、これらのコールは以前に実装したプール、特にInstantiateとDestroy機能を使用します。現時点では、これらの機能はなにもおこなっていません。このため、これらの機能の挙動を調整します。Instantiateが呼ばれると、発生しうる状況として2つが考えられます。使用できるプールに少なくとも1つのオブジェクトがある場合と、新たなオブジェクトをインスタンス化する場合です。これを把握したうえで、この機能を以下のようにアップデートします。rotation);}この例ではキューを使用しているため、オブジェクトを取得してプールからそのオブジェクトを削除するには1つのDequeue()コールを使用します。リストを使用する場合には、同様の挙動を実装する必要があります。キューからオブジェクトを取得したら、変換データを設定して有効化します。プールが空の場合、新たなオブジェクトをInstantiateします。Destroyが呼ばれると、オブジェクトを非有効化してプールに返す必要があります。この機能もアップデートが必要です。pool.Enqueue(gameObject);}注:パフォーマンスの観点からいって、GameObjectの非有効化は重要です。オブジェクトが不要な場合には、この処理をおこなってスクリプトの実行やオブジェクトのレンダリング、衝突の確認などを回避します。シーン内のオブジェクトにこのスクリプトを必ず添付してください。手動でオブジェクトをインスタンス化します。ウェブプレイヤーのストリーミング時にダウンロードされるものを管理するためです。インスタンス化するオブジェクトにRPCを送ることができます。どのオブジェクトをインスタンス化するかをリモートクライアントに伝える方法が必要です。GameObjectへの参照を送信することはできません。そのため、名前やそれに類するものを提供する必要があります。オブジェクトの型と同様に重要なのが、オブジェクトのネットワークIDです。PhotonView.viewIDはネットワークメッセージを正しいゲームオブジェクトやスクリプトに伝達するキーとなります。手動で生成する場合、PhotonNetwork.AllocateViewID()を使用してviewIDを割り当て、送信する必要があります。ルームにいる全員が、新規オブジェクトに対して同じIDを持つ必要があります。インスタンス化のためのRPCはバッファリングする必要があります。後から接続するクライアントも、生成指示を受信しなければなりません。id1;}アセットバンドルを使ってネットワークオブジェクトを読み込む場合、アセットバンドルの読み込みコードを追加して、サンプルの「playerPrefab」を自分のアセットバンドルのものと置き換えます。