用語集
Boltでは、ネットワーキングについて不慣れな場合には説明が必要な専門用語が用いられる場合があります。
まず、サーバー、クライアント、接続、オーナー、コントローラー、プロキシ の違いを説明しましょう。
ネットワーク
サーバー
サーバーとは、ゲームのホストとなっている接続のことです。
サーバーが 「オーソリテーティブ」 である場合、サーバーは(ほとんどの)BoltEntityのオーナーであるということにもなります。
クライアント
クライアントとは、通常、ゲームに接続しているもののサーバーではないもののことです。
簡単に言えば、サーバーからの遠隔接続は全てクライアントです。
接続
Boltにおいては、接続 とは他の クライアントまたはサーバー へのネットワーク上でのリンクのことです。
接続 の際には、クライアント か サーバー が参照される、ということでもあります。
サーバー が自身の接続をチェックすると、データの送受信が必要な遠隔のリンクが存在しないため、結果はnull
となります。
エンティティ
オーナー
エンティティの作成者がオーナーです。
エンティティのオーナーであるとされる場合、(デフォルトで)あなたはそれに対する完全な 管理権限 を有していると認識されます。
オーソリテーティブサーバー の場合、(ほとんどの)BoltEntityが、その サーバー をオーナーとすることとなります。
Boltは、BoltNetwork.Instantiate()
を用いてオブジェクトのインスタンスを作成するものを、作成されたBoltEntityのオーナーであると認識します。
つまり、リクエストされた接続におけるインスタンスの作成により、オーナーシップは設定されます。
ローカルマシンがエンティティのオーナーとなっている かどうかについては、entity.isOwner
を用いて下さい。
コントローラー
サーバーまたは遠隔のプレイヤーにより管理されているエンティティです。
サーバーとクライアントのどちらも、BoltEntityを管理することができますが、管理の割り当てはそのオブジェクトのオーナーにしか行うことができません。デフォルトでは、エンティティには割り当てられたコントローラーがありません。
オーナーが 管理権を得る には、entity.TakeControl()
を用いて下さい。
クライアントへの 管理権の割り当て は、entity.AssignControl(connection)
を用いて下さい。
多くの場合、サーバーがオーナーとなっていることから、サーバーが 管理権を取得している 状態に、他のクライアントは 管理権を付与されている 状態になることとなります。
ローカルマシンがエンティティのコントロール下にあるかどうか については、entity.hasControl
を用いて確認できます。
特定の接続がエンティティの管理下にあるのかどうか については、entity.isController(connection)
を用いて確認できます。
プロキシ
ローカルで管理されていない、通常 ダミー であるエンティティです。
あなたがそのオーナーまたはコントローラーでない場合、BoltEntityはあなたの接続またはゲームにおいてプロキシであると見なされます。
クライアント上でプロキシのBoltEntityである可能性のあるものは、他の接続上には現れないことに注意して下さい。
エンティティがプロキシかどうか確認するには、(!entity.hasControl && !entity.isOwner)
を用いて下さい。