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
}
您需要获得对附加到Enemy的脚本的引用。然后使用该脚本来操作运行状况。
找到游戏对象。
GameObject g = hit.collider.gameObject;
获取对脚本的引用。
EnemyAI e = g.GetComponent<EnemyAI>();
操纵健康。
e.health = 0f;
如果你想成为坏蛋,就写一行。
hit.collider.gameObject.GetComponent<EnemyAI>().health = 0.0f;
额外提示:health
应该是private
,EnemyAI
应该有一个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();