我试图创建一个火灾脚本。 首先脚本为拍摄位置创建随机的两个数字。并检查位置是否有军队对象或地板对象。 如果有军队物体施加伤害直到摧毁它但是如果有地板物体只是旗子它被射击了,因为我想ai脚本不会第二次射击地板物体。
有一个问题是NullReferenceException:对象引用未设置为对象的实例 错误行GetComponent()。startEnemyFire();
这里是ai fire script
public class EnemyFire : MonoBehaviour {
public int min;
public int max;
public static int enemyDamage=2;
public static bool empty;
void Start(){
empty=true;
}
public void startEnemyFire(){
if(empty==true){
Debug.Log("create Position");
createPosition();
}
if(empty==false){
shot();
}
}
public void createPosition(){
min=Random.Range(0,5);
max=Random.Range(0,5);
shot();
}
void shot(){
Vector2 pos=new Vector3(min,max,0);
RaycastHit2D hit = Physics2D.Raycast ((pos), -Vector2.up);
if(hit.collider != null)
{
GameObject target = hit.collider.gameObject;
if(target.tag=="army"){
target.GetComponent<playerArmyMove>().Damaged(enemyDamage);
empty=false;
Debug.Log("army shoted");
}
if(target.tag=="floor"){
target.GetComponent<FloorScript>().changeSprite(enemyDamage);
Debug.Log("floor shoted");
}
}
}
}
和这里的地板脚本
public class FloorScript : MonoBehaviour {
public Sprite damageSprite;
public bool shot =false;
public int hp=1;
public void changeSprite( int value){
if(shot ==true){
GetComponent<EnemyFire>().createPosition(); //Error is here
}
if(shot ==false){
hp-=value;
if(hp <= 0)
{
GetComponent<SpriteRenderer>().sprite = damageSprite;
shot=true;
}
}
}
}
是否有任何建议我如何修复它或者我应该创建一个数组来保存拍摄位置并检查阵列是否已经创建了位置?
答案 0 :(得分:0)
将EnemyFire
脚本附加到编辑器中附加FloorScript
脚本的相同GameObject。