Jump to content
Unity Insider Forum
Wattsefakk

OnTriggerEnter per RayCast

Recommended Posts

Nabend Leuts,

warum löst ein Raycast von einem Objekt nicht OnTriggerEnter bei einem anderen Collider aus? Oder bin ich da auf dem falschem Weg? 
Folgendes soll Funktionieren: Der Spieler schaut auf ein Objekt und dieses Objekt soll das erkennen ob es angeschaut wird. Also dachte ich nehme einen RayCast der in die Blickrichtung den Spielers geht und fertig nur werden im Objekt wedewr OnTriggerEnter noch OnCollisionEnter ausgelöst. Das Objekt hat sowohl einen Collider der auf Trigger gestellt ist als auch einen Rigidbody...

Wisst ihr was ich falsch mache?

Share this post


Link to post
Share on other sites

OnTrigger / OnCollision wird meines Wissens wirklich nur dann aufgerufen, wenn zwei Collider interagieren.

Aber du kannst von deinem Player aus auf dem Hit-Objekt eine Methode aufrufen. ( theoretisch müsste es auch möglich sein z.B. 'OnCollisionEnter' aufzurufen )

Ich würde wahrscheinlich dafür ein 'IHitable' interface schreiben, das du deinem Objekt gibst o.ä.

Share this post


Link to post
Share on other sites

Ein Trigger funktioniert nur mit einem anderen Trigger oder Collider und auch nur dann wenn mindestens ein Rigidbody im Spiel ist.

Ein Raycast ist zwar auch ein physikalisches Element, aber eben kein Körper.

Trotzdem kannst du den Raycast nutzen um dem anderen Objekt zu sagen, dass es angegschaut wird.

Du bekommst ja über Raycast.Hit alle Informationen des getroffenen Objektes. Und da du es in dem Moment kennst, könntest du ihm z.B. mit SendMessage eine Info übergeben.

SendMessage ist zwar nicht besonders performant, aber ersteinmal der einfachste Weg um das ganze zu testen.

Share this post


Link to post
Share on other sites

Ach so:

Bitte nicht zweimal das gleiche Thema aufmachen!
Ich habe jetzt beide Themen zu diesem hier zusammengefügt.

Share this post


Link to post
Share on other sites

Ein Raycast ist quasi nur ein "Prüfstrahl" und löst keinerlei Interaktionen der Physikengine aus. Du kannst aber auf dein zu erkennendes Objekt einfach ein Skript (Klasse) legen und dieser Klasse eine Methode verpassen, die dann die gewünschte Aktion auslöst:

RaycastHit hit;

 if (Physics.Raycast(transform.position, transform.forward, out hit, 100.0f)) 
  {
     Skript meinSkript = hit.transform.gameObject.GetComponent<Skript>();
     if (meinSkript!=null) {
        meinSkript.Getroffen(); // Methode "Getroffen" der Klasse Skript ausführen
     }
  }


Wie Mr 3D bereits schrieb kann man dieser Klasse auch zusätzlich ein Interface verpassen und somit verschiedene Klassen detektieren (die dann alle dieses Interface implementieren müssen) und du prüfst dann nicht mehr auf "Skript" (also nicht nur auf eine bestimmte Klasse) sondern auf ein "Interface":

RaycastHit hit;

hit.transform.gameObject

 if (Physics.Raycast(transform.position, -Vector3.up, out hit, 100.0f)) 
  {
     IDetectRaycast detectRay = hit.transform.gameObject.GetComponent<IDetectRaycast>();
     if (detectRay!=null) {
        detectRay.Getroffen(); // Methode "Getroffen" des Interfaces IDetectRaycast ausführen   
     }
  }
  

Interface "IDetectRaycast":

using UnityEngine;
using System.Collections;

// Einfaches Interface welches eine Methode verlangt.
public interface IDetectRaycast
{
    void Getroffen();
}

Klasse "PersonDetect":

using UnityEngine;
using System.Collections;

public class PersonDetect : MonoBehaviour, IDetectRaycast
{
    // Benötigte Methode des IDetectRaycast interface
    public void Getroffen()
    {
        print(this.gameObject.name + " wurde getroffen!");
    }
}

 

Share this post


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