Я студент игрового дизайна, и в качестве моей последней работы наш профессор попросил нас сделать простую игру, основанную на историческом событии нашей страны.Я выбрал постройку статуи Христа-Искупителя.Правило проекта состояло в том, что мы могли использовать только 4 цвета, поэтому я решил сделать игру, основанную на «Саймон Сэйс».
По сути, так как вы получаете правильную последовательность кнопок, частей статуипостроены.Это готово и работает.Чтобы придать остроту вещам я, я подумал, что было бы неплохо активировать несколько прожекторов под статуей, которые подсвечиваются в соответствии с их цветами на Саймонсе.Таким образом, если зеленая кнопка на Simon Says загорается, зеленый прожектор должен воспроизводить анимацию (или включать и выключать в ближайшее время) и т. Д.
Это кажется сложной задачей, поскольку кнопки воспроизводятся случайным образом,К сожалению, после нескольких дней попыток я не могу заставить это работать через триггеры, анимацию и т. Д. Я без конца пытался смотреть на youtube и google.Кто-нибудь может дать мне путеводную лампу?
https://imgur.com/a/59snC1a (я оставил свет включенным, чтобы лучше понять свою концепцию).
Я пытался сделать отдельные сценарии на лампах иотправив им сообщение для воспроизведения анимации.Я попытался активировать и деактивировать игровой объект, прикрепив подсветку к кнопкам (при нажатии включается / выключается подсветка)
[DisallowMultipleComponent]
[RequireComponent(typeof(AudioSource))]
public class Button : MonoBehaviour
{
public int ButtonIndex { get; set;}
[SerializeField] Color defaultColor;
[SerializeField] Color highlightColor;
[SerializeField] float resetDelay = .25f;
[SerializeField] GameManager gm;
AudioSource sound;
private void Awake()
{
sound = GetComponent<AudioSource>();
}
private void Start()
{
ResetButton();
}
private void OnMouseDown()
{
gm.PlayerPick(ButtonIndex);
PressButton();
}
public void PressButton()
{
sound.Play();
GetComponent<MeshRenderer>().material.color = highlightColor;
Invoke("ResetButton", resetDelay);
}
void ResetButton()
{
GetComponent<MeshRenderer>().material.color = defaultColor;
}
}
public class GameManager : MonoBehaviour
{
[SerializeField] Button[] button;
[SerializeField] PlayMenu playmenu;
[Header("Color Order")]
[SerializeField] List<int> ButtonOrder;
[SerializeField] float pickDelay = .4f;
[SerializeField] int pickNumber = 0;
[SerializeField] Score score;
AudioSource Musica;
void Start()
{
ResetGame();
SetButtonIndex();
}
void SetButtonIndex()
{
for (int cnt = 0; cnt < button.Length; cnt++)
button[cnt].ButtonIndex = cnt;
}
public void StartGame()
{
score.GameStarted();
StartCoroutine("PlayGame");
}
public IEnumerator PlayGame()
{
pickNumber = 0;
yield return new WaitForSeconds(pickDelay);
foreach (int colorIndex in ButtonOrder)
{
button[colorIndex].PressButton();
yield return new WaitForSeconds(pickDelay);
}
PickRandomButton();
for (int cnt = 0; cnt < 0; cnt++)
{
yield return new WaitForSeconds(pickDelay);
PickRandomButton();
}
}
void PickRandomButton()
{
int rnd = Random.Range(0, button.Length);
button[rnd].PressButton();
ButtonOrder.Add(rnd);
}
public void PlayerPick(int pick)
{
Debug.Log("Jogador pickou"+ pick);
if (pick == ButtonOrder[pickNumber])
{
Debug.Log("Acertou");
pickNumber++;
if (pickNumber == ButtonOrder.Count)
{
score.Set(pickNumber);
//colocar score aqui no futuro
StartCoroutine("PlayGame");
}
}
else
{
Debug.Log("Errou");
ResetGame();
playmenu.Activate();
}
}
void ResetGame()
{
Debug.Log("Recomecar o jogo");
ButtonOrder.Clear();
score.Set();
score.Restart();
}
}
Со всем, что я пробовал, игра все равно будет играть,хотя кнопки становятся невыбираемыми, поэтому невозможно продолжать игровой процесс.(и свет не включится)