Как я могу получить доступ к объектам и вызывать метод объектов? - PullRequest
0 голосов
/ 05 апреля 2020

Итак, я строил игру, где у меня были прыжки игрока, и если игрок приземляется на ящик или врага, игрок прыгает через функцию при столкновении (используя детектор столкновений, другой игровой объект для обнаружения столкновений). Столкновение зарегистрировано, хотя функция не выполняется, после небольшой отладки я заметил, что объекта (сценариев), который я вызываю, там нет, когда я играю, они нулевые, и это дает исключение nullReferenceException.

Класс детектора столкновений:

public class CollisionDetector : MonoBehaviour {
    public bool collide=false;
    public rogueMovement ro;
    public Crate cr;
    void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.collider.tag=="enemy")
        {
            Debug.Log("Jumpoff enemy");
            collision.collider.GetComponent<rogueMovement>().jumpOffEnemy();
            collide = true;
        }
        else if (collision.collider.tag=="crate")
        {
            ro.isJumping=false;
            Debug.Log("Crate collision");
            cr.Die();
        }

    }
}

функция, которую я хотел, чтобы она выполняла:

public void jumpOffEnemy()
{
    //ani.SetTrigger("jump");
    rb.AddForce(new Vector2(0f, Verticaljump), ForceMode2D.Impulse);
    //transform.Translate(0f,5f*Time.deltaTime,0f);
    Debug.Log("jump");
}

здесь перед игрой и после воспроизведения изображений того, что происходит с игровым объектом детектора столкновений, где я поместил скрипт Crate и мошеннический класс

введите описание изображения здесь введите описание изображения здесь

1 Ответ

0 голосов
/ 07 апреля 2020

Попробуйте использовать столкновение. gameObject .GetComponent (). JumpOffEnemy ();

Это должно исправить вашу основную проблему. Кроме этого, вам нужно инициализировать rogueMovement и Crate, поскольку Unity не поймет, где можно получить и изменить значения этих сценариев, когда игра запускается, поскольку сценарии могут быть присоединены к любому и нескольким объектам gameObject, если только они не ScriptableObjects, а не MonoBehaviours. Простое исправление для этого будет следующим:

public GameObject x;
public GameObject y;

rogueMovement ro;
Crate cr;

Public void Start()
{
    ro = x.GetComponent<rogueMovement>();
    cr = y.GetComponent<Crate>();
}

Прикрепите x и y GameObjects, где находятся эти скрипты. Надеюсь, это поможет.

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