Saya membuat game edukasi anak. Saya memiliki 20 panel pertanyaan. Jika dijawab dengan benar, tombol A diaktifkan. Jika diklik Tombol, panel berikutnya harus aktif dan panel aktif terakhir harus dinonaktifkan. Ini harus terjadi dengan semua 20 panel.

Kodenya adalah sebagai berikut:

public class PanelChanger : MonoBehaviour
{
    public GameObject nextButton;
    public GameObject[] QuestionsPanel;
    public GameObject wellDonePanel;

    // Start is called before the first frame update
    public void Start()
    {

        QuestionsPanel[Random.Range(0, QuestionsPanel.Length)].SetActive(true);
    }

    // Update is called once per frame
    void Update()
    {
   
    }

   ...

Di sini saya ingin menempatkan kode untuk mengaktifkan panel berikutnya dan menonaktifkan panel aktif. Dalam kode ini saya dapat Mengatur panel acak aktif, tetapi tidak dapat menonaktifkan panel saat ini.

enter image description here

    ...
  
    public void ShowNextQuestion()
    {
        wellDonePanel.SetActive(false);
        QuestionsPanel[Random.Range(0, QuestionsPanel.Length)].SetActive(true);
        
    }
}
-1
Sharad 7 April 2021, 18:54

1 menjawab

Jawaban Terbaik

Simpan panel saat ini di bidang

private GameObject currentPanel;

Dan selalu lakukan

// If a previous panel exists deactivate it
if(currentPanel) currentPanel.SetActive(false);

// Store the new panel
currentPanel = QuestionsPanel[Random.Range(0, QuestionsPanel.Length)];
// Activate the new panel
currentPanel.SetActive(true);

Atau sebagai alternatif, cukup ulangi seluruh array dan lakukan

// Get the tendon index
var randomIndex = Random.Range(0, QuestionsPanel.Length);
// Iterate all panels
for(var i = 0; i < QuestionsPanel.Length; i++)
{
    // Set the matching panel active, all others inactive
    QuestionsPanel[i].SetActive(i == randomIndex);
}

Catatan: Saat ini Anda mungkin mendapatkan panel yang sama dua kali berturut-turut. Jika Anda hanya ingin melakukan semua panel dalam urutan acak dan kemudian selesai, acakkan array sekali dan kemudian cukup ulangi dalam urutan acak secara berurutan seperti mis.

using System.Linq;

...

private GameObject [] randomizedQuestions;

private int currentIndex;
private GameObject currentPanel;

private void Start ()
{
    Shuffle ();
    ShowNextQuestion();
}

private void Shuffle()
{
    randomizedQuestions = QuestionPanel.OrderBy(p => Random.value).ToArray();
}

public void ShowNextQuestion ()
{
    if(currentIndex >= randomizedQuestions.Length)
    {
        // Up to you. You can either just stop
        Debug.LogWarning("No more questions available", this);
        return;

        // Or you could just start over 
        Shuffle();
        currentIndex = 0;
    }

    if(currentPanel) currentPanel.SetActive(false);

    currentPanel = randomizedQuestions[currentIndex];

    currentPanel.SetActive(true);

    currentIndex++;      
}
0
derHugo 7 April 2021, 16:15