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

Martin Mundorf

Treue Seele

  • »Martin Mundorf« ist der Autor dieses Themas

Beiträge: 262

Wohnort: Waldorf, Kr. Ahrweiler

Beruf: Althistoriker

  • Private Nachricht senden

1

31.12.2016, 15:34

der gezielte Schuß hittet nicht.

Hallo zusammen!

ich laboriere nun schon seit Tagen an einem Problem in Unity 3D herum:
beim abfeuern einer Waffe wird eine Kugel instantiiert - die dann mit raycast feststellt, ob sie was trifft.
Im schießen aus der Hüfte funktioniert das auch wunderbar (auch mit Streuwinkel(prz), aber leider nicht im gezielten Einzelschuß.
(siehe Bild im Anhang)

Wenn ich die if-Abfrage verändere (siehe Code), dann funzt es - aber die Streuung im Dauerfeuer ist futsch :fie:


außerdem habe ich das Problem, daß das bullet Script in Java ist, und alles andere in C#. Ich habe schon mehrfach versucht, das java-Script in C# umzuschreiben, aber ich bekomme den Streuwinkel nicht implementiert (random.insideunitcircle). - die bulletholes landen alle auf dem Boden... ich beiß mir da nun schon 3 tag die Zähne dran aus.
(außerdem hätte ich die Variable für den Streuwinkel lieber auf der Waffe, als auf der Kugel - dann könnte ich den Wert bei jedem Schuß übergeben).

Hat jemand eine Idee?

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#pragma strict

var maxdist : int;
var Loch : GameObject;
var Wunde : GameObject;
var Blut : GameObject;
var Abstand : float;
var Schaden : int;
var Schadenkraftfaktor : float;
var prz : float;
var zielen : boolean = false;


function Awake(){                  

var pos = Vector3(Screen.width /2, Screen.height / 2, Camera.main.nearClipPlane);
pos += Random.insideUnitCircle * prz;
var ray = Camera.main.ScreenPointToRay(pos);


var hit : RaycastHit;
    


//if (Physics.Raycast(transform.position, transform.forward, hit, maxdist))   // *funktioniert im Einzelschuß (Zielen)
//  {

if (Physics.Raycast(ray, hit, maxdist))                                      //* funktioniert im Dauerfeuer (aus der Hüfte)
{



    
            if (hit.rigidbody != null  && hit.transform.tag != "Boden")
                {
                hit.rigidbody.AddForceAtPosition(Vector3.up * Schaden * Schadenkraftfaktor, hit.point);
                }

            if ((hit.transform.tag == "Gegner") == false)
            {
            var tmmP : GameObject = Instantiate(Loch, hit.point + (hit.normal * Abstand), Quaternion.LookRotation(hit.normal));
            tmmP.transform.parent = hit.transform;
            }

            if (hit.transform.tag == "Gegner")
            {
            var tmp : GameObject =  Instantiate(Wunde, hit.point + (hit.normal * Abstand), Quaternion.LookRotation(hit.normal));
            tmp.transform.parent = hit.transform;
            var tmp2 : GameObject = Instantiate(Blut, hit.point + (hit.normal * Abstand), Quaternion.LookRotation(hit.normal));

            tmp2.transform.parent = hit.transform;
            }

    
            hit.transform.SendMessage("Schadennehmen", Schaden, SendMessageOptions.DontRequireReceiver);


    }
        Destroy(gameObject);
    }
»Martin Mundorf« hat folgendes Bild angehängt:
  • ziell.PNG
"Eine Signatur ist das Buchstaben-Zahlen-Zettelchen unten an ein einem Buch in der Bibliothek!"



was ich zur Zeit ausprobiere: 3rd person Shooter <- hierfür suche ich noch Unterstützung.


"Lehrjahre": Im Lande der Hasen
mein ewiges Spielprojekt "Straights & Rows".
meine Grafiken "ohne Verwendungszweck"

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

31.12.2016, 16:12

Du kannst dir Rays in der Debugansicht ausgeben lassen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Martin Mundorf

Treue Seele

  • »Martin Mundorf« ist der Autor dieses Themas

Beiträge: 262

Wohnort: Waldorf, Kr. Ahrweiler

Beruf: Althistoriker

  • Private Nachricht senden

3

31.12.2016, 16:29

das weiß ich, aber der Ray ist ja nur im Bruchteil der Sekunde der Existenz der Kugel sichtbar...so schnell komm ich ja nicht an die Pause-Taste
"Eine Signatur ist das Buchstaben-Zahlen-Zettelchen unten an ein einem Buch in der Bibliothek!"



was ich zur Zeit ausprobiere: 3rd person Shooter <- hierfür suche ich noch Unterstützung.


"Lehrjahre": Im Lande der Hasen
mein ewiges Spielprojekt "Straights & Rows".
meine Grafiken "ohne Verwendungszweck"

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

31.12.2016, 16:37

Breakpoint beim Feuern?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Martin Mundorf

Treue Seele

  • »Martin Mundorf« ist der Autor dieses Themas

Beiträge: 262

Wohnort: Waldorf, Kr. Ahrweiler

Beruf: Althistoriker

  • Private Nachricht senden

5

31.12.2016, 16:59

hm..... :hmm:

im Einzelschuß scheint der Ray auf die Mündung der Waffe anstatt auf die anvisierte Stelle zu zulaufen... dabei ists ein und der selbe Code... ?( (siehe Bild)
»Martin Mundorf« hat folgendes Bild angehängt:
  • ez.PNG
"Eine Signatur ist das Buchstaben-Zahlen-Zettelchen unten an ein einem Buch in der Bibliothek!"



was ich zur Zeit ausprobiere: 3rd person Shooter <- hierfür suche ich noch Unterstützung.


"Lehrjahre": Im Lande der Hasen
mein ewiges Spielprojekt "Straights & Rows".
meine Grafiken "ohne Verwendungszweck"

Martin Mundorf

Treue Seele

  • »Martin Mundorf« ist der Autor dieses Themas

Beiträge: 262

Wohnort: Waldorf, Kr. Ahrweiler

Beruf: Althistoriker

  • Private Nachricht senden

6

01.01.2017, 19:26

"Lösung" gefunden

Ich habe zwar immer noch nicht ganz das Problem verstanden, aber eine Lösung gefunden:

es scheit wohl an der Spieler-View-Kamera gelegen zu haben, denn ich habe die "camera.main...." durch meine Spielerkamera ersetzt. nun funktioniert es, wie es soll, und ich bin die Bullet samt ihrem java-Script los :)

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void Schuss()
    {
        if (zielen) {
            prz = prz_Z;
            maxDist = maxDist_Z;
        } else {
            prz = prz_H; 
            maxDist = maxDist_H;
        }


        Vector3 posi = (new Vector3 (Screen.width / 2, Screen.height / 2, 0));
    
        posi.x +=Random.Range(-prz , prz);
        posi.y += Random.Range (-prz, prz);

        Ray finder = CCC.ScreenPointToRay (posi);       
    
    
        RaycastHit Kontakt;

        if (Physics.Raycast (finder, out Kontakt, maxDist)) {
"Eine Signatur ist das Buchstaben-Zahlen-Zettelchen unten an ein einem Buch in der Bibliothek!"



was ich zur Zeit ausprobiere: 3rd person Shooter <- hierfür suche ich noch Unterstützung.


"Lehrjahre": Im Lande der Hasen
mein ewiges Spielprojekt "Straights & Rows".
meine Grafiken "ohne Verwendungszweck"

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

7

02.01.2017, 14:58

Du kannst bei Camera.main nicht immer davon ausgehen, das du die richtige Instanz bekommst. Das kann daran liegen, dass du mehr als eine Kamera hast oder das Property Camera.main zum falschen Zeitpunkt abfragst. Dummerweise finde ich gerade dazu keinen Link, aber das habe ich noch so grob im Kopf.

Deine Lösung die du implementiert hast, ist aber völlig ok. So mache ich das auch immer ;)

Renegade

Alter Hase

Beiträge: 494

Wohnort: Berlin

Beruf: Certified Unity Developer

  • Private Nachricht senden

8

02.01.2017, 17:51

Du kannst bei Camera.main nicht immer davon ausgehen, das du die richtige Instanz bekommst. Das kann daran liegen, dass du mehr als eine Kamera hast oder das Property Camera.main zum falschen Zeitpunkt abfragst. Dummerweise finde ich gerade dazu keinen Link, aber das habe ich noch so grob im Kopf.

Deine Lösung die du implementiert hast, ist aber völlig ok. So mache ich das auch immer ;)


Camera.main liefert lediglich die erste auffindbare Camera mit dem Tag "MainCamera" zurück. Sollte keine mit diesem Tag zu finden sein, gibt's eine Debug.LogWarning und ein null. Ich rate von diesem Property ab. Lieber selbst die konkrete Camera assignen und Probleme wie diese direkt vermeiden.
Liebe Grüße,
René

Martin Mundorf

Treue Seele

  • »Martin Mundorf« ist der Autor dieses Themas

Beiträge: 262

Wohnort: Waldorf, Kr. Ahrweiler

Beruf: Althistoriker

  • Private Nachricht senden

9

03.01.2017, 00:09

ich hab mich halt "strikt" an Tutorials aus YoutTube gehalten, und dabei übersehen, dasda was mit meiner Kamera anders ist. Mitlerweile bin ich schon etwas weiter (Bild dazu im Anhang, mehr zu diesem Projekt vielleicht dann an anderer Stelle)
»Martin Mundorf« hat folgendes Bild angehängt:
  • hasicus2.png
"Eine Signatur ist das Buchstaben-Zahlen-Zettelchen unten an ein einem Buch in der Bibliothek!"



was ich zur Zeit ausprobiere: 3rd person Shooter <- hierfür suche ich noch Unterstützung.


"Lehrjahre": Im Lande der Hasen
mein ewiges Spielprojekt "Straights & Rows".
meine Grafiken "ohne Verwendungszweck"

Werbeanzeige