Открыть дверь, когда больше 20 монет

#c# #unity3d

#c# #unity3d

Вопрос:

Я пытаюсь сделать так, чтобы дверь в Unity открывалась, когда вы собрали 20 монет. а затем она открывается, когда вы касаетесь ее. но по какой-то причине. когда я касаюсь ее монетами 0, 1, 2 и т. Д., Она все равно открывается. как мне предотвратить это?

 using UnityEngine;
using System.Collections;
using UnityEngine.UI;


public class Player_Controller : MonoBehaviour {
public float speed;
public Text countText;
private Rigidbody rb;
private int count;
public float volume;
public Text eye;



AudioSource audio;
void Start()
{

    audio = GetComponent<AudioSource>();
    rb = GetComponent<Rigidbody>();
    count = 0;
    SetCountText();
    eye.text = "";
}


void FixedUpdate()
{

    float moveHorizonal = Input.GetAxis("Horizontal");
    float moveVertical = Input.GetAxis("Vertical");

    Vector3 movement = new Vector3(moveHorizonal, 0.0f, moveVertical);

    rb.AddForce(movement * speed);

}
void OnTriggerEnter(Collider other)
{
    if (other.gameObject.CompareTag("pickup"))
    {
        audio.Play(); //Play it

        other.gameObject.SetActive(false);
        count = count   1;
        SetCountText();
    }
    else if (other.gameObject.CompareTag("pickup2"))
    {
        audio.Play(); //Play it

        other.gameObject.SetActive(false);
        count = count   10;
        SetCountText();
    }
    else if (other.gameObject.CompareTag("eye"))
    {
        audio.Play(); //Play it

        other.gameObject.SetActive(false);
        count = count   9999999;
        SetCountText();
    }
    else if (other.gameObject.CompareTag("door") amp;amp; count <= 20)
    {
        other.gameObject.SetActive(false);
        count = 0;
    }


}

void SetCountText()
{
    countText.text = "Count: "   count.ToString();
    if (count >= 9001)
    {
        eye.text = "You hit the bull's eye! ALL THE POINTS!";
    }
}
}
  

Обновление: я использовал здесь неправильный символ. < должно быть> . но проблема сейчас в том, что, поскольку это триггер, вы проходите прямо. как я могу сделать его надежным, но все же триггером?

Ответ №1:

 else if (other.gameObject.CompareTag("door") amp;amp; count <= 20)
  

Вы говорите, что если количество меньше ИЛИ 20, тогда откройте дверь.

Измените его на:

 else if (other.gameObject.CompareTag("door") amp;amp; count >= 20)
  

Тогда это говорит как минимум о 20 ИЛИ более

Этот урок может пролить некоторый свет на операторов, которые вы можете использовать 🙂

Комментарии:

1. Да, я подумал, что сделал что-то не так. но дело в том, что сейчас. что я могу пройти через дверь независимо от того, есть ли у меня 20 очков или нет. я знаю, что это потому, что это триггер. итак, есть ли способ заставить триггер все еще иметь столкновения?

2. @MichaDeHaan Боюсь, я не в лучшем положении, чтобы ответить на этот запрос, я бы рекомендовал поискать здесь / задать его как отдельный вопрос; Я только что увидел проблему C #: P

3. На самом деле я просто понял это: все, что мне нужно было сделать, это добавить дочернего элемента к двери, которая является твердой. поскольку при удалении родительского элемента все дочерние элементы также удаляются. в любом случае спасибо!