Задать вопрос
@Athensky
Новичок

Не работает OnTriggerEnter2D. В чем может быть проблема?

Я начинающий в Unity и C#. Создаю маленькую игру для себя, и тут столкнулся с проблемой
Не работает OnTriggerEnter2D.
Я все проверил, на обоих объектах есть коллайдер (с галочкой IsTrigger), OnTriggerEnter2D, а не OnTriggerEnter. Пишется все правильно, не знаю почему, но я решил проверить z координаты и там тоже все хорошо.
Сам код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class clouds_script : MonoBehaviour
{
    float minus = 15;
    float positionY = 0;
    float minus_minus = 0;
    // Start is called before the first frame update
    void Start()
    {
        transform.position = new Vector3(Random.Range(13, 20), Random.Range(2, 5), 0);
        minus = transform.position.x;
        positionY = transform.position.y;
        minus_minus = Random.Range(1, 3);
    }

    void restart()
    {
        transform.position = new Vector3(Random.Range(13, 20), Random.Range(2, 5), 0);
        minus = transform.position.x;
        positionY = transform.position.y;
        minus_minus = Random.Range(1, 3);
        minus = minus - minus_minus * Time.deltaTime;
        transform.position = new Vector3(minus, positionY, 0);
    }


    // Update is called once per frame
    void Update()
    {
        minus = minus - minus_minus * Time.deltaTime;
        transform.position = new Vector3(minus, positionY, 0);
    }

    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.tag == "cloud")
        {
            restart();
            Debug.Log("triggered");
        }
    }
}
  • Вопрос задан
  • 396 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
DanielMcRon
@DanielMcRon
C# && Unity
Одно из тел должно быть не тригеррным

И да учитесь ещё писать красивый код, всё таки мы его рассматриваем
Вот как он должен выглядеть, имена переменных не менял так как сложно понять за что они отвечают, так же само и имена методов сделал на глаз
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class clouds_script : MonoBehaviour
{
    private float minus = 15;
    private float positionY = 0;
    private float minus_minus = 0;
    
    private void Start() {
        CalculateSpawnPosition();
    }

    
    private void Update() {
        CalculateTimeAndPosition();
    }

    private void OnTriggerEnter2D(Collider2D other) {
        if (other.tag == "cloud") {
            Restart();
            Debug.Log("triggered");
        }
    }

    private void Restart() {
        CalculateSpawnPosition();
        CalculateTimeAndPosition();
    }

    private void CalculateTimeAndPosition() {
        minus = minus - minus_minus * Time.deltaTime;
        transform.position = new Vector3(minus, positionY, 0);
    }

    private void CalculateSpawnPosition() {
        transform.position = new Vector3(Random.Range(13, 20), Random.Range(2, 5), 0);
        minus = transform.position.x;
        positionY = transform.position.y;
        minus_minus = Random.Range(1, 3);
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@kyryliukbogdan
попробуйте через if (other.gameObject.CompareTag("cloud"))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы