チュートリアル | Package Manager UI website
docs.unity.cn

    チュートリアル

    WebRTC パッケージの基本的な利用方法について説明します。

    名前空間の追加

    名前空間は Unity.WebRTC を指定します。

    using UnityEngine;
    using Unity.WebRTC;
    

    初期化

    WebRTC の利用時には初期化を行うために、 WebRTC.Initialize()を呼び出してください。また、終了時には WebRTC.Finalize() を呼び出します。

    public class MyPlayerScript : MonoBehaviour
    {
        private void Awake()
        {
            // Initialize WebRTC
            WebRTC.Initialize();
        }
    }
    

    ローカルピアの作成

    ローカルピアを作成し RTCDataChannel を取得します。RTCDataChannel を利用してバイナリデータの送受信を行うことができます。RTCDataChannel の初期化時もしくは終了時に処理を行う場合は、 OnOpen と OnClose のコールバックを登録してください。また、メッセージの受信を行う場合は OnMessage にコールバックを指定します。

        // Create local peer
        var localConnection = new RTCPeerConnection();
        var sendChannel = localConnection.CreateDataChannel("sendChannel");
        channel.OnOpen = handleSendChannelStatusChange;
        channel.OnClose = handleSendChannelStatusChange;
    

    リモートピアの作成

    リモートピアを作成し、OnDataChannel にコールバックを設定します。

        // Create remote peer
        var remoteConnection = new RTCPeerConnection();
        remoteConnection.OnDataChannel = ReceiveChannelCallback;
    

    通信経路候補の登録

    ピアの接続を行うために、ICE (Interactive Connectivity Establishment) の交換が必要になります。各ピアで通信経路候補が発見されたら、 OnIceCandidate が呼び出されます。各ピアのにコールバックで AddIceCandidate を呼び出して経路候補の登録を行います。

    localConnection.OnIceCandidate = e => { !string.IsNullOrEmpty(e.candidate)
            || remoteConnection.AddIceCandidate(ref e); }
    
    remoteConnection.OnIceCandidate = e => { !string.IsNullOrEmpty(e.candidate)
            || localConnection.AddIceCandidate(ref e); }
    

    シグナリング処理

    ピア間で SDP の交換を行います。最初に CreateOffer でオファーSDP を作成します。オファーSDP を取得後、ローカルピアとリモートピアの双方に SDP を設定します。このとき SetLocalDescription と SetRemoteDescription を取り違えないよう気をつけてください。

    オファー SDP の設定が完了したら、 CreateAnswer を呼び出してアンサー SDP を作成します。オファーSDP と同様に、アンサー SDP もローカルピアとリモートピアの双方に設定します。

    var op1 = localConnection.CreateOffer();
    yield return op1;
    var op2 = localConnection.SetLocalDescription(ref op1.desc);
    yield return op2;
    var op3 = remoteConnection.SetRemoteDescription(ref op1.desc);
    yield return op3;
    var op4 = remoteConnection.CreateAnswer();
    yield return op4;
    var op5 = remoteConnection.setLocalDescription(op4.desc);
    yield return op5;
    var op6 = localConnection.setRemoteDescription(op4.desc);
    yield return op6;
    

    ICE の接続状態の確認

    ピア間で SDP の交換を行うと、ICE の交換が開始されます。ICE の接続状態を確認するには OnIceConnectionChange のコールバックを利用します。

    localConnection.OnIceConnectionChange = state => {
        Debug.Log(state);
    }
    

    データチャネルの接続

    ICE の交換が完了すると、OnDataChannel が呼び出され、他方のピアのデータチャネルが生成されます。 OnMessage コールバックを登録して、メッセージ受信時の処理を記述します。

    RTCDataChannel receiveChannel;
    void ReceiveChannelCallback(RTCDataChannel channel) 
    {
        receiveChannel = channel;
        receiveChannel.OnMessage = HandleReceiveMessage;  
    }
    

    メッセージの送信

    ピア双方の RTCDataChannel がオープンすると、メッセージのやり取りが可能になります。送信可能なメッセージの形式は string もしくは byte[] を利用できます。

    void SendMessage(string message)
    {
      sendChannel.Send(message);
    }
    
    void SendBinary(byte[] bytes)
    {
      sendChannel.Send(bytes);
    }
    

    メッセージの受信

    メッセージ受信時には OnMessage に登録したコールバックが呼ばれます。byte[] 形式で取得することができ、文字列として扱う場合は以下のように変換します。

    void HandleReceiveMessage(byte[] bytes)
    {
      var message = System.Text.Encoding.UTF8.GetString(bytes);
      Debug.Log(message);
    }
    

    終了処理

    利用を終了するときには、RTCDataChannelと RTCPeerConnectionのClose()を呼び出す必要があります。最終的に、オブジェクトを破棄したあと WebRTC.Finalize() を呼び出してください。

    private void OnDestroy()
    {
      sendChannel.Close();
      receiveChannel.Close();
    
      localConnection.Close();
      remoteConnection.Close();
    
      WebRTC.Finalize();
    }
    
    Back to top Copyright © 2019 Unity Technologies
    Generated by DocFX