В вашем коде есть несколько ошибок.Следующее неверно.
//get cariables from other script
DragonAncors.cs.GetComponent.<DragonTracker>() GoldDragonInit = GoldDragonSpawn;
Правильный способ получить доступ к этому, видя, как вы сказали, DragonAncors является родительским:
GetComponentInParent<DragonTracker>().GoldDragonInit = GoldDragonSpawn;
Это устанавливает логическое значение GoldDragonInit равным значениюGoldDragonSpawn.Это должно быть внутри функции, так как она у вас есть вне функции, я полагаю, вам понадобился этот набор при запуске.Поэтому я поместил его в функцию void Start ().Это вызывается в начале игры (загруженная сцена).
Вам также не нужны точки с запятой;однако после оператора if он должен появляться после каждой строки разностного кода.Код, который вы предоставили, должен выглядеть следующим образом.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Dragons : MonoBehaviour {
// same as GoldDragonInit
bool GoldDragonSpawn = false;
// same number as DragonCount in DragonTrackeer
int LiveDragons;
// same as Difficulty
int DifLev;
void Start()
{
// variables from other script
GetComponentInParent<DragonTracker>().GoldDragonInit = GoldDragonSpawn;
}
System.Random RNG= new System.Random();
void update()
{
RSpawn=RNG.Next(0,2);
DragonType=RNG.Next(0,101);
if (RSpawn = 1)
{
if (LiveDragons > DifLev)
{
if (DragonType > 99)
{
// summon regular dragon
}
if (DragonType = 100)
{
if (GoldDragonSpawn = true)
{
// summon gold dragon
}
}
}
}
}
}
Это работает, потому что DragonTracker - это скрипт в родительском объекте.Если это не так, то GetComponentInParent (). GoldDragonInit = GoldDragonSpawn;будет заменен следующим образом:
[SerializeField]
private GameObject DragonAncors;
void Start()
{
DragonAncors.GetComponent<DragonTracker>().GoldDragonInit = GoldDragonSpawn;
}