Unity++blog.

UnityやC#とかについて学習したことを書いてます

子要素のスクリプトからPlayerのコンポーネントを操作

昨日の鉄球トラップGIF

f:id:nabesi777:20181003234000g:plain

 

nabesi777.hatenablog.com

 

昨日は鉄球に当たるとダメージアニメーションを呼び出す方法がGIFのようにうまくいきませんでした。原因はのOnControllerColliderHitで、Player側から向かっていく時のみ当たり判定がでるメソッドのようです。

 

今回は別の方法を試してみました。

空オブジェクトを作成(名前はcol)して、Playerの子要素とします。その空オブジェクトへRigidbodyとCapsuleColliderを付けて、以下のスクリプトをアタッチします。

 

短いのでそのまま貼ります。


public class Trapcol : MonoBehaviour
{//インスペクターにPlayerを格納
public Animator anim;


//当たり判定OnControllerColliderHitOnCollisionEnter
void OnTriggerEnter(Collider collider)
{//トラップタグをもつオブジェクトへ当たった時
if (collider.gameObject.CompareTag("Trap"))
{
anim.Play("Dameged", -1, 0.0f);
}

 

これは親要素のAnimatorを取得して、Trapタグのあるゲームオブジェクトと当たった時はダメージアニメーションを再生するという内容です。

 

インスペクター欄は以下のように設定しました。空オブジェクトのTransformは0にして、IsTriggerにチェックを入れています。またCapsuleColliderの大きさはキャラクターの大きさに合わせています。

 

f:id:nabesi777:20181003235218j:plain

 

この設定で鉄球とうまく当たり判定がとれ、Playerのアニメーションが再生されました。

f:id:nabesi777:20181003235603g:plain

 

しかしアニメーションだけの再生なので、転げている時も矢印を押すと動いてしまいます。いろいろ試してみましたが上手くいかないため現在質問中です・・

 

 最近はUnityでVRを作る基本的なことを勉強中なので、からくり屋敷はぼちぼち進めて行こうと思います。