code VR

Unity×VR(99)

スポンサーリンク

//tips

//eventtriggerを使用したダメージ判定

アタックモーション時にisTriggerをつけたコライダーをオンにすることでダメージを相手に与える。

Rabbitの右足にコライダーを設置し、足のアタックモーションにあったコライダーの位置調整を行う。

HPスクリプトの下記のように受けて側で接触感知を行おうと考えたが、攻撃手段が増えると全てのパターンの接触反応を受けて側に記述しなければいけないことになるので、攻撃側での接触感知の方法を考えていく。

private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Weapon")
{
Debug.Log("hit Player");

Debug.Log("hit Damage");
hp -= other.gameObject.GetComponent<rodManager>().powerEnemy;

//hp -= other.gameObject.GetComponent<rodManager>().powerEnemy;
}

//体力が0以下になった時{}内の処理が行われる
if (hp <= 0)
{
Destroy(gameObject); //ゲームオブジェクトが破壊される
}
}

修正した下記をRabbit本体にアタッチし、右足にアタッチしたEventTriggerコンポーネントにPointerEnter型の接触感知をさせ、感知した場合にOnTriggerEnterメソッドを行わせる。
※EventTriggerコンポーネントは間違い

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RabbitAtackManager : MonoBehaviour
{
public float powerEnemy = 1; //攻撃力

HPScriptE hPScriptE;

[SerializeField]
GameObject ParentObject;

Public void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Player"&& other.gameObject != ParentObject)
{
hPScriptE = other.gameObject.GetComponent<HPScriptE>();

hPScriptE.hp -= powerEnemy;

if (hPScriptE.hp <= 0)
{
Destroy(other.gameObject); //ゲームオブジェクトが破壊される
}
}
}
}

次にEnvPlaymove4スクリプト に挿入したAttackmotionメソッドで右足のコライダーの表示/非表示の切り替えを行う。アニメーションの開始地点と終了地点でコライダーの切り替えを行いたいのでコルーチンを使用し、アクション開始時にコンポーネントをオンにし、アクションを終了する際にオフにするコードを追加した。

public void Attackmotion()
{
animator.SetTrigger("Attack1");
StartCoroutine("WaitAnimationfin");
}

IEnumerator WaitAnimationfin()
{
rightfootcollider = GetComponent<Collider>();
rightfootcollider.enabled = true;

var state = animator.GetCurrentAnimatorStateInfo(0);
yield return new WaitWhile(() => state.IsName("bk_rh_right_A"));

rightfootcollider.enabled = false;
}

こうするとRabbitオブジェクト自体が自由落下してしまい、rightfootcolliderの取得コンポーネントがきちんと足になっていなかったのでCollider rightfootcollider = rightfoot.GetComponent<Collider>();として設定しなおした。

一旦decoyに対してダメージを与えてみる。decoyスクリプトにhpの記述をしているのでそちらに参照を一部変更。そして、足にアタッチしているコライダーはオフにしておく。

なぜか足のコライダーコンポーネントがオンにならないので色々と模索していたら、ボタン連打したらオンになった。これはアクション動作が早すぎるためオンオフ動作が一瞬となり表示が読み込まれる前に非表示処理の段階に移っているしまっているのかもしれない。

まずコライダーのチェックをオンにしたままアクションさせてみたがこれでも機能しない。ここで、OnTriggerEnterとeventtriggerを混同していることに気づく。

3dのコライダーのistriggerの接触を感知する場合は、OnTriggerEnter関数を使用する。2dのマウスボタンの位置などに反応させるeventtriggerとは全く異なる。

Rabbitattackmanagerを足オブジェクトに移動させ、private void OnTriggerEnter(Collider other)を足の領域に入ることで発動させるようにした。

アニメーションの遷移時間にはyield return new WaitForSeconds(1);を利用して攻撃判定の残存時間を長くすることで、コライダーのオンオフも確認できた。

一回の攻撃で2度のダメージが入っているのでそこも修正する。

人気の記事

1

コロナによる需要変化 コロナパンデミックの影響で、人々は外に出られなくなり、自宅で過ごす時間が増えました。 この自粛ムードの中、下記のようなビジネスの需要変化が引き起こされています。 【利用者減少】 ...

2

米国レストランの決済時に毎日お世話になっていた「Square」のビジネスモデルについて本日はふれていきたいと思います。 「Square」とは、ネットにつながったモバイル端末と専用のカードリーダーを用意 ...

3

無料でネットショップを開けるアプリとして多くの人に驚きを与えたBASE株式会社が、2019年10月25日東証マザーズに上場しました。2020年2月時点で90万店を超えるショップを抱えるまでに成長してい ...

4

2011年にサービスを開始してから圧倒的な成長率を誇るインテリア通販サイト 【FLYMEe/フライミー】を皆さんご存じでしょうか。 「自分のイメージするインテリア、本当に欲しいインテリアがどこにあるの ...

5

ナイキのSNKRSが、なぜこれほどまでに人気なのか?調べてみました。 きっかけは米国での友達との会話。彼は自分のシューズをみせて、「これ20万円もしたんだぜ。」と語ってくれました。 あまり靴に興味がな ...

-code, VR
-,

Copyright© BUSINESS HACKER , 2021 All Rights Reserved Powered by AFFINGER5.