Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

DerMark

Treue Seele

Beiträge: 324

Wohnort: Emsdetten

Beruf: Softwareentwickler

  • Private Nachricht senden

11

20.02.2012, 12:14

Ich nehme an die Spielfigur trägt noch deine AktionenSpieler Komponente? DAs ist da nämlich nicht ganz ersichtlich. Und wie bereits gesagt du brauchst entweder einen Collider UND ein Rigidbody oder nur einen Collider damit die Events auch ankommen. Dein Spieler hat keines von beiden.

Harry222

Alter Hase

Beiträge: 864

Beruf: Student

  • Private Nachricht senden

12

20.02.2012, 16:53

Ja, die C#-Codedatei ist dem Objekt "Spieler" zugewiesen worden, dem allerdings schon mehrere Codedateien zur Steuerung zugewiesen wurden.
Da, wie du hier nachlesen kannst, ein MonoBehaviour immer genau wie der Dateiname heißen muss, wird (je nachdem wie die Datei heißt) eine der beiden Klassen ignoriert! Ich vermute mal die Datei heißt AktionenSpieler.cs! ^^
Wenn z.B. in einer Datei nur ein MonoBehaviour ist und der nicht so heißt, wie der Dateiname, gibt das auch eine Fehlermeldung! ;)

Ein Beispiel:
Wenn man folgendes Script in eine .cs-Datei einfügt und dieses Script zu einem GameObject hinzufügt und ausführt, kommt als Debug-Ausgaben nur "EinScript"!

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using UnityEngine;
using System.Collections;

public class EinScript : MonoBehaviour
{
    void Start()
    {
        Debug.Log("EinScript");
    }
}

public class EinAndererName : MonoBehaviour
{
    void Start()
    {
        Debug.Log("EinAndererName");
    }
}

Also: eine Datei, ein MonoBehaviour! :thumbup:

Mfg Harry222

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

13

20.02.2012, 17:43

Meinst du das der Code eher so aussehen sollte? Hab das gleich mal probiert, aber es tut sich immer noch nichts...


using UnityEngine;
using System.Collections;

public class AktionenSpieler : MonoBehaviour {


// Use this for initialization
void Start () {

}

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

}

public Transform explosionPrefab;
void OnCollisionEnter(Collision collision)
{
Debug.Log("Collided with " + collision.gameObject.name);
}

}


[Tschuldigung, irgendwie wird der Code hier immer etwas verzehrt, wenn ich ihn als Code darstellen lasse, deswegen ausnahmsweise mal unvormatiert...]

Harry222

Alter Hase

Beiträge: 864

Beruf: Student

  • Private Nachricht senden

14

20.02.2012, 17:56

Also bei mir funktionert es!
Was ich gemacht habe:
1. Ein Script erstellt, das genau so heißt, wie deine Klasse und den Code (wie du ihn gepostet hast) eingefügt.
2. Einen Cube und eine Kugel erstellt. Die Kugel über dem Cube platziert.
3. Der Kugel ein Rigidbody mit Standardeinstellungen und das Script hinzugefügt.

Wenn ich das ganze jetzt gestartet hab, ist die Kugel auf den Cube gefallen und es kam die entsprechende Meldung.

Mfg Harry222

DerMark

Treue Seele

Beiträge: 324

Wohnort: Emsdetten

Beruf: Softwareentwickler

  • Private Nachricht senden

15

21.02.2012, 09:15

Ich sehe es schon kommen, dass genau das bei ihm fehlt, was ich die ganze Zeit erwähne was fehlen könnte..

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

16

21.02.2012, 10:00

Der "Spieler" hat bei mir leider wirklich nur einen "Rigidbody", da wenn ich ihm einen "Box-Collieder" noch hinzufügen will der "Character Controller" ersetzt werden müsse, was nicht möglich ist, da der "third Person Controller " davon abhängt.

Ich hab jetzt auch einfach mal einen Würfel erstellt, der auf das Haus fällt. Wenn er aufs Haus gefallen ist, wurde die Aktion/Meldung ausgelöst. Am "Haus" kann es also nicht liegen. Es wird da wohl ein Problem mit dem oben genannten Script geben.

DerMark

Treue Seele

Beiträge: 324

Wohnort: Emsdetten

Beruf: Softwareentwickler

  • Private Nachricht senden

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

18

21.02.2012, 11:37

Ok, hab meinen Code jetzt danach mal angepasst:


using UnityEngine;
using System.Collections;


public class AktionenSpieler : MonoBehaviour
{




// Use this for initialization
void Start()
{


}


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


}


void OnControllerColliderHit(ControllerColliderHit hit)
{
Rigidbody body = hit.collider.attachedRigidbody;
{
Debug.Log("Collided with " + hit.collider.attachedRigidbody);
}


}
}
Aber leider wird immer nur ausgegeben: "Collided with null"

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »MitgliedXYZ« (21.02.2012, 11:58)


Harry222

Alter Hase

Beiträge: 864

Beruf: Student

  • Private Nachricht senden

19

21.02.2012, 15:16

Warum denn jetzt plötzlich:

C#-Quelltext

1
Debug.Log("Collided with " + hit.collider.attachedRigidbody);

Das hier war schon richtig:

C#-Quelltext

1
Debug.Log("Collided with " + collision.gameObject.name);

Und wenn eine Ausgabe kommt, dürfte die Zeile ausgeführt werden!

Mfg Harry222

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

20

21.02.2012, 15:35

Tja, wenn ich es in "Debug.Log("Collided with " + collision.gameObject.name);" ändere, startet das Spiel nicht mehr und es kommen folgende Meldungen:

Assets/AktionenSpieler.cs(24,42): error CS0103: The name `collision' does not exist in the current context

All compiler errors have to be fixed before you can enter playmode!
UnityEditor.SceneView:ShowCompileErrorNotification()

NullReferenceException: Object reference not set to an instance of an object
UnityEditor.ListViewShared.HasMouseDown (UnityEditor.InternalListViewState ilvState, Rect r, Int32 button) (at C:/BuildAgent/work/842f9557127e852/Editor/Mono/GUI/ListViewShared.cs:180)
UnityEditor.ListViewShared.HasMouseDown (UnityEditor.InternalListViewState ilvState, Rect r) (at C:/BuildAgent/work/842f9557127e852/Editor/Mono/GUI/ListViewShared.cs:175)
UnityEditor.ListViewShared+ListViewElementsEnumerator.MoveNext () (at C:/BuildAgent/work/842f9557127e852/Editor/Mono/GUI/ListViewShared.cs:368)
UnityEditor.ConsoleWindow.OnGUI () (at C:/BuildAgent/work/842f9557127e852/Editor/Mono/ConsoleWindow.cs:420)
System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture)


Deswegen dachte ich den Fehler gefunden zu haben, indem ich diese Zeile umgeändert habe. Allerdings war das wohl auch irgendwie falsch.

Werbeanzeige