Может ли кто-нибудь сказать мне, почему мои триггеры не работают так, как я предполагал? - PullRequest
1 голос
/ 20 июня 2020

У меня была эта проблема с моей текущей игрой.

Проблема в том, что когда мой игрок (Ракета) сталкивается с Астероидом (Врагом), игрок должен убить ie и перезапустить уровень но это не работает, даже если я поставил своему игроку коллайдер коробки без триггера, а мой астероид - триггер и круговой коллайдер. Я также попытался поставить астероид с триггером и игрока без триггера, и оба они с триггерами, но моя Ракета каждый раз просто проходит через астероид. В окне консоли ошибок нет. И ниже приведен код, который я использую для этого. ОБНОВЛЕНИЕ: Я воспользовался советами всех и разобрал код, оглядываясь назад, и я должен был заметить, что включение «OnTriggerEnter» в метод обновления не сработает, но в любом случае и Ракета, и Астероид. есть компонент "Rigibody", и когда игрок сталкивается с астероидом, он исчезает и не перезагружается, и я начал писать точку возрождения, но появляется ошибка "ошибка CS1955: неактивный член" Transform.position 'нельзя использовать как метод ". Это обновленный код.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class Movement : MonoBehaviour
{

    public float speed = 6.0f;
    public GameObject character;

    private Animator anim;
    private Vector3 Respawnpoint; 



    private void OnCollisionEnter2D(Collision2D collision)
    {
        switch (collision.gameObject.tag)
        {
            case "Enemy":
                Destroy(gameObject);
                break;
            default:
                //nothing
                break;     

        }
    }

    void Start()
    {
        anim = GetComponent<Animator>();
        Respawnpoint = transform.position();
    }


    void Update()
    {
        

        if (Input.anyKey)
        {
            transform.Translate(Vector3.forward * Time.deltaTime * speed);
        }
        if (Input.GetKeyDown(KeyCode.D))
        {
            transform.position += Vector3.right * speed * Time.deltaTime;
            anim.SetBool("Isright", true);
        }
        if (Input.GetKeyDown(KeyCode.A))
        {
            transform.position += Vector3.left * speed * Time.deltaTime;
            anim.SetBool("Isleft", true);
        }
        if (Input.GetKey(KeyCode.RightArrow))
        {
            transform.position += Vector3.right * speed * Time.deltaTime;
            anim.SetBool("Isright", true);
        }
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            transform.position += Vector3.left * speed * Time.deltaTime;
            anim.SetBool("Isleft", true);
        }
        else
        {

        }
        
    }
}

Ответы [ 3 ]

1 голос
/ 20 июня 2020

Я думаю, что проблема в вашем коде в том, что ваше условие gameObject.tag немного неверно. Предлагаю изменить его на collision.gameObject.tag. Также я считаю, что лучше разместить свой void OnTriggerEnter2D (Collider2D other) вне void Update(). Пожалуйста, ответьте, если это решение работает. Обновление: вы можете написать что-то вроде этого:

 using UnityEngine.SceneManagement;
 ...
 private void OnCollisionEnter2D(Collision2D collision)
{
 int sceneIndex = SceneManager.GetActiveScene().buildIndex;
    switch (collision.gameObject.tag)
    {
        case "Enemy":
        Destroy(gameObject);
       SceneManager.LoadScene(sceneIndex);
            break;
        default:
            //nothing
            break;
    }
}

Я предлагаю вам использовать OnCollisionEnter2D вместо OnTriggerEnter2D, потому что триггеры обычно предназначены для невидимых объектов, через которые вы можете go.

1 голос
/ 20 июня 2020

Как отмечали другие, код структурирован неправильно.

Внутри вашего обновления у вас есть метод триггера. В результате он никогда не будет называться

Просто вам нужно удалить 2 строки void update () и следующую за ними открывающую скобку. И последняя закрывающая скобка для метода, поэтому метод триггера находится в классе сам по себе.

Если у вас есть Rigidbody2D и установлен триггер, он должен работать.

Я бы также предложил код можно улучшить, но вместо придирки давайте рассмотрим основную проблему

1 голос
/ 20 июня 2020

Вы помещаете пустоту OnTriggerEnter2D (Collider2D other) в Update. Вы правильно написали?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...