Есть два скрипта, 1 скрипт отвечает за общую логику, второй за поведения врагов. Второй скрипт наследуется от 1.
Хотел сделать так. На экране в рандомном месте появляется enemy, если игрок не успел на него кликнуть и enemy уничтожился то игрок теряет жизнь.
Отрывок из 1 скрита
Синтаксис:
Используется csharp
void GreateEnemy()
{
inst_obj = Instantiate(enemy, new Vector3(0,0,0), Quaternion.identity) as GameObject;
}
private void LifeMenu()
{
double x = 6.44f;
for (int i = 0; i < Misses; i++)
{
Vector3 pos = new Vector3((float)x, 4.56f, -0.03f);
Life_obj[i] = Instantiate(LifeImage, pos, Quaternion.identity) as GameObject;
x -= 1;
}
}
protected void LifeDestroy()
{
Destroy(Life_obj[Misses]);
}
{
inst_obj = Instantiate(enemy, new Vector3(0,0,0), Quaternion.identity) as GameObject;
}
private void LifeMenu()
{
double x = 6.44f;
for (int i = 0; i < Misses; i++)
{
Vector3 pos = new Vector3((float)x, 4.56f, -0.03f);
Life_obj[i] = Instantiate(LifeImage, pos, Quaternion.identity) as GameObject;
x -= 1;
}
}
protected void LifeDestroy()
{
Destroy(Life_obj[Misses]);
}
2 скрипт
Синтаксис:
Используется csharp
using UnityEngine;
public class Enemy : Game {
//Время жизни enemy
private int isLife;
private int isTimeDead = -1;
System.Random rnd = new System.Random();
void Start()
{
System.Random rand = new System.Random();
double x = rand.NextDouble() * (6.72f - (-6.72f)) + (-6.72f);
double y = rand.NextDouble() * (4.37 - (-4.37f)) + (-4.37f);
gameObject.transform.position = new Vector3((float)x, (float)y, 0);
isLife = rnd.Next(2, 7);
InvokeRepeating("DeadEnemy", 0, 0.7f);
}
void OnMouseDown()
{
Score++;
Destroy(gameObject);
}
void DeadEnemy()
{
isTimeDead++;
if(isTimeDead == isLife)
{
Misses--;
LifeDestroy();
Destroy(gameObject);
}
}
}
public class Enemy : Game {
//Время жизни enemy
private int isLife;
private int isTimeDead = -1;
System.Random rnd = new System.Random();
void Start()
{
System.Random rand = new System.Random();
double x = rand.NextDouble() * (6.72f - (-6.72f)) + (-6.72f);
double y = rand.NextDouble() * (4.37 - (-4.37f)) + (-4.37f);
gameObject.transform.position = new Vector3((float)x, (float)y, 0);
isLife = rnd.Next(2, 7);
InvokeRepeating("DeadEnemy", 0, 0.7f);
}
void OnMouseDown()
{
Score++;
Destroy(gameObject);
}
void DeadEnemy()
{
isTimeDead++;
if(isTimeDead == isLife)
{
Misses--;
LifeDestroy();
Destroy(gameObject);
}
}
}
В итоге после самоуничтожения enemy получаю ошибку
NullReferenceException: Object reference not set to an instance of an object
Game.LifeDestroy () (at Assets/Script/Game.cs:89)
Enemy.DeadEnemy () (at Assets/Script/Enemy.cs:33)
89 строка в скрипте Game указывает на функцию LifeDestroy()
33 строка в скрипте Enemy указывает также на вызов функции LifeDestroy()