不知道如何获得敌人的健康

时间:2014-10-20 01:07:34

标签: c# unity3d

我有这段代码而且我不知道为什么hit.collider.gameObject.GetComponent("health")返回null

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
}

3 个答案:

答案 0 :(得分:3)

您需要获取对敌人附加脚本的引用。然后使用该脚本来操纵健康状况。

找到GameObject。

 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。

答案 1 :(得分:0)

你使用Unity不是吗?它看起来就像你提供的代码一样。 GetComponent()是一个返回对游戏对象组件的引用的方法。这些是您在编辑器中拖动到游戏对象上的内容。像Box-Colliders和Rigidbodys这样的东西。您编写的代码不会返回任何内容,因为Unity中没有称为“运行状况”的游戏组件。为了获得敌人的健康,你需要建立一个对控制敌人的脚本的引用,并从中获取其健康值。

答案 2 :(得分:0)

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

GameObject target;

然后在拍摄方法中更新目标的参考。

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

我在其周围放置一个if()语句的原因是,如果目标尚未更改,则不会使用GetComponent请求重载CPU。

从这里开始,您只需使用

等内容来更改值
target.value = newValue;
target.SomeFunction();