LogoLogo
日本語
日本語
  • Diarkis ヘルプセンター
  • Diarkis の概要
  • 始めよう
    • Diarkis サーバーテンプレート
    • Diarkis クライアント SDK
    • チュートリアル
      • 1. Diarkis サーバーをローカル環境で起動する
      • 2. テストクライアントで疎通確認する
      • 3. カスタムコマンドを実装する
      • Diarkis クライアントからサーバに接続する
    • サンプル
  • Diarkis のモジュール
    • Room モジュール
      • Room モジュールをサーバーでセットアップする
      • Room サンプル
        • room_broadcast
      • Room モジュールをクライアントから利用する
      • Room のその他の機能
    • MatchMaker モジュール
      • MatchMaker モジュールをサーバーでセットアップする
    • Field モジュール
      • Field モジュールをサーバーでセットアップする
    • P2P モジュール
      • P2P モジュールをサーバーでセットアップする
      • P2P サンプル
    • DM (Direct Message) モジュール
      • DM モジュールをサーバーでセットアップする
    • Notifier モジュール
      • Notifier モジュールをサーバーでセットアップする
    • Session モジュール
      • Session モジュールをサーバーでセットアップする
    • Group モジュール
      • Group モジュールをサーバーでセットアップする
  • Diarkis サーバー
    • Diarkis サーバをクラウド環境で起動する
      • AWS
    • Diarkis サーバーを Windows 環境で起動する
    • MARS サーバー
    • UDP サーバー
    • TCP サーバー
    • HTTP サーバー
    • Metrics API
    • サーバー間通信 - Mesh
  • Diarkis クライアント
    • ランタイム・ライブラリ
      • Diarkis RUDP
    • Diarkis Module
      • Diarkis Module の初期化と終了
      • Diarkis Module のカスタイマイズ
      • Diarkis Module のロギング・システム
      • マイグレーション
      • Diarkis のスレッド
    • サンプル
      • C++
        • room_broadcast
        • directmessage_simple
        • group_sample
        • matching_and_turn
        • matchmaker_ticker
        • p2p_rudp_sample
        • session_simple
      • Unreal Engine Plugin
        • FieldWalker
      • Unity Plugin
        • FieldWalker
          • HowToReplicatePosition.md
  • Diarkis ツール
    • Diarkis CLI
      • cgo を利用するプロジェクトをビルドする方法
      • Diarkis CLI v3 への切り替え手順
  • リファレンス
    • API リファレンス
    • リリースノート
      • v1.0
      • v1.0.1
      • v1.0.2
      • v1.0.3
      • v1.0.4
      • v1.0.5
      • v1.0.6
  • サポート
    • ライセンスと購入
GitBook提供
このページ内
  • プロジェクトのセットアップ
  • アセットを追加する

役に立ちましたか?

  1. Diarkis クライアント
  2. サンプル
  3. Unity Plugin
  4. FieldWalker

HowToReplicatePosition.md

前へFieldWalker次へDiarkis ツール

最終更新 2 か月前

役に立ちましたか?

ここでは、Diarkis プラグインを使って GameObject の位置を同期させる方法を説明します。

プロジェクトのセットアップ

まず、新しい Unity プロジェクトを作成します。 次に、Unity Package Manager 経由で Diarkis Sample Package をインポートします(詳細は を参照してください)。 最後に、シーンに DiarkisNetworkManager オブジェクトを追加し、 Diarkis Server への接続情報を設定します。 これでセットアップは完了です。

アセットを追加する

キャラクタを同期させる方法を確認するために、標準的な Unity アセットを使用した同期プロセスを説明します。 まず、新しい空のシーンを作成し、マップ、ネットワークロジック、制御可能なキャラクターを作成するために、以下の手順に従ってください。 それでは、いくつかの要素を追加しましょう:

  • キーボード入力を処理するために InputSystem プレハブを追加します(Packages>Diarkis Plugin Sample>Prefabs>Common>InputSystem から)。

  • MainCamera オブジェクトを Packages>Diarkis Plugin Sample>Prefabs>CommonMainCamera の MainCamera で置き換えます。

  • SpawnPosition という空のオブジェクトを作成し、プレイヤーをスポーンさせたい場所を設定します。

  • DiarkisNetworkManagerオブジェクトを追加し(Packages>Diarkis Plugin Sample>Prefabs>Common>NetworkManager から)、Diarkisサーバーの設定に合わせて設定します(例:Http Host: 192.168.100.12:7000、Auto Start Connect: true)。

  • RoomManagerプレハブを追加します(Packages>Diarkis Plugin Sample>Prefabs>SceneManagers>RoomManager から)。 すべての手順が正しく行われていれば、シーンの構造は次のようになります。

ここで、RoomManager オブジェクトに、どのプレイヤープレファブをどこにスポーンするかを設定する必要があります。 まず、Packages>Diarkis Plugin Sample>Prefabs>MainGame>Player からプレハブをコピーし、アセットフォルダ内の Assets>Prefabs のようにコピーします。例えば、メッシュ、スケルトン、アニメーション、コード(クラスが DiarkisSynchronizedCharacter を継承している限り)は開発者が作り直すことができます。 リジッドボディ・アニメーター・カメラとユーザー入力ハンドラを含む完全なサンプルスクリプトは Packages>Diarkis Plugin Sample>Scripts>Sample>MainGame>DiarkiSampleSynchronizedCharacter にあります。Diarkis Playerプレハブはデフォルトでこのスクリプトを使用していますが、スクリプトが継承する関数 GetLocalFrameDataPayload と EnqueueRemoteFrameData を実装していれば、開発者が独自の実装を作成することも可能です。

DiarkisSynchronizedPlayer クラスと同様に、 Diarkis Room モジュールの同期オブジェクトを簡単に作成するために継承できるDiarkisRoomObjectクラスがあります。基本的なルームオブジェクトの実装例が Packages>Diarkis Plugin Sample>Scripts>Sample>MainGame>DiarkiSampleRoomObject にあります。このクラスは、2つの形(球体か立方体)とランダムな色を持つ単純なオブジェクトの作り方を示しています。開発者は、UpdateProperties関数とGetObjectProperties関数をオーバーライドすることで、同じようなクラスを再作成し、独自のオブジェクトプロパティを実装することができます。オブジェクトのプロパティ Object Properties は Dictionary<string, double> 型であります。 SetWaitForSyncPush(true)を呼び出すと、次に RoomObjectSync Push を呼び出したときにプロパティが送信されます。

あとは RoomManager Inspector の Instance Handler Parameter に Player プレハブ、RoomObject プレハブ、SpawnPosition を追加するだけです。

いくつかの設定はインスペクタで変更でき、キャラクターの動きをどのように同期させるかを決めることができます。 以下はそれぞれの説明です:

  • MaxRemoteQueueLength:リモートでキューに入れることができるペイロードの数(この数を50以上に保つことを推奨。)

  • MaxFramePerPayload: 1つのペイロードが含むことができるフレーム数(最大時)、キャラクターが動いている場合、次に送信されるペイロードはこのフレーム数に達するまで待ってから送信される(またはMinimum Local Payload Send Frequencyの遅延の後に送信されます)

  • MiniumLocalPayload Send Frequency : ペイロードを送信するための最小遅延(ペイロードの最後の送信からこの遅延に達した場合、最大フレーム値でペイロードが満たされるのを待たずに送信します)

  • LocalFrameEnqueue Frequency(ローカル・フレーム・エンキュー頻度):0に設定するとすべてのフレームが同期され、そうでなければこの値に基づいて遅延ごとに1フレームが同期されます。

  • MaxRemoteInterpolation Duration In seconds: プレイヤーの動きを受け取ったときに許容される最大補間時間。

  • MaxAllowedDelayInSeconds: 何らかの理由で古いリモートペイロードを受信した場合、自動的にスキップされます。

DeepL.com(無料版)で翻訳しました。

注:例えば、補間するローカルフレーム数が4で、ペイロードあたりの最大フレーム数が5である場合、各ペイロードは5*5=25フレーム送信されることを意味するので、FPSが60であれば、60/25=~0.42秒ごとに送信されます。

これでシーンはキャラクタを複製し、リモート接続されたプレイヤーを表示する準備ができました。

Readme
Sceneコピー
Sceneコピー
Sceneコピー
Sceneコピー
Sceneコピー
Sceneコピー