Don';我不知道如何对付敌人;s的健康状况

本文关键字:敌人 健康 我不知道 Don | 更新日期: 2023-09-27 18:27:02

我有这个代码,我不知道为什么hit.collider.gameObject.GetComponent("health")返回空

void Shoot() {
        Vector2 mousePosition = new Vector2 (Camera.main.ScreenToWorldPoint (Input.mousePosition).x, Camera.main.ScreenToWorldPoint (Input.mousePosition).y);
        Vector2 firePointPosition = new Vector2 (firePoint.position.x, firePoint.position.y);
        RaycastHit2D hit = Physics2D.Raycast (firePointPosition, mousePosition - firePointPosition, bulletRange, whatToHit);
        if (Time.time >= timeToSpawnEffect) {
            Effect ();
            timeToSpawnEffect = Time.time + 1/effectSpawnRate;
        }
        if (hit.collider != null) {
            if (hit.collider.name == "Enemy") {
                Debug.Log(hit.collider.gameObject.GetComponent("health"));
            }
            //Debug.Log("We hit " + hit.collider.name + " and did " + damage + " damage");
        }
    }

这是我的敌方脚本

using UnityEngine;
using System.Collections;
public class EnemyAI : MonoBehaviour
{
    public float health = 100f;
    //... rest of the code
}

Don';我不知道如何对付敌人;s的健康状况

您需要获得对附加到Enemy的脚本的引用。然后使用该脚本来操作运行状况。

找到游戏对象。

 GameObject g = hit.collider.gameObject;

获取对脚本的引用。

 EnemyAI e = g.GetComponent<EnemyAI>();

操纵健康。

 e.health = 0f;

如果你想成为坏蛋,就写一行。

 hit.collider.gameObject.GetComponent<EnemyAI>().health = 0.0f;

额外提示:health应该是privateEnemyAI应该有一个setter和一个getter。

您正在使用Unity,不是吗?从您提供的代码来看是这样的。GetComponent()是一个返回对游戏对象组件的引用的方法。这些是您在编辑器中拖动到游戏对象上的内容。像长方体对撞机和刚体。您编写的代码不会返回任何内容,因为Unity中没有名为"健康"的游戏组件。要获取敌人的生命值,您需要设置一个对控制敌人的脚本的引用,并从中获取其生命值。

但是,您必须获得附加到GameObject的脚本的引用。为此,您需要使用以下代码。

GameObject target;

然后在你的射击方法中,你更新了对目标的参考。

if(hit.collider.gameObject != target) 
{
    target = hit.collider.gameObject.GetComponent<EnemyAI>();
}

我在它周围放了一个if()语句的原因是,如果目标还没有改变,就不会用GetComponent请求重载CPU。

从这里开始,您只需使用之类的东西来更改值

target.value = newValue;
target.SomeFunction();