Jump to content
Unity Insider Forum

2D Top-Down Shooter (Komplett-Tutorial)


malzbie

Recommended Posts

  • 2 weeks later...

Ja man könnte das auch so machen wie du da zeigst. Aber wo ist für dich der Vorteil dabei?

Das du es in einem abspeichern kannst oder wegen dem Dictionary?

 

Wenn ich mittels miniJSON abspeichere nutze ich auch ein Dictionary damit ich die Werte besser übergeben kann. Trotzdem nutze ich (gerade bei einem Inventarsystem) viel lieber mehrere Arrays im Spiel. Das ist für mich einfach einfacher zu bewerkstelligen, wenn ich in einem Array auf der Speicherstelle 1 (weil es der erste Slot vom Inventar ist) den Typ, die Anzahl, die Eigenschaft etc. finde. Ich gucke immer nur nach der Zahl und habe alles beisammen. Weiß auch nicht warum, aber ich mag das so lieber.

 

Sag mal, warum du das lieber serialisierst.

 

Hey sorry. Ich habe irgendwie nicht mitbekommen, dass das du darauf eine Antwort gegeben hast :lol: (Hab auch keine Benachrichtung oder so bekommen). Ich habe mich wohl nicht ausführlich ausgedruckt. Mir ging es jetzt nicht um die Typen sondern eher um die massenhafte Registrierungseinträge. Der Vorteil wäre (für mich) in meinem Beispiel, dass man nur einen Eintrag in der Registry hätte. Nochmal:

Heino:3300;Superfreak;2530;Susi:13

Ob du jetzt mehrere Arrays nimmst für die beiden Einträge oder ne extra Klasse erstellst und nen Dictionary oder sonst was nimmst ist mir in diesem Fall wurscht :rolleyes: .

 

Ich habe bei meinem Spiel (nur in diesem Fall) ausnahmsweise miniJson ausgelassen, da es ein paar Sachen nicht so klappen wollte mit dem Script was ich da hatte. Zum Glück sind es nicht viele Zeilen. Sonst benutze ich es auch gerne. Weiß nicht, ob ich jetzt einen oder mehrere Vorteile dadurch habe, da es ja ziemlich Eingeschränkt ist, aber zumindest sind es nur zwei Funktionen und die Items sind sofort im Inventar oder in einem Eintrag.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Brauchst dich nicht entschuldigen. :)

 

Im Grunde hast du ja Recht. Mit deiner Methode würde man einige Schlüssel in der Registry sparen.

Aaaber! ;)

Zum einen sind es echt nur wenige Einträge in diesem Spiel, und zum anderen ist das ein Tutorial für Anfänger, wo ich alles so einfach wie möglich halten wollte.

Ich nehme deinen Ratschlag gerne an. Nur ist bei diesen paar Einträgen die Verhältnismäßigkeit, meiner Meinung nach, nicht gegeben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also für einfache Sachen ...eigentlich generell... würde ich wieder weg von MiniJSON und einem one liner mit json.NET nutzen... dann hat man den ganzen Kram mit dem hin und her gecaste (schöne Fehlerquelle) nicht und ist wesentlich flexibler. Da spart man sich eine Menge Schreibarbeit und kann alles in einen jsonString stopfen.

Bei "komplexeren" Strings und/oder Unity-spezifischem Zeug muss man hier und da ein wenig nachhelfen... aber im Verhältnis zu MiniJSON: ein Traum! ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 3 weeks later...

Eine super guide reihe die ich momentan für Android teste, jedoch schaffe ich es nicht ein Problem mit dem Schiff und den Rahmen zu lösen.

Wenn mein Schiff an egal welcher seite anliegt und ich mein Smartphone ruckartig in die richtung bewege, hüpft das schiff über den Rahmen und ist aus dem Bild.

Nach paar lenkungen taucht er wieder auf :), leider habe ich noch nicht das wissen dies zu beheben :(

 

Kann mir da jemand ein tipp geben ?

 

 

LG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du wirst wohl das Schiff zu viel bewegen und somit über den Collider hinausschießen.

Begrenzt du denn deine Bewegung im Maximalwert?

 

Als Lösungsansatz könntest du die maximalen von Links und Rechts als Variablen festlegen und dann eben abfragen ob du nicht unter dem linken Wert und nicht über den rechten Wert bist. Bist du mit dem Schiff unterhalb von links, dann setzt du das Schiff einfach auf den linken Wert. Genauso machst du das mit rechts oben und unten. Also nicht mehr die Ränder triggern sondern aktiv abfragen, ob du innerhalb der vorgegeben Werte bist.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Vielen dank für idee, jedoch bin ich noch nicht so weit das ich genau wusste wie ich das mit der position der Schiff ist :D

 

Habe aber mir aber etwas überlegt um Input.acceleration sensibilität etwas zu verkleinern.

Es ist das erste mal das ich mit C# arbeite, habe davor vor 8 jahren mal mit VB programmiert.

Also hoffe ich das niemand lacht :D

 

 

Hier mein Code dazu:

  if(Input.acceleration.x<0.15f && Input.acceleration.x>-0.15f){
   xAchse=0f;
  }
  if(Input.acceleration.y<0.15f && Input.acceleration.y>-0.15f){
   yAchse=0f;
  }
  if(Input.acceleration.x>0.15f){
   xAchse=0.35f;
  }
  if(Input.acceleration.x<-0.15f){
   xAchse=-0.35f;
  }
  if(Input.acceleration.y>0.15f){
   yAchse=0.35f;
  }
  if(Input.acceleration.y<-0.15f){
   yAchse=-0.35f;
  }

 

 

 

LG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja, kannst du so machen. Ich habe acceleration noch nie genutzt, deswegen weiß ich auch nicht, welche Maximalwerte da rüber kommen.

Wenn ich die Info bei unity sehe, dann ist eine Acceleration von 1.0 = 1G. Vielliecht gibt es da auch 2G und mehr....

Da ich in meinem Tutorial ja maximalwerte von 1 oder -1 nutze, sollte es eigentlich auch reichen, wenn du darauf begrenzt.

also ungefähr:

xAchse=Input.acceleration.x;
If(xAcse>1f){
  xAchse==1f;   
}
if(xAchse<-1f){
  xAchse=-1f;
}

 

Du Kannst auch Mathf.Clamp nutzen um Maximalwerte einzuklemmen,

 

Das was ich mit den Maximalpositionen meinte ist ungefähr so wie bei den Asteroiden. Der Werfer bewegt sich zwischen 2 X-Werten hin und her. Diese 2 Werte wären dann deine Maximalwerte, die das Schiff nach links und rechts fliegen kann. Sobald, aus welchem Grund auch immer, diese Positionen überrannt werden, setzt du das Schiff einfach wieder auf die Maximalposition zurück.

 

float xMinimum= 10f; // minimal X Position, die das Schiff erreichen darf
float xMaximum=100f;
Vector3 setzposi;

...

setzposi=transform.position; // position an Variable übergeben
if(setzposi.x<xMinimum){ // wenn minimal Position unterschritten
  setzposi.x=xMinimum; // auf minimal Position setzen
}
if(setzposi.x>xMaximum){
 setzposi.x=xMaximum;
}
transform.position=setzposi; // neue Werte an transform übergeben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

super vielen dank malzbie :)

da werde ich heute abend viel zu experimentieren haben bevor mitVideo Teil 5 weiter mache :)

 

mfg Musti

 

 

 

edit:

 

ich nehme lieber das mit der anpassung der input eingabe auf X&Y Achse, da irgendetwas nicht mit den positionsangaben stimmt.

Wenn ich zb: die Schussposition in der Scene genau an dem Schiff anpasse, ist es im Spiel so versetzt das die Linke waffe von der Schiffsmitte aus einen abschuss gibt und der rechte etwas weiter als der Flügel ist.

Warum das so ist kann ich nicht sagen, der antrieb wird richtig dargestellt :D

 

LG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hab viel rumprobiert und am ende ist mir eine Idee gekommen.

 

if (Input.acceleration.x < -0.125f) {
	 if(!hitleft){
	  xAchse = -0.3f;
	 }
    }
    if (Input.acceleration.x > 0.125f) {
	 if(!hitright){
	  xAchse = 0.3f;
	 }
    }
    if (Input.acceleration.y > 0.125f) {
	 if(!hitup){
	  yAchse = 0.3f;
	 }
    }
    if (Input.acceleration.y < -0.125f) {
	 if(!hitdown){
	  yAchse = -0.3f;
	 }
    }

 

Vielen dank für das Tutorial, damit lerne ich sehr viel und es macht Spass das so zu lernen.

 

LG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...