人工知能に関する断創録

このブログでは人工知能のさまざまな分野について調査したことをまとめています(更新停止: 2019年12月31日)

今日のUnity (2) Rigidbodyの生成

今日のUnity (1) 始めましたのつづき。前回、サンプルとして貼っておいたRigidbodyTestの作り方をまとめておきたい。ちなみに言語はJavaScript。

Create Ballsのボタンを押すとボールが5個ランダム方向に飛び出す。Resetボタンを押すと初期化する。ボールはRigidbodyコンポーネントを追加するだけで物理的な挙動を示す。自分で重力・衝突判定・跳ね返りを実装しなくてよいのでお手軽なのだ!

RigidbodyTest

このプログラムは、

  • Ground (Cube)
  • Ball (Sphere)
  • BallSource (空のGameObject)
  • Main Camera (Camera)
  • Directional light

の5つのオブジェクトでできている。カッコの中がUnityのオブジェクトの種類。以下、要点だけ解説。

地面(Ground)

f:id:aidiary:20140729083315p:plain

  • 大きさは (100, 1, 100)。Unityでは1単位が1メートルらしいので100メートル四方の土地になる。
  • 標準のTerrain Assetsに付いている草原のテクスチャからMaterialを作成して追加。草原っぽく見える!
  • ボールがよく跳ね返るようにPhysics Materialを追加。Bouncinessを0.5に設定。

ボール(Sphere)

f:id:aidiary:20140729083311p:plain

  • サイズは (1, 1, 1)
  • 物理的な挙動をするようにRigidbody(剛体)コンポーネントを追加。質量は1。
  • 色を赤、ShaderにSpecularを設定。少しテカって見える。
  • 地面と同じく、跳ねるようにPhysics Materialを追加。Bouncinessを0.8に設定。
  • ボールはスクリプトで生成するのでPrefab化してシーンから削除。
  • ボールが地面から落ちたときに消えるように以下のスクリプトを追加。


BallSource (GameObject)

f:id:aidiary:20140729083317p:plain

  • 空のゲームオブジェクト。ボールの出現場所として追加した。
  • ボールを生成するスクリプトを追加。

生成するGameObjectをグローバル変数にしておいてツールのInspector上でBall Prefabをセットした。このやり方はよく見る。拡張性はあるのかもしれないけど少し面倒だな・・・スクリプトからどのGameObjectを使うか指定できないのかな?オブジェクト生成はInstantiate()でできた。メニューはGUIクラスで作れる。

Main Camera (Camera)

f:id:aidiary:20140729084042p:plain

  • フィールド全体を映すメインカメラ
  • 背景が青空になるように標準AssetsのSkyboxesをインポートし、Skyboxコンポーネントを追加。Component > Rendering > Skyboxにある。

これだけの情報で再現できるかな?なるべくプログラムの勉強に時間を費やしたいので記事は要点だけさらっと短くしたいなぁ。サンプルはあとでGithubに上げていきたい。