Unity研究所<Unityによるゲーム開発、映像開発>

Unity初心者おやじが綴るゲームで小遣い稼ぎできるようになるまでのブログ

➄扉の開閉、SE発声 その2 扉にプレーヤーが近づいたかどうかの検出を行うコライダーを設定

今回はコライダーの設定を行い、プレイヤーが侵入したかどうかを検知する

f:id:Harukichi:20190816144506g:plain

〇目次

 1 コライダーの設定

 2 スクリプト作成

 3 Animatorウインドウでのイベントの設定方法

 

 

 1 コライダーの設定

f:id:Harukichi:20190818163649p:plain

 プレイヤーの検知用のコライダーを作成する

 扉のオブジェクト自体にコライダーを設定してもよいが、それだと扉の開閉に合わせてコライダーも移動してしまうので、扉の状態ごとに検知範囲が変わってしまう。

 そこで、空のゲームオブジェクトを作成し(上記はDoorMainとしている)、扉のオブジェクトを子オブジェクトとすることにより、上記が回避できる

 コライダーについてはBox Colliderを選択

 大きさについてEdit Colliderを使ってちょうどよい大きさに調整

 Inspctorウインドウ上で、Is Triggerにチェックを入れる(上の図の黄色の箇所)

 これは、コライダー同士が衝突した場合にTrigger(≒きっかけ)としてのみ使用する場合にチェックを入れる

 チェックを入れないと物理演算の作用が発生し、反発しあったりする 

 

 2 スクリプト作成

〇概要

 スクリプトでは下記の二つの制御を行っている

ア プレイヤーがコライダー内に入ったかどうかで扉を開け閉め

イ 扉の開閉動作に合わせて音声を出力

 

 プレイヤーがコライダー内に入ったかどうかで扉を開け閉め

f:id:Harukichi:20190818154114p:plain

7行
 Inspentor上で割り当てるため、GameObjectをpublicにて定義

 

 

14行

 スクリプト自体は親オブジェクトに割り当てられており、Animator自体は扉のオブジェクトに設定されているため、goについてはInspentor上で扉オブジェクトを割り付け、これからAnimatorコンポーネントを取得

  

18~26行

 OnTriggerEnter関数は、設定したコライダー内に他のオブジェクトが入った際に呼び出され、今回は侵入したオブジェクトがPlayerのタグのついているものかを確認し、一致した場合にAnimatorに設定しているパラメーターをSetBool関数を使いtrueに変化させている

 これにより扉が開くアニメーションが再生される

 ただし、その前にDoorOpenの状態を確認し、すでに扉が開いている場合は何もしないようにしている

 

28~37行

 OnTriggerStay関数は、コライダー内にオブジェクトがとどまっているときに呼び出される

 なぜこの処理が必要かというとと、OnTriggerEnterは、オブジェクトが侵入した場合に1回のみ呼び出され、オブジェクトが扉の前に居続けた場合を感知はしない

 通常だとこの後は一定時間後に扉を閉めることになるが、それではオブジェクトが居続けた場合にも扉が閉まってしまうことになるため、この制御が必要なとる

 中身はEnterの時と同じ

 

39~44行

 OnTriggerExit関数は、コライダー内からオブジェクトが出た時に呼び出されるため、このタイミングで扉を閉じるようにする

 ただし、念のため一定時間後に閉じるようにするためInvoke関数を使用している

 

 47~51行

 Invoke関数から呼び出される関数となっており、SetBoolにてfalseをセットして扉を閉じるアニメーションを再生している

 

イ 扉の開閉動作に合わせて音声を出力

 アニメーションに連動したサウンドの出力については、やはりアニメーションの途中の良いタイミングで出力できるのがよい

 Unityでは、Animatorウインドウにてタイミングをイベントとして追加し、割り付けた関数を呼び出すことができるので、これを活用する

 

f:id:Harukichi:20190818160115p:plain

 扉のゲームオブジェクトには上記のスクリプトを追加

 サウンドファイルについては、Inspentor上で割り当てられるようにpublicにて定義

 

 18行、24行については、Animatorウインドウにて設定したイベントのタイミングで呼び出される関数を用意

 

 3 Animatorウインドウでのイベントの設定方法

f:id:Harukichi:20190818161023p:plain

 イベントを発生させたいタイミングで、タイムライン上のフレーム数が表示されているすぐ下を右クリックするとAdd Animation Eventと表示されるのでこれをクリック

 

f:id:Harukichi:20190818161313p:plain

 イベントのマークを選択し、InspectorウインドウのFunctionの箇所に、このイベントが発生したタイミングで呼び出したい関数名を入力する

 

f:id:Harukichi:20190818161534p:plain

扉を閉じるアニメーションについても同様に設定する

 

完成するとこんなイメージになるはず・・・・

f:id:Harukichi:20190818162314g:plain

以上、今回はコライダーの設定、侵入、退出の検出、Animatorでのイベント、呼び出し関数設定の紹介をした

 

どちらも使う頻度は高いと思われるので、いろいろ実験してみてほしい