Jump to content
Unity Insider Forum

Probleme mit Tür


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

 

Edited by sternenhimmelglanz
Link to post
Share on other sites

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 to post
Share on other sites

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 ...
        }

    }

 

  • Thanks 1
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...