【Unity】跳弾のダメージを小さくする

投稿者: | 2020-07-30

発射した弾がどこかに当たるたびに、その後敵に当たったときのダメージを小さくしてみます。

敵の体のボーンに付けたスクリプトで、インスペクタで設定したダメージと弾の威力をかけて、実際に敵が受けるダメージを計算します。跳ねるたびに弾の威力の値を下げることでダメージを小さくします。

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

public class BulletScript : MonoBehaviour
{
    public float[] power;

    // Start is called before the first frame update
    void Start()
    {
        power = new float[2] { 1f,1f};
    }

    private void OnCollisionEnter(Collision collision)
    {
        power[1] = power[0];
        power[0] *= 0.5f;
    }
}

弾のスクリプトでは、弾が衝突したときに威力を半分にしています。威力は要素数2の配列になっていて、衝突すると、2番目の値に最初の値を代入してから、最初の値を半分にします。

そして、敵のダメージ計算には2番目の値を使います。最初の値を使うと、弾が直接敵に当たったときも威力が半分になってしまいます。

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

public class EnemyBodyScript : MonoBehaviour
{
    AgentAttackTest sc_agent;
    [SerializeField][Range(0f,1f)] float damage = 0.1f;

    private void Start()
    {
        sc_agent = transform.root.GetComponent<AgentAttackTest>();
    }

    private void OnCollisionEnter(Collision collision)
    {

        if (collision.collider.tag == "Weapon" && collision.collider.gameObject != sc_agent.collidedObject)
        {
            float d = damage;
            
            BulletScript b = collision.gameObject.GetComponent<BulletScript>();

            if (b)
            {
                d *= b.power[1];
            }

            sc_agent.SetHP(-d);
            sc_agent.collidedObject = collision.collider.gameObject;
            sc_agent.Display(d, gameObject.name);
        }
    }

    private void OnTriggerEnter(Collider other)
    {
        if (other.tag == "Weapon")
        {
            sc_agent.SetHP(-damage);
            sc_agent.collidedObject = other.gameObject;

        }
    }
}

武器に銃弾のスクリプトが付いていないときは、衝突時のGetComponentの値はNullになるので、インスペクタのダメージの値がそのまま使われます。

GIF画像では、直接当たるとダメージは0.2、1回跳ねた跳弾のダメージは0.1、2回跳ねると0.05と、跳ねるたびにダメージが半分になっています。

コメントを残す

メールアドレスが公開されることはありません。