В функции spawnEnemy()
вы говорите var enemyClone = Instantiate(...);
.враговый клон - это локальная переменная, которую можно использовать только внутри функции spawnEnemy
, или, по крайней мере, так вы ее написали.
Если вы хотите использовать вражеский клон вне функции spawnEnemy
, вынеобходимо объявить переменную врагиСлоун вне функции.(Пример ниже будет работать, если вы не хотите, чтобы врага-клон был доступен другим GameObjects)
using UnityEngine;
public class spawner : MonoBehaviour
{
public GameObject enemyPrefab;
public float spawnHeight = 0.75f;
private GameObject enemyClone //Added to allow enemyClone to be used anywhere in the class
// Start is called before the first frame update
void Start()
{
spawnEnemy();
}
// Update is called once per frame
void Update()
{
if (enemyClone.transform.position.y < -10)
{
Destroy(enemyClone);
spawnEnemy();
}
}
public void spawnEnemy()
{
var enemyPosition = new Vector3(Random.Range(-5, 5), spawnHeight, Random.Range(-5, 5));
enemyClone = Instantiate(enemyPrefab, enemyPosition, Quaternion.identity);
}
}
Теперь, если вы хотите, чтобы врага-клон был доступен другим GameObjects, вам нужно сделать enemyClone
переменная public
вместо private
.Если вы не хотите, чтобы он отображался в инспекторе, добавьте [HideInInspector]
над объявлением врага-клона, как показано ниже:
[HideInInspector]
public GameObject enemyClone;
Ваша проблема основана на scope
.Возможно, вы захотите исследовать это, важно знать.
Область действия переменной определяет ее видимость для остальной части программы.
http://www.blackwasp.co.uk/CSharpVariableScopes.aspx http://www.informit.com/articles/article.aspx?p=1609145&seqNum=4