17.2K Views
August 19, 22
スライド概要
2022/08/19にG's ACADEMYにて実施した講座の資料
可視化技術や人間計測/空間計測技術を活用した問題解決に関する研究開発。 ARコンテンツ作成勉強会(tryAR)を主催。
Unity⼊⾨ハンズオン
⾃⼰紹介 ⽒名︓吉永崇(Takashi Yoshinaga) 専⾨︓ARを⽤いた医療⽀援や運動計測 Volumetric Video コミュニティ︓ARコンテンツ作成勉強会 主催
ARコンテンツ作成勉強会の紹介 p 2013年5⽉に勉強会をスタート。 p ARコンテンツの作り⽅をハンズオン形式で学ぶ p ⼈数は5~10名程度の少⼈数で実施 p 参加条件はAR/VRに興味がある⼈(知識不要) p 各地で開催 (福岡、熊本、宮崎、⻑崎、⼤分、 ⿅児島、⼭⼝、広島、札幌、関東)
Twitterと勉強会ページで情報を発信しています @AR_Fukuoka Googleで「AR勉強会」で検索
ハッシュタグ #AR_Fukuoka
Unity Hub起動 Unity Hub
プロジェクトの作成 (1/6) ①Projects ②New Project
プロジェクトの作成 (2/6) ここをクリック
プロジェクトの作成 (3/6) 2021.3.X
プロジェクトの作成 (4/6) 3D
プロジェクトの作成 (5/6) プロジェクト名(例: AR_Test) 保存場所 Create Project
プロジェクトの作成 (6/6) Unity Editorが起動すればOK
Unity Editorの概要 Sceneタブ オブジェクトの一覧 オブジェクトの配置を行う プロジェクト内のフォルダやファイルの一覧
オブジェクトを追加 何も選択していない状態で Hierarchyの空⽩を右クリック
オブジェクトを追加 ①3D Object ②Cube
オブジェクトを追加 Cubeが追加される
オブジェクトを追加 カメラから⾒た視界を確認しよう
動作確認 Playボタン
動作確認 カメラ視点に切り替わる
動作確認 再度Playボタンをクリックして停⽌
注意︕︕ Unityでは実⾏状態でも編集ができますが、 実⾏を⽌めると編集内容は全て破棄されます。 必ず動作を⽌めてから編集に戻ること︕
Next Step オブジェクトの位置・⾓度・サイズを変更しよう
オブジェクトの位置・⾓度・サイズの設定① Cube
オブジェクトの位置・⾓度・サイズの設定① 移動/回転/伸縮 移動 回転 伸縮
Sceneの視点変更 [←][→]: 左右移動 [↑][↓]: 前後移動 Alt/option + ドラッグ: 回転
オブジェクトの位置・⾓度・サイズの設定② Cube
オブジェクトの位置・⾓度・サイズの設定② Inspector (≒選択オブジェクトの詳細)
オブジェクトの位置・⾓度・サイズの設定② 下記の通りセット Position 0 5 0 Rogation 0 0 0 Scale 1 1 1
オブジェクトの位置・⾓度・サイズの設定② 設定によってはCubeが⾒えなくなるかも
オブジェクトの位置・⾓度・サイズの設定② Cubeをダブルクリック
オブジェクトの位置・⾓度・サイズの設定② Cubeが画⾯中央に
オブジェクトの位置・⾓度・サイズの設定② [↓]キーで少し離れた視点で観察
オブジェクトの位置・⾓度・サイズの設定② カメラとの位置関係が⾒やすくなる
Next Step オブジェクトの⾊を変更しよう
⾊の設定について Cube
⾊の設定について Inspector (≒詳細情報) Mesh Rendereに注⽬
⾊の設定について Materialsを開く デフォルト⾊を設定済みの Default-Materialが 割り当てられている ※Unityではマテリアルで⾊や質感を設定
⾊の設定について Inspectorの⼀番下で マテリアルの詳細を確認できるが Default-Materialは編集不可
⾊の設定について 編集可能なマテリアルを作成しよう︕
マテリアルの作成 Project Assets
マテリアルの作成 空⽩を右クリック
マテリアルの作成 ①Create ②Material
マテリアルの作成 New Materialというファイルができる
マテリアルの適⽤ Cubeをクリック
マテリアルの適⽤ MeshRenderer Materials内の Default-Materialを⾒つけておく
マテリアルの適⽤ Default-Materialの上に ドラッグ&ドロップ New Materialに注⽬(クリックしない)
マテリアルの適⽤ New Materialに差し代わる ▷をクリックして詳細を開く
マテリアルの適⽤ Albedo横の□をクリック
マテリアルの適⽤ ⾊を選択 (選択が終わったら閉じる)
Next Step オブジェクトの新たな詳細情報を追加しよう 例︓物理法則の適⽤
挙動の追加 Cube Add Component
挙動の追加 Add Componentを使うと デフォルトでは設定されていない詳細情報を 追加することができる
挙動の追加 Physics
挙動の追加 Rigidbody
挙動の追加 Rigidbodyが追加されている Use Gravityがオンだと 重⼒の影響を受けるようになる
動作確認 Play
動作確認 落下する
動作確認 再度Playで停⽌
Next Step オブジェクト間の⼲渉
オブジェクトの追加 Hierarchyの空⽩を右クリック
オブジェクトの追加 3D Object Plane
オブジェクトの追加 板が追加される
オブジェクトの追加 Plane
オブジェクトの追加 Positionを0 0 0
オブジェクトの追加 回転モードを選択
オブジェクトの追加 カメラの⽅に少し傾ける
動作確認 Cubeが転げ落ちる
Next Step C#スクリプト記述でインタラクションを実現しよう 例︓画⾯クリック・タップ
マウスクリック・画⾯タップ検知 Hierarchyの 空⽩を右クリック
マウスクリック・画⾯タップ検知 Create Empty
マウスクリック・画⾯タップ検知 ClickObjectに名前を変更 ※名前はなんでもOK
マウスクリック・画⾯タップ検知 Add Component
マウスクリック・画⾯タップ検知 検索欄を空にする New script
マウスクリック・画⾯タップ検知 Script名をClickScriptに変更 ※名前は何でもOK Create and Add
マウスクリック・画⾯タップ検知 ClickScriptが追加されている
マウスクリック・画⾯タップ検知 Assets ClickScriptをダブルクリックで開く
マウスクリック・画⾯タップ検知 public class ClickScript : MonoBehaviour { // 初期化のために1度だけ実⾏される void Start() { } // 毎フレーム実⾏される void Update() { } }
マウスクリック・画⾯タップ検知 // 初期化のために1度だけ実⾏される void Start() { } // 毎フレーム実⾏される マウス押下をチェック void Update() { if (Input.GetMouseButtonDown(0)) { Debug.Log("Click!"); } }
Ctrl/Command + S で保存
マウスクリック・画⾯タップ検知 Console
動作確認 Playボタン
動作確認 画⾯クリック 結果が表⽰される
動作確認 再度Playボタン クリックで停⽌
Next Step オブジェクトを動的に⽣成しよう 例︓画⾯クリックでCubeを投げる
クリックしたらBoxを⽣成 Hierarchyに置かれたCubeは既に空間に存在 → そうではなく画⾯クリック時に空間に登場させたい
クリックしたらBoxを⽣成 Project
クリックしたらBoxを⽣成 Cube
クリックしたらBoxを⽣成 Assetsの中にドラッグ&ドロップ Assets
クリックしたらBoxを⽣成 物理が適⽤されたCubeに関する 情報を持ったファイルができる
クリックしたらBoxを⽣成 この情報をもとにスクリプトから Cubeを空間に登場させる
クリックしたらBoxを⽣成 //Unityエディタ内のオブジェクトと変数を関連づける [SerializeField] GameObject cube; void Start() { } // 毎フレーム実⾏される void Update() { if (Input.GetMouseButtonDown(0)) { Debug.Log("Click!"); } }
クリックしたらBoxを⽣成
// 毎フレーム実⾏される
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Debug.Log("Click!");
//Unity空間に箱を⽣成
GameObject obj = GameObject.Instantiate(cube);
//視点を設定するカメラを取得
Camera cam = Camera.main;
//箱の初期位置をカメラの位置に設定
obj.transform.position = cam.transform.position;
//箱に⼒を加えて⾶ばす(引数︓⼒ x ⽅向, ⼒の種類)
obj.GetComponent<Rigidbody>().AddForce(
10 * cam.transform.forward, ForceMode.Impulse);
}
}
Ctrl/Command + S で保存
クリックしたらBoxを⽣成 ClickObject
クリックしたらBoxを⽣成 ClickScript内、Cubeの横の ボックスにドラッグ&ドロップ Cubeに注⽬ (クリックしない)
動作確認 Playボタン
動作確認 Cubeが発射される
動作確認 再度Playボタン クリックで停⽌
Next Step 遅延処理を実現しよう 例︓Cubeを数秒後に削除
Cubeの⾃動削除 Cube
Cubeの⾃動削除 Add Component
Cubeの⾃動削除 New script
Cubeの⾃動削除 スクリプト名を AutoDestroy Create and Add
Cubeの⾃動削除 AutoDestroyが Cubeに追加される
Cubeの⾃動削除 AutoDestroyを ダブルクリックで開く
Cube削除コルーチンの記述と呼び出し public class AutoDestroy : MonoBehaviour { void Start() { StartCoroutine(DestroyWithDelay()); } IEnumerator DestroyWithDelay() { //10秒後に⾃分⾃⾝を抹消 yield return new WaitForSeconds(10); Destroy(gameObject); } } void Update() { }
Ctrl/Command + S で保存
動作確認 Playボタン
動作確認 ⼀定時間後にCubeが消えていく
動作確認 再度Playボタン クリックで停⽌
完成︕