C#Unity3dのモンスターが一定範囲内を巡回し、プレイヤーが自動的に追跡して攻撃してくるのを発見し、血液量が30%以下になると自動的に3メートル下がってゆっくりと血液を返すコードと使い方

コード: 

using UnityEngine;

public class Monster : MonoBehaviour
{
    public Transform player;
    public float patrolRange = 10f;
    public float moveSpeed = 2f;
    public float attackRange = 2f;
    public float attackInterval = 2f;
    public float jumpBackDistance = 3f;
    public float healInterval = 5f;
    public float healAmount = 10f;
    public float healSpeed = 1f;

    private Animator animator;
    private Rigidbody rigidbody;
    private bool isDead = false;
    private bool isAttacking = false;
    private bool isHealing = false;
    private float currentHealth;
    private float lastAttackTime = 0f;
    private float lastHealTime = 0f;

    private void Start()
    {
        animator = GetComponent<Animator>();
        rigidbody = GetComponent<Rigidbody>();
        currentHealth = 100f;
    }

    private void Update()
    {
        if (isDead)
        {
            return;
        }

        float distance = Vector3.Distance(transform.position, player.position);

        if (distance <= attackRange)
        {
            if (Time.time - lastAttackTime >= attackInterval)
            {
                isAttacking = true;
                animator.SetBool("isAttacking", true);
                lastAttackTime = Time.time;
            }
        }
        else if (distance <= patrolRange)
        {
            Vector3 direction = (player.position - transform.position).normalized;
            transform.LookAt(player);
            transform.position += direction * moveSpeed * Time.deltaTime;

            if (!isAttacking)
            {
                animator.SetBool("isWalking", true);
            }
        }
        else
        {
            if (!isAttacking)
            {
                animator.SetBool("isWalking", false);
            }
        }

        if (currentHealth <= 30f && !isHealing)
        {
            isHealing = true;
            animator.SetBool("isHealing", true);
            lastHealTime = Time.time;
        }

        if (isHealing && Time.time - lastHealTime >= healInterval)
        {
            currentHealth += healAmount * Time.deltaTime * healSpeed;

            if (currentHealth >= 100f)
            {
                currentHealth = 100f;
                isHealing = false;
                animator.SetBool("isHealing", false);
            }
        }
    }

    public void TakeDamage(float damage)
    {
        if (isDead)
        {
            return;
        }

        currentHealth -= damage;

        if (currentHealth <= 0f)
        {
            isDead = true;
            animator.SetBool("isDead", true);
            rigidbody.isKinematic = true;
            Destroy(gameObject, 3f);
        }
        else if (currentHealth <= 30f && !isHealing)
        {
            isHealing = true;
            animator.SetBool("isHealing", true);
            lastHealTime = Time.time;
        }
    }

    public void Attack()
    {
        float distance = Vector3.Distance(transform.position, player.position);

        if (distance <= attackRange)
        {
            Player playerScript = player.GetComponent<Player>();

            if (playerScript != null)
            {
                playerScript.TakeDamage(10f);
            }
        }
    }

    public void JumpBack()
    {
        Vector3 direction = (transform.position - player.position).normalized;
        transform.position += direction * jumpBackDistance;
    }
}

手順:

Unity で空のオブジェクトを作成し、そのオブジェクトをモンスターの親にし、次にモンスターのモデルを子にして、スクリプト Monster を子に追加します。
Unity でプレーヤー オブジェクトを作成し、スクリプト Player をオブジェクトに追加します。
Monster スクリプトで、親オブジェクトの Transform コンポーネントをプレーヤー変数に割り当てます。
Monster スクリプトでは、patrolRange、moveSpeed、 AttackRange、 AttackInterval、JumpBackDistance、healInterval、healAmount、healSpeed などのさまざまなパラメータの値を必要に応じて調整します。
Monster スクリプトで、TakeDamage() メソッドを実装します。このメソッドは、攻撃されたときにモンスターの体力を減らすために使用されます。
Player スクリプトで、TakeDamage() メソッドを実装します。これは、攻撃されたときにプレイヤーの体力を減らすために使用されます。
Monster スクリプトでは、Monster が攻撃したときにプレイヤーにダメージを与えるために使用される Attack() メソッドを実装します。
Monster スクリプトで、JumpBack() メソッドを実装します。このメソッドは、モンスターの HP が 30% 未満のときに 3 メートル後方にジャンプするために使用されます。
Monster のアニメーション コントローラーで、4 つのブール パラメーター isWalking、is Attacking、isHealing、isDead を作成し、対応するステート マシンと遷移を作成します。
ゲームを実行し、モンスターのパトロール、追跡、攻撃、血液回復機能をテストします。

おすすめ

転載: blog.csdn.net/WMcsdn11124/article/details/130338963