Jump to content
Unity Insider Forum

Probleme mit Tür


sternenhimmelglanz

Recommended Posts

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

public class Pickups : MonoBehaviour
{
    RaycastHit hit;
    public float Distance = 4.0f;
    public GameObject PickupMessage;
    public GameObject Player;
    private AudioSource MyPlayer;

    private float RayDistance;
    private bool CanSeePickup = false;

    private bool CanSeeDoor = false;
    public GameObject DoorMessage;
    public Text DoorText;

    // Start is called before the first frame update
    void Start()
    {
        PickupMessage.gameObject.SetActive(false);
        DoorMessage.gameObject.SetActive(false);
        Player.gameObject.SetActive(true);
        RayDistance = Distance;
        MyPlayer = GetComponent<AudioSource>();
    }

    // Update is called once per frame
    void Update()
    {
        if (Physics.Raycast(transform.position, transform.forward, out hit, RayDistance))
        {
            if (hit.transform.tag == "Gem")
            {
                CanSeePickup = true;
                if (Input.GetKeyDown(KeyCode.E))
                {
                    if (SaveScript.Gem < 3)
                    {
                        Destroy(hit.transform.gameObject);
                        SaveScript.Gem += 1;
                    }
                }
            }
        }

        else if (hit.transform.tag == "Door")
        {
            CanSeeDoor = true;
            if (hit.transform.gameObject.GetComponent<DoorScript>().Locked == false)
            {

                if (hit.transform.gameObject.GetComponent<DoorScript>().IsOpen == false)
                {
                    DoorText.text = "Press E to open";
                }
                if (hit.transform.gameObject.GetComponent<DoorScript>().IsOpen == true)
                {
                    DoorText.text = "Press E to close";
                }
                if (Input.GetKeyDown(KeyCode.E))
                {
                    hit.transform.gameObject.SendMessage("DoorOpen");
                }
            }
            else if (hit.transform.gameObject.GetComponent<DoorScript>().Locked == true)
            {
                DoorText.text = "You need a key";
            }
        }
        else
        {
            CanSeePickup = false;
            CanSeeDoor = false;
        }
        
        if (CanSeePickup == true)
        {
            PickupMessage.gameObject.SetActive(true);
            RayDistance = 1000f;
        }

        if (CanSeePickup == false)
        {
            PickupMessage.gameObject.SetActive(false);
            RayDistance = Distance;
        }

        if (CanSeeDoor == true)
        {
            DoorMessage.gameObject.SetActive(true);
            RayDistance = 1000f;
        }

        if (CanSeeDoor == false)
        {
            DoorMessage.gameObject.SetActive(false);
            RayDistance = Distance;
        }
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DoorScript : MonoBehaviour
{
    private Animator Anim;
    public bool IsOpen = false;
    private AudioSource MyPlayer;
    public AudioClip RoomSound;
    public bool Room;
    public bool Locked;
    public string DoorType;

    // Start is called before the first frame update
    void Start()
    {
        Anim = GetComponent<Animator>();
        MyPlayer = GetComponent<AudioSource>();
    }

    // Update is called once per frame
    void Update()
    {
        if (Room == true)
        {
            DoorType = "Room";
            if (SaveScript.Key == true)
            {
                Locked = false;
            }
        }
    }

    public void DoorOpen()
    {
        if (IsOpen == false)
        {
            Anim.SetTrigger("Open");
            IsOpen = true;
            if (Room == true)
            {
                MyPlayer.clip = RoomSound;
                MyPlayer.Play();
            }
        }
        else if (IsOpen == true)
        {
            Anim.SetTrigger("Close");
            IsOpen = false;
            if (Room == true)
            {
                MyPlayer.clip = RoomSound;
                MyPlayer.Play();
            }
        }
    }

        private void OnTriggerEnter(Collider other)
        {
            if (other.gameObject.CompareTag("Enemy"))
            {
                if (Locked == false)
                {
                    if (IsOpen == false)
                    {
                        Anim.SetTrigger("Open");
                        IsOpen = true;
                    }
                }
            }
        }
    
}

Hi

ich habe ein Problem mit meinen Türen. Ich habe einen Quad mit einer Animation versehen, die die Tür auf uns zu gehen lässt. Außerdem habe ich diesen den Tag Door gegeben. Allerdings kommt bei mir immer die Fehlermeldung: NullReferenceException: Object reference not set to an instance of an object
Pickups.Update () (at Assets/TheGame/Scripts/Pickups.cs:50) herein. Leider verstehe ich nicht warum der Tag nicht erkannt wird. Vielleicht habt ihr ja eine Idee.

Vielen Dank

sternenhimmelglanz

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Einfach einen Screenshot hochladen.. aber halt ein Bild, keine PDF. Du kannst Bilder einfach in deinen Text beim Schreiben reinziehen.

Da hier bei Code nicht die Zeilennummern angezeigt werden, ist es auch sinnvoll, wenn du einmal die Zeile raussuchst, in der der Fehler passiert. Der steht hinter dem Dateipfad in deiner Fehlermeldung, in diesem Fall 50. Eine potentielle NullReferenceException sehe ich aber direkt:

if (Physics.Raycast( ... ))
{
  ...
}
else if (hit.transform.tag == "Door")
{
  ...
}

Wenn du in den else-Fall kommst, dann tust du das, weil Physics.Raycast false zurückgegeben hat. Das passiert genau dann, wenn der Raycast nichts getroffen hat. Im Anschluss fragst du aber den Tag des getroffenen Objekts ab. Da es kein getroffenes Objekt gibt, fliegt in diesem Fall eine NullReferenceException.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Alles was vom Raycast abhängig ist darunter zusammenfassen:

 void Update()
    {
        if (Physics.Raycast(transform.position,transform.forward, out hit, RayDistance))
        {
            if (hit.transform.tag == "Gem")
            {
                // ...
            }
            else if (hit.transform.tag == "Door")
            {
                // ...
            }
        }
        else
        {
            // CanSeePickup ...
        }

    }

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...