12K Views
May 19, 24
スライド概要
この資料では、箱庭ドローンのUnityワールド/機体をカスタマイズする方法を解説します。
- Unity
- Unityシーン/スクリプト
- Unityプリミティブ素材、コライダー
- Unityアセットストア
- Unityプロジェクト
- 箱庭
- 箱庭ドローンのUnityプロジェクト
- 箱庭ドローンのUnityシーン
- 箱庭ドローンのプレハブ
- カスタマイズ
- 箱庭ワールド
- 箱庭ドローン
- リポジトリ管理方法
TOPPERS/箱庭WG活動でUnityやらAthrillやらmROSやら触ってます。 最近は仕事の関係でWeb系の技術に注力しつつ、箱庭への転用を模索しています。 2023年8月1日:合同会社箱庭ラボに移動しました
箱庭(Hakoniwa) Drone Unity 合同会社箱庭ラボ 森崇
はじめに • この資料では、箱庭ドローンのUnityワールド/機体をカスタマイズする⽅法を 解説します。 • Unity • Unityシーン/スクリプト • Unityプリミティブ素材、コライダー 詳細を把握されたい場合は、 こちらを参照ください 詳細を把握されたい場合は、 こちらを参照ください 解説範囲 • Unityアセットストア • Unityプロジェクト • 箱庭 • 箱庭ドローンのUnityプロジェクト • 箱庭ドローンのUnityシーン • 箱庭ドローンのプレハブ • カスタマイズ • 箱庭ワールド • 箱庭ドローン • リポジトリ管理⽅法 詳細を把握されたい場合は、 こちらを参照ください Python アプリ Python API ライブラリ 箱庭ドローン シミュレータ Unity ワールド/機体 箱庭コア機能 箱庭PDUデータ (共有メモリ︓MMAP) 詳細を把握されたい場合は、 こちらを参照ください 2
Unity • 箱庭ドローンのUnityワールド/機体をカスタマイズする上で • 必要となるUnityの基本的な概念や機能を整理します。 ゲームやシミュレーションを作成・編集するた めの統合開発環境です Unityが標準で提供している3Dモ デルや物理モデルなどです Unityエンジン内でゲームオブジェク トや動作を制御するために使われ るC#プログラムです ゲーム内の特定の環境やレベルを 定義する設定やオブジェクトのコレ クションです Unityゲーム開発⽤の素材やツールを購⼊・ダ ウンロードできるオンラインマーケットプレイスです Unityエディタ プリミティブ素材コライダー等 Unityスクリプト Unity アセットストア Unity アセット Unityシーン Unity Unity Unity アセット アセット アセット Unityプロジェクト ゲームやシミュレーションを開発するためのファイルや設定の集まりで す。GitHubで管理できます。 3
Unityの基本的な概念や機能の解説リンク集 • 箱庭⼊⾨・Unityの使い⽅ • Unityシーン • Unityスクリプト • Unityプリミティブ素材、コライダー • Unityアセットストア • Unityプロジェクト • その他 • Unityプレハブ • Unityキャンバス • Unityマテリアル ちなみに︓⾃分が最初に⼿にした本 •Unity 2018⼊⾨ SB Creative 荒川拓也/浅野祐⼀ ですが、以下あたりが新しい版と思われます。 Unity2021⼊⾨ 最新開発環境による簡単3D&2Dゲー ム制作 Tankobon Softcover – July 21, 2021 Unity[超]⼊⾨ Tankobon Softcover – September 29, 2023 4
箱庭ドローンのUnityプロジェクト • GitHubで⼀般公開されています • https://github.com/toppers/hakoniwa-unity-drone-model • 前提条件 • Unityエディタがインストールされていること • Windows/WSL2がインストールされていること • インストール⽅法 git clone --recursive https://github.com/toppers/hakoniwa-unity-drone-model.git cd hakoniwa-unity-drone-model/ bash install.bash win • Unity起動 • 起動直後、いくつかエラーが出ますので、リンク先にある⼿順に従って対応ください。 • 対応完了後、コンソール上にエラーログが出⼒されていなければOKです 5
箱庭ドローンのUnityシーン プロジェクトビューのAssets/Scenes/ApiDemoをダブルクリック︕ 【ゲームUI】 シミュレーション 開始ボタン 【ゲームUI】 シミュレーション時間表⽰ 【ゲームUI】 箱庭ドローンの姿勢情報表⽰ 【ゲームUI】 箱庭ドローンのカメラ映像表⽰ 【ゲームオブジェクト】 障害物 【ゲームオブジェクト】 ドローン 【ゲームUI】 箱庭ドローンの位置情報などの表⽰ 【ゲームオブジェクト】 荷物 6
Unityシーンの構成 基本構成︓ • Hakoniwa︓箱庭のゲームオブジェクトを配置 • • • • ENV︓箱庭の環境⽤のオブジェクトを配置 • • • • EventSystem︓Unityイベント監視 FloorKinematics︓床オブジェクト DirectionalLight︓ゲーム世界の光源 Main Camera︓メインカメラ • DroneTransporter︓箱庭・ドローン(変更できません) • • • 箱庭のシミュレーション外でUnityの世界で駆動させるものは、 上記以外の任意の場所に配置してください。 デフォルトでは以下があります。 GUI︓Unityキャンバスを配置し、ゲームUIを実現 Robot︓箱庭シミュレーション対象オブジェクト配置 その他︓ • • Baggage*︓箱庭・荷物 Cube*︓障害物 7
箱庭ドローンのプレハブ 箱庭ドローンシミュレーション⽤のプレハブとして、以下の5種類が⽤意されています。 必要に応じて、形状等をカスタマイズできます。 箱庭・ドローン︓DroneTransporter 配置場所︓Assets/Prefab/Robots 説明︓箱庭のデフォルトのドローンです。Unity シーンに配置できる数は1個のみで、名前は変 更しないでください。 箱庭・荷物︓Baggage 配置場所︓Assets/Prefab/Robots 説明︓箱庭・ドローンのスイッチングマグ ネットホルダーで吸引可能な荷物オブジェ クトです。 スイッチングマグネットホルダー︓Transporter 配置場所︓Assets/Prefab/Robots 説明︓荷物運搬⽤のアセットです。デフォルトで、 DroneTransporterに組み込まれています。 3DLiDAR︓LiDAR 配置場所︓Assets/Prefab/Robots 説明︓障害物検出⽤のセンサです。デフォ ルトで、DroneTransporterに組み込まれ ています。 カメラ︓CameraController 配置場所︓Assets/Model/HakoRoboParts/03_sensor 説明︓任意のタイミングでカメラ撮影可能なセンサです。デフォル トで、DroneTransporterに組み込まれています。 8
箱庭ワールド • カスタマイズできること • 任意の障害物配置・サイズや⾊の変更 • 任意の荷物配置・サイズや⾊の変更 • 任意のキャラクターの配置およびキャラクターの⾃律⾏動 • 任意のロボットの配置およびロボットの⾃律⾏動 • Unityアセットストアのゲームオブジェクトの配置 9
任意の障害物配置・サイズや⾊の変更 • 例︓障害物としてキューブを配置する⽅法 • 成功すると、原点(0,0,0)にCubeが作成されます ので、お好みの場所に移動させます。 • ヒエラルキービューで、右クリックし、 Cubeを選択します • 作成したCubeのInspectorビューを開 いて、Rigidbodyを追加すればOK 10
任意の荷物配置・サイズや⾊の変更 • 例︓箱庭・荷物の⾊を変更する⽅法 • 成功すると、原点(0,0,0)に Baggageが作成されます。 • Mesh RendererのMaterialsがRedに • Baggageプレハブをドラッグして、 • ヒエラルキービューで Hakoniwa直下でドロップ Baggageをクリックして、 Colliderを選択します なっていますが、これをお好みのものに変更 すれば⾊を変えることができます。 • また、Transformの各数値を変更するこ とで、位置や姿勢、サイズを変更できます 11
任意のキャラクターの配置およびキャラクターの⾃律⾏動 • 参考Qiita記事を参照し、任意のキャラクタ を配置できます。 • Unityのキャラクターをキーボード操作できるよ うになるまでにやったこと • ポイント︓ • 参考Qiita記事の⼿順でのキャラクタを、ヒエラル キビューのHakoniwaの下で作成すればOK。 • うまくいったら、参考Qiita記事を「いいね」してくだ さい︕ 12
任意のロボットの配置およびロボットの⾃律⾏動 • ロボットの作成⽅法としては以下の2つの⽅法があります。 • 1. ゲームキャラクタと同じ⽅法で作成する • 2. 箱庭アセットとして作成する • 箱庭アセットとして作成する場合は、以下の資料を参照ください。 • 箱庭(Hakoniwa) Unity • 箱庭のUnity向けの設計・フレームワークを理解する必要があります。 • 箱庭(Hakoniwa) Unity-Asset • 箱庭のUnityロボットの作成⽅法を理解する必要があります。 • 箱庭(Hakoniwa) Python-Asset • 箱庭のUnityロボットをPythonで制御する⽅法を理解する必要があります。 13
Unityアセットストアのゲームオブジェクトの配置 • 例︓ニューヨークの街並みを組み込む⽅法 • Unityアセットストア︓Real New York City Vol. 1 Add To Assetsをクリック 14
Unityアセットストアのゲームオブジェクトの配置 • 例︓ニューヨークの街並みを組み込む⽅法(1/4) • Unityアセットストア︓Real New York City Vol. 1をダウンロード Open in Unity をクリック Download をクリック 15
Unityアセットストアのゲームオブジェクトの配置 • 例︓ニューヨークの街並みを組み込む⽅法(2/4) • Unityアセットストア︓Real New York City Vol. 1をインポート Import をクリック Import をクリック 16
Unityアセットストアのゲームオブジェクトの配置 • 例︓ニューヨークの街並みを組み込む⽅法(3/4) • Unityアセットストア︓Real New York City Vol. 1がインポートされた︕ ニューヨークのアセットがインポートされました︕ 17
Unityアセットストアのゲームオブジェクトの配置 • 例︓ニューヨークの街並みを組み込む⽅法(4/4) • Unityアセットストア︓Real New York City Vol. 1のD&Dと位置調整 NYBlock01をENV配下 にD&Dします NYBlock01のTransformのPosition を調整して、ドローンの初期位置が良い 感じの場所にする X: 600, Y: -40, Z: -370 18
箱庭ドローン • カスタマイズできること • 機体 • 初期配置場所 • サイズや⾊の変更 • プロペラ⾳の設定 • カメラ • 設置位置 • スイッチングマグネットホルダー • 設置位置・サイズ • 形状 • 3DLiDAR • 機能ON/OFF・設置位置等 19
機体︓初期配置場所 • 機体の初期配置は、jsonファイルで定義します。 • 対象リポジトリ︓hakoniwa-px4sim • jsonファイルの場所︓hakoniwa/config/api_sample/drone_config_0.json • 変更場所︓ • compenents/droneDynamics/position_meter • 設定例︓x=5m, y=1m, z= 0m • position_meter": [ 5, 1, 0 ] • 設定例︓φ=0°, θ=0°, ψ= 90° • angle_degree": [ 0, 0, 90 ] • 補⾜︓ • ラジコンコントロールの場合は、 • hakoniwa/config/rc/drone_config_0.json の⽅を変更ください。 20
機体︓サイズや⾊の変更 • 箱庭ドローンのプレハブのDroneTransporterを変更します。 • サイズ︓TransformのScaleを変更します。 • ⾊︓DroneTransporter配下の部品のマテリアルを変更します。 21
機体︓プロペラ⾳の設定 • 機体のプロペラ⾳の設定は、jsonファイルで定義します。 • 対象リポジトリ︓hakoniwa-unity-drone-model • jsonファイルの場所︓plugin/plugin-srcs/drone_config.json • 変更場所︓ • drones/DroneTransporter/audio_rotor_path • 設定例︓spo_ge_doron_tobi_r01.mp3 • file:///E:¥¥project¥¥hakoniwa-unity-drone-model¥¥spo_ge_doron_tobi_r01.mp3 22
カメラ • 箱庭ドローンのプレハブのDroneTransporterを変更します。 • 変更対象ゲームオブジェクト • CameraController • カメラのゲームオブジェクト • 変更⽅法︓ Cameraを所定の場所に 移動させ、⽅向を変更する CameraControllerの位 置を変更して、カメラの場所 を適切な場所にする CameraControllerを選択 23
スイッチングマグネットホルダー︓設置位置・サイズ • 箱庭ドローンのプレハブのDroneTransporterを変更します。 • 変更対象ゲームオブジェクト • Transporter • 変更⽅法︓ Transporterを所定の場所に 移動する Inspectorビューで、相対 位置やサイズを指定する Transporterを選択 24
スイッチングマグネットホルダー︓形状 • 箱庭ドローンのプレハブのTransporterを変更します。 • 変更対象ゲームオブジェクト • MagnetHolder以外 • 荷物を吸引するための機能を持ったゲームオブジェクトであるため、変更しないでください。 • それ以外のもの(Collider配下)は⾃由にカスタマイズすることができます。 ⾃由に変更可能 MagnetHolderは変更しない こと 25
3DLiDAR︓機能ON/OFF・設置位置等 • 3DLiDARの設定は、jsonファイルで定義します。 • 対象リポジトリ︓hakoniwa-unity-drone-model • jsonファイルの場所︓plugin/plugin-srcs/drone_config.json • 変更⽅法詳細はこちらを参照ください。 26
Unityプロジェクトの管理⽅法(1/2) • hakoniwa-unity-drone-model を forkして、⾃分のGitHubリポジトリ で管理することをお勧めします。 リポジトリをフォーク 1. GitHubのWebインターフェースで以下のリポジトリをフォークしてください 2. https://github.com/toppers/hakoniwa-unity-drone-model.git 1. ローカルにクローンします。 2. 1. git clone https://github.com/あなたのユーザ名/hakoniwa-unity-drone-model.git オリジナルのリポジトリを上流リポジトリとして設定します。 3. 1. 2. cd hakoniwa-unity-drone-model git remote add upstream https://github.com/toppers/hakoniwa-unity-drone-model.git オリジナルリポジトリとの同期⽅法(必要な場合) 4. 1. 2. git fetch upstream git merge upstream/main 27
Unityプロジェクトの管理⽅法(2/2) • hakoniwa-unity-drone-modelの変更・追加ファイルの管理⽅法について • 箱庭の管理⽅法としては、対象ファイルを drone 直下に同じディレクトリ構成で 保存管理するようにしています。 • この際、⼿作業でのコピーは⼿間なので、以下のツールで⾃動化しています。 • 対象ファイル︓update_source.bash • もし、このツールの範囲外のファイルを管理したい場合は、このツールを編集して対応ください。 • まっさらのリポジトリからの復旧⽤に復旧ツールも⽤意しています。 • 対象ファイル︓install.bash • もし、このツールの範囲外のファイルを管理したい場合は、このツールを編集して対応ください。 28
注意事項(1/2) • カスタマイズした情報は先のリポジトリで管理することをお勧めします。 • ただし、リポジトリ管理する際には、以下の点を注意してください。 1. Unityアセットストアや第三者の成果物を組み込んだ場合は、 リポジトリ登録しないでください。 • この場合は、README等で、ダウンロード先や組み込み⽅法を⼿順化して公開することをお勧めします。 2. 上記以外で、ファイルサイズが⼤きいデータ(1MB以上)がある場合は、 GitHubのリリースに対象ファイルを配置して、⼿順書やインストーラで ダウロードすることをお勧めします。 • 例︓https://github.com/toppers/hakoniwa-unity-drone-model/releases/tag/v1.4.1 • リポジトリ管理対象外とするファイルの詳細については、 hakoniwa-unity-drone-modelの.gitignore を参照ください。 29
注意事項(2/2) • リポジトリ保存する代表例としては以下があります。 • シーンファイル(拡張⼦︓.unity) • プレハブファイル(拡張⼦︓.prefab) • Unityスクリプト(拡張⼦︓.cs) • Unityマテリアル(拡張⼦︓.mat) • アセット(拡張⼦︓.asset) • アニメーション(拡張⼦︓.anim) • アニメーションコントローラー(拡張⼦︓.controller) • スクリプタブルオブジェクト(拡張⼦︓.asset) • プロジェクト設定ファイル(拡張⼦︓.asset) • metaファイル(拡張⼦︓.meta) 30