HLAPIとLLAPIを併用する

複雑さを軽減するために、アプリ内でHLAPIとLLAPIを併用することはできるだけ避けることをお勧めします。ただし、AR体験でHLAPIとLLAPIを併用する必要がある場合は、以下の点に注意してください。

メッセージタグを確認する

各HlapiSessionでは、すべてのメッセージに単一のメッセージタグを使用します(セッションの構築時に設定)。そのため、一部の機能(ネットワークスポーンなど)にはHlapiを使用し、他のネットワーク機能にはLLAPI経由で未加工のバイトメッセージを送信して解析することができます。この場合、2つのシステムから送信されるメッセージの衝突を避けるために、使用されているメッセージタグを追跡することが特に重要です。

次のコード例では、HLAPIとLLAPIを併用して、PeerDataReceivedデリゲートのメッセージタグを確認し、メッセージがHLAPIメッセージではなく、処理する必要のあるLLAPIメッセージであることを確認します。

using Niantic.ARDK.AR.Networking;
using Niantic.ARDK.Networking.HLAPI.Object.Unity;

// Reference set in Inspector
public NetworkedUnityObject _objectToNetworkSpawn;

// Enum list containing all message tags used in the application
public enum GameActionMessageTags : uint
{
 // Other game actions
 PerformSomeGameAction = 40U,
 // ...
}

// Use the Hlapi to network spawn an object across all peers
void SpawnObjectForAllPeers()
{
  // Note that NetworkSpawn is an extension method coming from NetworkSpawner
  _objectToNetworkSpawn.NetworkSpawn();
}

void PerformActionForAllPeers(IMultipeerNetworking networking, byte[] gameData)
{
  networking.BroadcastData(GameActionMessageTags.PerformSomeGameAction, gameData, TransportType.UnreliableUnordered);
}

void SubscribeToPeerDataReceived(IMultipeerNetworking networking)
{
  networking.PeerDataReceived += OnPeerDataReceived;
}

// Since the Hlapi also uses byte messages, this will be fired each time an object is NetworkSpawned as well
void OnPeerDataReceived(PeerDataReceivedArgs args)
{
  // Check that it is a message we care about, rather than an Hlapi message
  if(args.Tag != GameActionMessageTags.PerformSomeGameAction)
  {
    return;
  }

  // We now know this is the message that this class cares about, so use the data to perform some update
}