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

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

61

03.07.2017, 18:24

Ich melde mich auch nochmal. Habe das Spiel gerade nochmal getestet.
Wenn ich mit einer Pistole in der Hand starte und das erste, was ich sehe, Zielscheiben sind, dann erwarte ich auch, dass man auf diese schießen kann. Das geht aber nicht, und man bekommt auch keine Rückmeldung, warum das nicht geht.
Wenn man dann zur Tür des Gebäudes läuft und die Eingabetaste zum Öffnen drückt, funktioniert das nicht. Bei gefühlten 3 von 4 Versuchen klappt es einfach nicht. Ich muss viele Male drücken, bevor es klappt (ohne mich zwischendurch zu bewegen, also scheint das ein Problem mit der Abfrage der Tastatur zu sein).
Wenn die Tür dann offen ist, kann ich nicht reinlaufen, weil ich an der Türschwelle hängen bleibe. Wäre ich kein erfahrener Spieler, käme ich wahrscheinlich nicht darauf, dass ich hier springen muss.
Also, sehr viele Hindernisse direkt am Anfang, die die Spielerfahrung schon ziemlich ruinieren können.
Übrigens sieht man auf einem der Bilder, die in dem Gebäude hängen, etwas, für das man wahrscheinlich eine "Ab 18"-Altersfreigabe benötigen würde. Da würde ich dir dringend empfehlen, das zu entfernen!

Nachtrag: Nach dem Entsichern der Waffe habe ich mit dem Schießen das gleiche Problem wie mit dem Öffnen der Tür. Gefühlte 3 von 4 Klicks funktionieren nicht. Kann es sein, dass du an der falschen Stelle (also im falschen Event-Handler) auf die Eingaben reagierst? Sag mal, wo und wie diese Abfrage implementiert ist. Update, FixedUpdate? Wie sieht der Code aus? Das Entsichern leidet übrigens auch unter dem Problem.

Beim Laufen kommt es auch immer wieder zu komischen ruckartigen Bewegungen.

Martin Mundorf

Treue Seele

  • »Martin Mundorf« ist der Autor dieses Themas

Beiträge: 262

Wohnort: Waldorf, Kr. Ahrweiler

Beruf: Althistoriker

  • Private Nachricht senden

62

03.07.2017, 18:57

Ja..das sind bekannte Probleme.

Ich werd da heut Abend möglichst auf alles eingehen, hoffentlich ohne zu viel Text zu produzieren.

ich hab ein Video gemacht (wg asynchroner fps ist etwas ruckeliger), so wie ich mir das in der Theorie gespielt vorstelle. Angesprochene Bugs sind allerdings auch (noch) zu sehen.

https://youtu.be/LXGQC_tYyg8
"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

63

03.07.2017, 22:55

also ich versuche, das alles mal etwas zu sammeln:

Gameplay möchte ich (weiter-)entwickeln, wenn die FPC-Mechanik gut läuft.
Damit sind wir bei den Radio/Türen, der Code steht unten.
Was das Level "mit Handlung" ohne viele Waffen etc betrifft - das hatte ich auch so geplant, aber vorher wollte ich halt noch bekannte Probleme ausmerzen.
Ich will nicht unbedingt einen ego-shooter bauen, und hab das auch schon beschrieben. Leider bin ich ein Text-Mensch. ich versuchs ja kurz zu halten.
Ich würde lieber einem Team angehören, und mich auf einen Teilaspekt beschränken (zB 3D Modelle bauen).
Eigentlich will ich nicht mal ein 3D Spiel entwickeln, sonder nur mein Straights&Rows bauen. Aber egal, ich schweife ab.

Mit Nazi-Propaganda ?( möchte ich nichts zu tun haben, und will sie auch nicht ins Spiel einbauen!!!
(Im Radio läuft das WM Finale von Bern 1954!)

Die nicht ganz jugendfreien Bilder sind leicht abzuschalten/zu ersetzen!

Das rucken im laufen habe ich in meinen Testläufen nicht beobachten können; das Problem mit den Türen/Interaktionen und entichern habe ich auch, und weiß nicht warum.
Der Code dazu: siehe unten

die Tür betreffend:
der void "dauerndabfragen" wird im FixedUpdate" abgerufen



C#-Quelltext

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
61
62
63
64
65
    void Dauerndabfragen()
    { 

        //zima ();


        Vector3 posi = (new Vector3 (Screen.width / 2, Screen.height / 2, 0));



        Ray finder = CCC.ScreenPointToRay (posi);       


        RaycastHit Kontakt;

        if (Physics.Raycast (finder, out Kontakt, maxDist)) {
            
            Fadenkreuz.gameObject.SetActive (true);
            Ring.gameObject.SetActive (false);
            Infotext.text = null;
    

            if (Kontakt.transform.tag == "Item")
            {
                Fadenkreuz.gameObject.SetActive (false);
                Ring.gameObject.SetActive (true);
                Infotext.text = Kontakt.transform.name.ToString () + " aufheben?";

                if (Input.GetKey (KeyCode.Return)) {
                    Infotext.text = null;
                    Kontakt.transform.SendMessage ("MissObj", SendMessageOptions.DontRequireReceiver);
                    Kontakt.transform.GetComponent <MeshRenderer >().enabled = false ;
                    Kontakt.transform.GetComponent <Collider > ().enabled = false;
                    items.Add (Kontakt.transform.gameObject);
                    if (Kontakt.transform.GetComponent <Rigidbody > () != null) {
                        Kontakt.transform.GetComponent <Rigidbody> ().useGravity = false;
                    }
                    Kontakt.transform.parent = Rucksack.transform;
                    Kontakt.transform.position = Rucksack.transform.position;
                    //Kontakt.transform.SendMessage ("death");

                }
            }




                if (Kontakt.transform.tag == "Door") {
                    //Debug.Log (Kontakt.transform.GetComponent <Door> ().auf);
                    Fadenkreuz.SetActive (false);
                    Ring.SetActive (true);
                    if (Kontakt.transform.GetComponent <Door> ().auf == true) {
                        Infotext.text = "zum schließen ENTER drücken";
                    } else {
                        Infotext.text = "zum öffnen ENTER drücken";
                    }


                    if (Input.GetKeyDown (KeyCode.Return)) {
                        Kontakt.transform.GetComponent <Door > ().doorMov ();
                        infoleer ();
                        return;
                    }
                    
                }



die Waffen haben bei alle ein recht ähnliches Script:

C#-Quelltext

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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class mp47 : MonoBehaviour {

    public int MagazinKapazitaet = 32;  // wieviel in Magazin passen
    public int SchussinMagazin= 32;  // wieviel in Magazin noch drin sind
    public int AmmoTyp = 919;
    public int GesamtSchussverbleibend = 0; // wieviel aktuell noch in der Waffe sind
    public int MaxSchuss = 224; // maximal passende Schuß in der Waffe
    public int verblMagazine;


    public Transform SPWN;
    public AudioClip wumm;
    public AudioClip relsnd;
    public AudioClip klikk;
    public GameObject Münf;
    public GameObject RaucH;
    public float Vmax;
    float Abstand = 0.001f;
    public Camera CCC;
    public int maxDist = 75;
    public int Schaden = 25;
    public Text showAmmo;
    public AudioClip impactSound;
    public GameObject Loch;
    public GameObject Wunde;
    public GameObject Blut;
    public float prz = 5.0f;
    float przZ;
    Vector3 Referenz;
    bool zielt = false;
    public float zeit = 0.1f;
    public GameObject Fadenkreuz;
    bool hatgeschossen = false;
    int Ubergabemenge;
    bool amladen = false;
    bool sicher = true;
    bool schiessen = false;
    public bool stock = false;


    void Awake()
    {
        Referenz = this.transform.localPosition;
        przZ = prz / 1.25f;
        verblMagazine = Mathf.RoundToInt(GesamtSchussverbleibend / MagazinKapazitaet);
        //  showAmmo.text = SchussinMagazin.ToString () + " / " + verblMagazine.ToString ();
        stock = false;
    }

    void Start ()
    {
        Referenz = this.transform.localPosition;
        przZ = prz / 1.25f;
        verblMagazine = Mathf.RoundToInt(GesamtSchussverbleibend / MagazinKapazitaet);
        //  showAmmo.text = SchussinMagazin.ToString () + " / " + verblMagazine.ToString ();
        stock = false;
    }

    void nachladen()
    {
        int Fehlbestand = MagazinKapazitaet - SchussinMagazin;
        if (Fehlbestand <= MagazinKapazitaet) 
        { 
            if (GesamtSchussverbleibend > Fehlbestand)
            { 
                SchussinMagazin = MagazinKapazitaet;
                GesamtSchussverbleibend = GesamtSchussverbleibend - Fehlbestand;

            } 
            else
            {
                SchussinMagazin = SchussinMagazin + GesamtSchussverbleibend;
                GesamtSchussverbleibend = 0;

            }
            verblMagazine = Mathf.RoundToInt (GesamtSchussverbleibend / MagazinKapazitaet);

            if (verblMagazine == -1) {
                verblMagazine = 0;
            }
            showAmmo.text = SchussinMagazin.ToString () + " / " + verblMagazine.ToString ();
            amladen = false;
        }
    }

    void sichern()
    {
        this.GetComponent<Animation> ().Play ("sich");
    }

    public  void MengeZeigen()
    {
        showAmmo.text = SchussinMagazin.ToString () + " / " + verblMagazine.ToString ();
    }

    void FixedUpdate ()
    {

        if (Input.GetKeyDown (KeyCode.B)) 
        {
            if (stock) 
            {
                this.GetComponent<Animation> ().Play ("schult_aus");
                stock = false;
                return;
            } 
            else
            {
                this.GetComponent<Animation> ().Play ("schult_an");
                stock = true;
                return;
            }
            return;
        }





        verblMagazine = Mathf.RoundToInt(GesamtSchussverbleibend / MagazinKapazitaet);
        if (verblMagazine == -1) {
            verblMagazine = 0;
        }
        //  showAmmo.text = SchussinMagazin.ToString () + " / " + verblMagazine.ToString ();

        if (Input.GetButtonDown ("Fire3") || Input.GetKeyDown (KeyCode.Comma)) 
        {
            //sound klick
            AudioSource.PlayClipAtPoint (klikk, SPWN.position);

            if (sicher && !zielt) {
                this.GetComponent<Animation> ().Play ("entsich");
                sicher = false;
                schiessen  = true;

                return;
            }

            if (schiessen  && !zielt) {
                this.GetComponent<Animation> ().Play ("sich");
                schiessen  = false;
                sicher = true;

                return;
            }
        }

        if ((Input.GetKeyDown(KeyCode.R)) && !amladen)
        {
            amladen = true;
            AudioSource.PlayClipAtPoint (relsnd, this.transform.position);
            this.GetComponent<Animation> ().Play ("rela");
            if (sicher)
            {
                Invoke("sichern", 2.0f);
            }

            Invoke ("nachladen", 2.0f);

        }




        if ((Input.GetButton ("Fire1")) && !hatgeschossen) 
        {
            if (SchussinMagazin > 0 && !sicher) {
                schusslösung ();
            }
            if (SchussinMagazin == 0) {
                if (GesamtSchussverbleibend > 0 && !amladen) {
                    amladen = true;
                    AudioSource.PlayClipAtPoint (relsnd, this.transform.position);
                    this.GetComponent<Animation> ().Play ("rela");
                    if (sicher) 
                    {
                        Invoke("sichern", 2.0f);
                    }
                    Invoke ("nachladen", 2.0f);
                }

            }
        }




        if (Input.GetButton ("Fire2"))
        {
            zielt = true;
            this.transform.localPosition = new Vector3 (0, -0.08f, 1.17f);
            Fadenkreuz.SetActive (false);

        }
        else 
        {
            zielt = false;
            this.transform.localPosition = Referenz;

        }       

    }


    void schusslösung()
    {
        if (!zielt) 
        {
            this.GetComponent<Animation> ().Play ("shuus");
        } 
        else 
        {
            this.GetComponent<Animation> ().Play ("Zshuus");
        }

        AudioSource.PlayClipAtPoint (wumm, SPWN.position);
        Instantiate (Münf, SPWN.transform.position, Quaternion.identity);
        GameObject rc = Instantiate (RaucH, SPWN.transform.position, Quaternion.identity) as GameObject;
        rc.transform.parent = gameObject.transform;
        SchussinMagazin -= 1;

        verblMagazine = Mathf.RoundToInt(GesamtSchussverbleibend / MagazinKapazitaet);
        if (verblMagazine == -1) 
        {
            verblMagazine = 0;
        }
        showAmmo.text = SchussinMagazin.ToString () + " / " + verblMagazine.ToString ();
        Vector3 posi = (new Vector3 (Screen.width / 2, Screen.height / 2, 0));
        float xyz;
        if (zielt) 
        {
            xyz = przZ;
        } 
        else 
        {
            xyz = prz;
        }
//      if (stock) 
//      {
//          xyz = 
//      }

        posi.x += Random.Range (-xyz, xyz);
        posi.y += Random.Range (-xyz, xyz);
        Ray finder = CCC.ScreenPointToRay (posi);       
        RaycastHit Kontakt;
        if (Physics.Raycast (finder, out Kontakt, maxDist)) 
        {
            if ((Kontakt.rigidbody != null && (Kontakt.transform.tag != "Boden")))
            {
                Kontakt.rigidbody.AddForceAtPosition (SPWN.transform.forward * Schaden, Kontakt.point);
            }
            if (((Kontakt.transform.tag == "Gegner") == false) && ((Kontakt.transform.tag == "Player") == false)) 
            {
                GameObject tmmP = Instantiate (Loch, Kontakt.point + (Kontakt.normal * Abstand), Quaternion.LookRotation (Kontakt.normal)) as GameObject;
                tmmP.transform.parent = Kontakt.transform;
                AudioSource.PlayClipAtPoint (impactSound, Kontakt.point);
            }
            if (Kontakt.transform.tag == "Gegner")
            {
                GameObject tmp =    Instantiate (Wunde, Kontakt.point + (Kontakt.normal * Abstand), Quaternion.LookRotation (Kontakt.normal)) as GameObject;
                tmp.transform.parent = Kontakt.transform.GetComponent<Collider> ().transform;
                GameObject tmp2 = Instantiate (Blut, Kontakt.point + (Kontakt.normal * Abstand), Quaternion.LookRotation (Kontakt.normal)) as GameObject;
                tmp2.transform.parent = Kontakt.transform;
            }
            Kontakt.transform.SendMessage ("Schadennehmen", Schaden, SendMessageOptions.DontRequireReceiver);
        }
        hatgeschossen = true;
//      if (!zielt) 
//      {
            Invoke ("neuschuss", zeit);
//      } 
//      else
//      {
//          Invoke ("neuschuss", zeit * 4.25f);
//      }
        verblMagazine = Mathf.RoundToInt(GesamtSchussverbleibend / MagazinKapazitaet);
        if (verblMagazine == -1) 
        {
            verblMagazine = 0;
        }
        showAmmo.text = SchussinMagazin.ToString () + " / " + verblMagazine.ToString ();

    }


    void neuschuss()
    {
        hatgeschossen = false;

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

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

64

03.07.2017, 23:15

Eingaben sollten in Update abgefragt werden, sonst können sie “verpasst“ werden. Genau das passiert in deinem Spiel: http://answers.unity3d.com/questions/409…input-loss.html

Martin Mundorf

Treue Seele

  • »Martin Mundorf« ist der Autor dieses Themas

Beiträge: 262

Wohnort: Waldorf, Kr. Ahrweiler

Beruf: Althistoriker

  • Private Nachricht senden

65

05.07.2017, 20:04

"Dieser Zug endet hier"

@David: vielen lieben Dank für diesen wertvollen Hinweis!

Ich werde dieses Projekt nun hier ruhen lassen. Zwar möchte ich das Spiel aus der ich-perspektive (auch mit Waffen) zwar weiter führen, aber mit etwas mehr "Gameplay" und in einem neuen Thread, wie mir angeraten wurde.
Entschuldigt bitte nochmal meine Noobhaftigkeit und Textlastigkeit - im nächsten Anlauf wird es hoffentlich einen weiteren Schritt besser sein :)
"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"

Renegade

Alter Hase

Beiträge: 494

Wohnort: Berlin

Beruf: Certified Unity Developer

  • Private Nachricht senden

66

05.07.2017, 22:28

Bei deinem neuem Anlauf solltest du in Erwägung ziehen, alles mal in Englisch zu schreiben. Der Code ist gelinde gesagt "kreativ" ;) Gerne helfe ich dir, wenn du Fragen rund um Unity hast :)
Liebe Grüße,
René

Werbeanzeige