この記事の対象者
- Unity入門したい人
- 最初の一歩が踏み出せない人
OSとか環境とか
- Windows 10 Pro
- macOS Mojave
- Unity 2019.2.8f1
- Rider 2019.2.2
補足
- 公式動画にて利用しているのはMacなので、Windowsユーザーはある程度脳内変換して見る事
- 筆者はWindows、Macの両方の環境で確認。Ubuntuとかでは検証してない。
- 基本Unityは英語メニューで利用
- 間違いがあったらツッコミ大歓迎
公式
アイテムの取得
アイテムとプレイヤーが衝突したとき取得する処理を行う
長らく非表示だったプレイヤーオブジェクトを可視化する
PlayerController.csを開き、OnTriggerEnterメソッドで衝突判定を実装する
タグの設定
オブジェクトにTag名をつけて判別する為、準備を行う
現在は「Untagged」になっているので、タグを追加して付与する
Add Tag より「Pick Up」タグを追加する
これでプロジェクトに新たにタグが作成されたので、Pick UpのPrefabに対してタグを設定する
Prefabを利用しているので、ゲーム内の12個のPick Upオブジェクトにも同様のタグが付与される
Colliderに対してトリガーを設定し、衝突検出をOnTriggerEnterメソッドで検出出来るようにする
※何故トリガーを設定する必要があるかは公式動画の9:51~11:51ぐらいまでを見る必要あり
PlayerController.csに衝突判定用のコードを追加する
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.CompareTag("Pick Up"))
{
other.gameObject.SetActive(false);
}
}
このままプレイした際に、しっかりプレイヤーとアイテムが衝突した際にアイテムが非表示になる
しかし、問題点がありUnityは特性上静的Colliderについて領域情報のキャッシュを保持している
本来ならば、静的なのでキャッシュ情報は再計算等が必要なくなるのでとても良いが今回はアイテムが回転するので
毎回キャッシュするのは非常に無駄
ColliderとRigidbodyの両方があるゲームオブジェクトは全て動的と見なされるのでRigidbodyを追加
追加すると動的Colliderとして認識されるが、重力を感じるようになるので床をすり抜けてしまう
その為にIs Kinematicにチェックを付けてオブジェクトを物理演算の影響を受けない様にする