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

13.10.2016, 17:53

Suche nach der Nachfolge-Methode in Unity 5.4.1.

Hallo zusammen -

ich arbeite mich an einem 2D-Tutorial für Unity ab - und es funktioniert auch alles. Bis auf eine Zeile in einem Script ( C# ).

Die im Tutorial verwendete Variante ist veraltet. Ich habe mir schon die Finger wund gesucht(google), aber ich werde leider aus dem unity scripting manual nicht schlau. Es scheint wohl auch daran zu liegen, das ich die aktuelle Szene in einer if-Abfrage abfragen muß.

Weiß jemand, wie ich das Problem beheben kann? Vielen Dank im Voraus :)



(Link)


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
using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;

public class HealthController : MonoBehaviour {

    public float startHealth = 5;
    public int startLifePoints = 3;
   private float health = 5;
    private int lifePoints = 3;

    private Animator anim;
    private PlayerController playerController;
    private bool isDead = false;
    private bool isDamageable = true;


  

    void Start ()
    {
        anim = GetComponent<Animator>();
        playerController = GetComponent<PlayerController>();

        // Level Index ggf anpassen

       
       // if (Application.loadedLevel == 0)                          <==== ursprüngl. Code
 if  (SceneManager.LoadScene("Szene1"(LoadSceneMode)))           //  <====== hier weiß ich nicht weiter



        {
            health = startHealth;
            lifePoints = startLifePoints;

        }
        else
        {
            health = PlayerPrefs.GetFloat("Health");
            lifePoints = PlayerPrefs.GetInt("LifePoints");
        }
    }

    void ApplyDamage (float damage)
    {
        if (isDamageable)
        {
            health -= damage;
            health = Mathf.Max(0, health);

            if (!isDead)
            {

                if (health == 0)
                {
                    isDead = true;
                    Dying();
                }
                else
                {
                    Damaging();

                }
            }

            isDamageable = false;
            Invoke("ResetIsDamageable", 1);
        }
    }

    void ResetIsDamageable()
    {

        isDamageable = true;
    }



    void Dying()
    {
        anim.SetBool("Dying", true);
        playerController.enabled = false;

        lifePoints--;
        if (lifePoints <= 0)
        {

            //StartGame
            Invoke("StartGame", 3);


        }
        else
        {
            //Restart Level
            Invoke("RestartLevel", 1);
        }
           





    }

    void RestartLevel()
    {

    health = startHealth;
        isDead = false;
    anim.SetBool("Dying", false);
    playerController.enabled = true;



    if (!playerController.lookingRight)
    {
        playerController.Flip();
           
        }
        // level neu generieren und spieler zurücksetzen 
    }

    void OnDestroy ()
    {
        PlayerPrefs.SetFloat("Health", health);
        PlayerPrefs.SetInt("LifePoints", lifePoints);

    }



    void Damaging()
    {
        anim.SetTrigger("Damage");












    }

    void StartGame()
    {
      //  Application.LoadLevel(0);
      SceneManager.LoadScene(0);


    }




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

Tobiking

1x Rätselkönig

  • Private Nachricht senden

2

13.10.2016, 18:10

C#-Quelltext

1
SceneManager.GetActiveScene().buildIndex


dürfte das sein was du suchst. Das GetActiveScene lässt sich direkt in der Doku beim SceneManager finden, und das buildIndex bei der Doku über Scene.

Martin Mundorf

Treue Seele

  • »Martin Mundorf« ist der Autor dieses Themas

Beiträge: 262

Wohnort: Waldorf, Kr. Ahrweiler

Beruf: Althistoriker

  • Private Nachricht senden

3

13.10.2016, 18:14

aaaaahhhhh.. :thumbsup:

das mit dem build index hatte ich schon raus... nur wie das dann abzufragen ist... dachte mir dann "wie ganz doof früher in basic -mit equals - und siehe da, es scheint zu funktionieren. Super, danke! :)

C#-Quelltext

1
2
  // if (Application.loadedLevel == 0)                          <==== ursprüngl. Code
            if (SceneManager.GetActiveScene().buildIndex.Equals (0))  // <=== mein neuer Code
"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"

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

4

13.10.2016, 20:18

Oder du vergleichst es einfach auf die herkömmliche Weise mit ==.

Allerdings muss ich anmerken, dass das keine saubere Lösung ist. Du könntest alternativ in deiner Komponente einen editierbaren boolean definieren, der angibt, ob die Werte aus den PlayerPrefs geladen werden sollen oder nicht.
Aber warum müssen die Werte überhaupt aus den PlayerPrefs geladen werden? Könntest du die Informationen nicht zwischen den Szenen weiterreichen, bspw. mit einem GameObject, welches auf DontDestroyOnLoad gestellt wurde. (Im Zweifelsfall gingen auch statische Variablen, aber das wäre weniger schön.) Du könntest evtl. sogar das Objekt, welches bei dir die Lebensenergie hat, über die Szenen hinweg beibehalten, wodurch die Werte bereits an der richtigen Stelle gespeichert wären.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Balanceist

Frischling

Beiträge: 2

Wohnort: Hamburg

  • Private Nachricht senden

5

22.10.2016, 11:49

Jetzt weis ich, was ich falsch gemacht habe.

Werbeanzeige