Unityを学ぼう【第5回】
スクリプト拡張
プレイヤー視点から拡張します
[PlayerController]に以下のコードを追加します
// PlayerController.cs // [trigger]と接触開始時に呼ばれます void OnTriggerEnter(Collider other) { // オブジェクトのタグ判定:[PickUp] if(other.gameObject.tag == "PickUp") { // アクティブ状態設定:無効にします other.gameObject.SetActive(false); } }
[Player]が[PickUp]タグに設定されたオブジェクトと衝突したら
[PickUp]オブジェクトを無効にします
Tips: 上記アイコンを押すとリファレンスに遷移可能
タグ追加と設定
1.[Inspector] -> [Tag] -> [Add Tag...] 2.[Tags]を展開し、[Element] に [PickUp] を入力します 3.[Assets] -> [Prefabs] -> [PickUp] を選択 4.[Inspector] -> [Tag] -> [PickUp]
プレハブから設定すると、
シーンに配置されたオブジェクトも同時に反映します
Trigger有効にする
1.[Assets] -> [Prefabs] -> [PickUp] を選択 2.[Inspector] -> [Box Collider] -> [IsTrigger]をチェック
設定完了したら実行します
アイテムがプレイヤーと接触したらアイテムが消えることを確認できます
静的オブジェクト・動的オブジェクト
Unityの衝突判定では2種類があります
- 静的オブジェクト
- ColliderあるがRigid Bodyなし
- 動的オブジェクト
- Collider・Rigid Body両方ある
静的オブジェクトはColliderにより衝突範囲を計算しキャッシュされます 変化が加えると再計算してキャッシュを更新します Unityにとってこれは重い処理です よく変化するものは動的オブジェクトを使用するのが推奨します
アイテムを動的オブジェクトに
1.[Assets] -> [Prefabs] -> [PickUp] を選択 2.[Inspector] -> [Add Component] -> [Physics] -> [Rigidbody]
このまま実行すると、アイテムが重力の影響で落下してしまうため
以下の設定を加えます
1.[Assets] -> [Prefabs] -> [PickUp] を選択 2.[Inspector] -> [Rigidbody] -> [Use Gravity] のチェックを外す
再び実行&テストします
次回予告:テキスト表示
*1:http://unity3d.com/learn/tutorials/projects/roll-a-ball/collecting-and-counting