C # Unity скрипт для выбора предметов - PullRequest
0 голосов
/ 22 октября 2018

В настоящее время у меня есть скрипт, который создает 2 префаба как GameObjects.К ним прикреплен скрипт, который game-object устанавливается в значение false, затем добавляется в мой массив inventory.Это еще один сценарий, но моя проблема в том, что другой игровой объект, который не был выбран, все еще там.Предполагается, что у вас есть выбор 2. Как только вы берете один, другой исчезает.Я понятия не имею, как это сделать, может кто-нибудь, пожалуйста, помогите.

public int moralityCounter=0;
public bool Inventory;

public void Store()
{
    if (gameObject.CompareTag("Good"))
    {
        moralityCounter++;
        Debug.Log(moralityCounter);
        gameObject.SetActive(false);
    }
    if (gameObject.CompareTag("Bad"))
    {
        moralityCounter--;
        Debug.Log(moralityCounter);
        gameObject.SetActive(false);
    }

}

1 Ответ

0 голосов
/ 23 октября 2018

Если есть только один помеченный объект good и один bad, вы можете просто пометить все помеченные как хорошие и плохие как неактивные.

private void DeactivateAllGoodBads() 
{
    // Deactivate all goods
    GameObject[] goodObjects = GameObject.FindGameObjectsWithTag("Good");
    foreach (GameObject goodObject in goodObjects)
    {
        goodObject.SetActive(false);
    }

    // Deactivate all bads
    GameObject[] badObjects = GameObject.FindGameObjectsWithTag("Bad");
    foreach (GameObject badObject in badObjects)
    {
        badObject.SetActive(false);
    }
}

public void Store()
{
    bool isGood = gameObject.CompareTag("Good");
    bool isBad = gameObject.CompareTag("Bad");
    if (isGood)
    {
        moralityCounter++;
        Debug.Log(moralityCounter);
    }

    if (isBad)
    {
        moralityCounter--;
        Debug.Log(moralityCounter);
    }

    if (isGood || isBad)
    {
        DeactivateAllGoodBads();
    }  
}

Если их несколько, вы можете сделать что-то вроде отключить только те, которые находятся ближе к сохраненному объекту, чем на некотором расстоянии.

private void DeactivateCloseGoodBads(Vector3 position, float maxDistance)
{
    // Deactivate close goods
    GameObject[] goodObjects = GameObject.FindGameObjectsWithTag("Good");
    foreach (GameObject goodObject in goodObjects)
    {
        // Check distance of found good
        if (Vector3.Distance(position, goodObject.transform.position) <= maxDistance) {
            goodObject.SetActive(false);
        }
    }

    // Deactivate close bads
    GameObject[] badObjects = GameObject.FindGameObjectsWithTag("Bad");
    foreach (GameObject badObject in badObjects)
    {
        // Check distance of found bad
        if (Vector3.Distance(position, badObject.transform.position) <= maxDistance) {
            badObject.SetActive(false);
        }
    }
}

public void Store()
{
    bool isGood = gameObject.CompareTag("Good");
    bool isBad = gameObject.CompareTag("Bad");
    if (isGood)
    {
        moralityCounter++;
        Debug.Log(moralityCounter);
    }

    if (isBad)
    {
        moralityCounter--;
        Debug.Log(moralityCounter);
    }

    if (isGood || isBad) 
    {
        DeactivateCloseGoodBads(gameObject.transform.position, 10f);
    }

}
...