27
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Unity】MLAPIを使ったマルチプレイアプリの作り方

Last updated at Posted at 2020-12-27

#サマリ
MLAPIを使ったマルチプレイアプリの作り方の基本をまとめました。

##環境

  • Unity 2019.4.15f1
  • MLAPI v12.1.7
  • ユニティちゃん 1.2.1

##目次

  1. プロジェクトの作成
  2. MLAPIのインポート
  3. ユニティちゃんの配置
  4. MLAPIのNetworkManagerの作成
  5. ユニティちゃんをネットワークオブジェクトとして設定
  6. UIの作成
  7. スクリプトの作成
  8. ユニティちゃんスクリプトの修正
  9. ビルド
  10. 動作確認

#1.プロジェクトの作成

  • 3Dアプリとしてプロジェクトを作成する。
    プロジェクト作成.png

#2.MLAPIのインポート

  • 下記URLからMLAPIのunitypackageをダウンロードする。

MLAPIリリースページ

MLAPIダウンロード.png

  • Assets > Import Package > Custom Package を選択する。
    インポート.png

  • ファイル選択ダイアログでダウンロードしたMLAPIのunitypackageを選択し、開くボタンを押す。
    ファイル選択.png

  • パッケージのAssetsはすべて選択してImportボタンを押す。
    MLAPI2.png

  • ProjectのAssetsにMLAPIがインポートされる。
    Project.png

#3.ユニティちゃんの配置

  • 下記URLからユニティちゃんの3Dモデルデータをダウンロードする。

ユニティちゃん 3Dモデルデータ

  • ユニティちゃんのAssetsをインポートする。
    インポート.png

ファイル選択_unitychan2.png

unitychan_import.png

  • HierarchyにCubeを追加、大きさを調整し地面を作成する。
    cube.png

  • 適当に大きさを設定する。
    cube2.png

  • 全景が映るようにカメラ位置を調整する。
    camera.png

  • ユニティちゃんのPrefabをHierarchyに配置し、地面に埋まらないように位置を調整する。
    unitychan_haichi.png

  • 位置を調整。
    unitychan_position.png

  • ユニティちゃんの配置。
    unitychan.png

#4.MLAPIのNetworkManagerの作成

  • HierarchyにEmptyオブジェクトを作成し、名前をNetworkManagerに変更します。
    create_empty.png

  • NetworkingManagerコンポーネントを追加する。
    add_networkingmanager.png

  • Unet Transportコンポーネントを追加する。
    add_unettransport.png

  • NetworkingManagerのNetwork TransportにNetworkManager自身を設定します。
    set_networktransport.png

#5.ユニティちゃんをネットワークオブジェクトとして設定

  • ユニティちゃんのprefabにNetworkedObjectコンポーネントを追加する。
    add_networkedobject.png

  • NetworkManagerのNetworkedPrefabにユニティちゃんを設定する。
    set_prefab2.png

  • NetworkManagerのNetworkedPrefabのDefault Player Prefabをチェックする。
    check_defaultprefab.png

  • ユニティちゃんのprefabにNetworkedTransformコンポーネントを追加する。
    add_networkedtransform.png

  • ユニティちゃんのprefabにNetworkedAnimatorコンポーネントを追加する。
    add_networkedanimator.png

  • NetworkedAnimatorコンポーネントのAnimatorにユニティちゃん自身を設定する。
    set_animator.png

  • 同期するパラメタとしてSpeedを設定する。
    set_animator_speed.png

  • コンポーネントを追加したユニティちゃんのprefabをapplyする。
    apply_prefab.png

#6.UIの作成

  • HierarchyにUI用Canvasを作成する。
    add_canvas.png

  • 作成したCanvasにButtonを追加する。
    add_button.png

  • オブジェクト名と表示テキストをStartHostに変更する。
    change_starthost.png

  • 同様にStartClientボタンを作成し、画面の端に移動する。
    button_rect_transform2.png
    button_position.png

#7.スクリプトの作成

  • 新規にスクリプトを作成する。
    create_scipt.png

  • 作成したスクリプトに次のメソッドを追加する。

    public void OnClickStartHost()
    {
        Debug.Log("Start Host!!");
        MLAPI.NetworkingManager.Singleton.StartHost();
    }

    public void OnClickStartClient()
    {
        Debug.Log("Start Client!!");
        MLAPI.NetworkingManager.Singleton.StartClient();
    }
  • StartHostボタンにスクリプトを設定する。
    add_script.png

  • OnClick()のObjectにStartHostボタンを設定し、FunctionにOnClickStartHost()を設定する。
    set_StartHost.png

  • 同様にStartClientボタンにスクリプトを設定する。

#8.ユニティちゃんスクリプトの修正

  • Assets > UnityChan > Scripts > UnityChanControlScriptWithRigidBodyを開く。
    unitychan_script.png

  • 基底クラスをMonoBehaviourからMLAPI.NetwotkedBehaviourに変更する。

	public class UnityChanControlScriptWithRgidBody : MonoBehaviour
	{

	public class UnityChanControlScriptWithRgidBody : MLAPI.NetworkedBehaviour
	{
  • 自分自身だけupdateするように、FixedUpdateメソッドの処理をIsOwnerの時だけ処理するようにif文で囲う。
		void FixedUpdate ()
		{
            if (this.IsOwner)
            {
                float h = Input.GetAxis("Horizontal");              // 入力デバイスの水平軸をhで定義
                float v = Input.GetAxis("Vertical");                // 入力デバイスの垂直軸をvで定義
            <省略>
                // REST中の処理
                // 現在のベースレイヤーがrestStateの時
                else if (currentBaseState.nameHash == restState)
                {
                    //cameraObject.SendMessage("setCameraPositionFrontView");		// カメラを正面に切り替える
                    // ステートが遷移中でない場合、Rest bool値をリセットする(ループしないようにする)
                    if (!anim.IsInTransition(0))
                    {
                        anim.SetBool("Rest", false);
                    }
                }
            }
	    }

#9.ビルド

  • 起動時にユニティちゃんは複製されるためHierarchyのユニティちゃんは削除する。

delete_unitychan.png

  • Project Settings > Player > Resolution and Presentation > Fullscreen Mode をWindowedに変更。
    screenmode2.png

  • Project Settings > Player > Other Settings > Api Compatibility Level を.Net 4.xに変更。
    set_net_version2.png

  • ビルドする。
    build.png

  • 適当にフォルダを作って選択。

folder2.png

#10.動作確認

  • ビルドしてできたexeファイルを実行する。
    exec.png

  • 最初のウィンドウはStartHostボタンを押してHostとしてスタートする。
    starthost.png

  • ユニティちゃんが出現する。
    実行host.png

  • 二つめ以降のウィンドウはClientとして動作させる。再度exeファイルを実行し、StartClientボタンを押してClientをスタートする。
    実行client.png

  • 二人目のユニティちゃんが出現する。それぞれの動きが同期されて表示される。
    実行client2.png

# 
チームハイエナ hyaeninae_tomei.png

27
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?