Уничтожение префаба от щелчка мышью raycast - PullRequest
0 голосов
/ 08 февраля 2019

Я хочу уничтожить или удалить нерестовой префаб со своей сцены, когда мышь щелкает по игровому объекту.Я пытаюсь использовать приведенный ниже код из документов Unity, однако мне выдается следующая ошибка: object reference not set to the instance of an object.

Этот скрипт прикреплен к моей основной камере.onclick вылетает игра.Кто-нибудь может увидеть, где это идет не так?

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

public class onClickDestroy : MonoBehaviour
{
    public GameObject destroyCube;

    // Update is called once per frame
    void Update()
    {

        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit = new RaycastHit(); //*
            if (Physics.Raycast(ray, out hit)) //**
            {
                print("true" + hit.point);
            }
        }

    }
}

1 Ответ

0 голосов
/ 08 февраля 2019

Решение 1

Убедитесь, что ваш Camera действительно помечен как MainCamera

enter image description here

если не щелкните там и выберите MainCamera из списка

enter image description here

Решение 2

Получить ипроверьте основную камеру в начале игры

priavte Camera _camera;

privtae void Awake()
{
    _camera = Camera.main;

    if(!_camera)
    {
        Debug.LogError("No Camera tagged MainCamera in Scene!");
        enabled = false;
    }
}

Решение 3

Или вместо использования Camera.main вместо этого получите компонент Camera напрямую

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

public class onClickDestroy : MonoBehaviour
{
    public GameObject destroyCube;

    privtae Camera _camera;

    private void Awake()
    {
        _camera = GetComponent<Camera>();
    }

    // Update is called once per frame
    private void Update()
    {

        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = _camera.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit = new RaycastHit();
            if (Physics.Raycast(ray, out hit))
            {
                print("true" + hit.point);
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...