Jump to content
Unity Insider Forum

Hi ich habe ein RTS-Games Tutorial gefunden. Leider alles in Englisch.


Lordchu

Recommended Posts

Wie schon oben gesagt: Habe ich, ein sehr Tolles Unity RTS- Games Tutorial gefunden. Es ist Leider in Englisch, aber es wird gut übersetzt mit Google.

Ich habe nur Folgendes Problem. Wenn ich Die Scrips so Schreibe wie er bekomme ich Fehler. Ich habe es geschafft beim, 1 Tutorial bis auf 3 Fehler Runter zubekommen.

Ich Verstehe nur nicht ganz. Seine Script Schreib Weiße. Vlt kann sich ja einer mal die Anschauen. Und mir bitte mal Erklären, was diese Aus Sage sein soll //... Soweit ich das verstanden habe ist das eine Lücke die er füllt. Was vorher nicht drin Stand.  Wichtig diese Seite ist keine Werbung ( https://minapecheux.com/wp/making-a-rts-game-1-placing-buildings-unity-c/ ). Da bekommt man sehr gute Tipps.  Leider Alles in Englisch. Ich habe auch schon mit dem Ersteller geschrieben. Er meinte ich habe einen Null Fehler. Das war im Globals. sc Script.   Wo er den Terrain-Satz mit rein schreibt. 

Creating the BuildingPlacer.cs script and doing the raycast

Let’s create a new C# file called BuildingPlacer.cs . Since it doesn’t correspond to any particular game object but is somewhat global to the scene, we will:

  • create a new “empty game object” in the scene
  • name it “GAME” to show it has scripts that are global managers of the game state
  • add the BuildingPlacer script to it

Then, we’ll add this code to the BuildingPlacer script:

 

Dann folgen 2 Scrips ich Vermute ja, das die Beiden in einem sind habe ich auch gemacht.  

Nur habe ich dann in diesen Satz einen fehler, ist nicht enthalten. 

Building building = new Building(

Globals.BUILDING_DATA[buildingDataIndex]  (( ich habe das Wochenende immer mal versucht den Fehler raus zu Bekommen )) 

Ich füge entweder die beiden Scripte. Falsch zusammen oder es passt was nicht im ersten. Wenn einer mal Zeit hat. Kann sich einer die mal bitte Anschauen. Und es selber versuchen. Da er das Tutorial Jede Woche weiter führt. Er wird es auch zu Ende Bringen.  Man kann ihn auch Anschreiben in Kommentar nur Hat er meine Frage, nicht ganz Verstanden. Ich Kann kaum Englisch und bin noch Anfänger in Scripte Schreiben. Hatte mich echt gefreut das einer Mal Alles erklären will und nicht nur Halb. Mir geht es nicht ums Abschreiben.  Ich würde es ja später Erweitern. Ich würde nur gerne Verstehen wie er sie Schreibt. Damit Bei mir keine Fehler rein Kommen.  Ich Verstehe was er Machen will durch  ein Anders Tutorial das waren Videos. Nur hört er dann einfach auf, und geht nicht weiter drauf ein. Zum Lernen finde ich sowas nicht Schlecht. Mfg Lordschu.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Versuchen wir es mal:

Wenn du noch keinen Ordner für Scripte hast -> Rechtsklick auf Assets , dann  Create/Folder  klicken und den Ordner Scripts nennen.

Im Ordner wieder rechtsklicken und dann Create/C# Script klicken.

Wichtig !!  Nicht mehr klicken !! sondern sofort den Namen des Scripts eintippen. Unity erzeugt dann in dem Script die Klasse "BuildingPlacer".

Sollte jetzt so aussehen.

RTS_1.png.e4b89d273790a3f798732e91df0da21e.png

Create a new "empty game object" -> Rechtsklick in der Hierarchy  dann Create Empty klicken.

RTS_2.png.0fab3b30efee6d0dac0432ff79c38f94.png

Dann im Inspector in Game umbenennen.

Zuletzt Add Component klicken, zum Suchen "b" eingeben und auf dein Script klicken.

RTS_3.png.ede8477f406a1498cf96abc2090c5a18.png

Jetzt kanns weitergehen.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das war nicht das Problem ich wollte hier kein Script rein posten. Weil ich nicht weiß ob man das Darf alle Scrips. Sind ja auf der Seite frei zugänglich. 

https://minapecheux.com/wp/making-a-rts-game-1-placing-buildings-unity-c/  .Und da sind meine Probleme, Ich verstehe nicht ganz wie er diese Zusammen Baut. Ich bin, wie oben genannt bei dem abschnitt. Mit BuildingPlacer .cs  Und da Hat er 2 Scrips. Die zusammengefügt werden müssen, das habe ich gemacht. Aber es kommen fehler. Mein verdacht ist das : MonoBehaviour Nur dieses Wort löschen Muss. Weil in den ersten Scrips nutzt Er das Nicht. Wie soll dann Das Script, Das andere finden oder Liege ich da Falsch.?? Er Baut mit weiteren Erklärungen seine Scripte zusammen. Es sind ja keine Neunen C# Scripte. Er erweitert Ja seine Scrips um Sätze. Oder ändert sie ab. Die Bedeutung ist mir schon klar. Nur nicht wo genau er was ändert.  Und das ist nur der erste Part er hat schon 10 stück gemacht. Und macht weiter. Kurz gesagt hier lernt man was Und Kopiert nicht nur die Scripte Man muss selber überlegen wo er was ändert. Ich Vermunte aber das er selber einen fehler im Script hat.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo 

 

Was heißt denn zusammengefügt? Kopiert er den Text? Liegen beide auf dem gleichen gameobject? 

 

Monobehavior ist die Klasse von der deine Klasse erbt. Das braucht man manchmal und manchmal eben nicht. Wenn du die unity Events brauchst, musst du von MB erben. 

Edit... Schreib doch deine Texte mit Word oder so. Dann bekommst du Vorschläge zur Rechtschreibung und man den Texten besser folgen. 

Christoph 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich kopiere Hier nur die texte die vor den Scripten stehen.

Erstellen einiger Referenzgebäudedaten
Es ist Zeit, wirklich mit dem Codieren zu beginnen! Als erstes möchten wir eine Liste aller verfügbaren Gebäudetypen haben. Definieren wir also eine Klasse, die einige abstrakte Gebäudedaten (einen Gebäudetyp) darstellt. Es muss nicht von der MonoBehaviour-Klasse erben, da es nur einige Daten enthält: ( Übersetzt worden schon)

1 Script.

// BuildingData.cs

 

using System.Collections.Generic;

 

public class BuildingData

{

private string _code;

private int _healthpoints;

 

public BuildingData(string code, int healthpoints)

{

_code = code;

_healthpoints = healthpoints;

}

 

public string Code { get => _code; }

public int HP { get => _healthpoints; }

}

Jetzt können wir eine global zugängliche Variable mit einer Liste von Referenzbildungsdaten erstellen. Heute definieren wir sie nur manuell, aber letztendlich sollten wir diese Referenzen aus einer leichter zu ändernden Datendatei laden. Um diese globalen Variablen zu zentralisieren und einfacher abzurufen, erstellen wir eine neue C # -Datei: Globals.cs. Und diese Datei enthält statische Variablen oder Funktionen, damit sie aufgerufen werden können, ohne das Skript zu instanziieren.

2 script:

// Globals.cs

 

public class Globals

{

 

public static BuildingData[] BUILDING_DATA = new BuildingData[]

{

new BuildingData("Building", 100)

};

 

}

Erstellen von Gebäudeinstanzen
Wir haben unsere "abstrakte" Datenklasse definiert. Seien Sie vorsichtig: Es ist aus C # -Sicht nicht wirklich abstrakt, da wir es tatsächlich instanziieren, um unsere Liste der verfügbaren Gebäude zu haben. Ich meine, wir stellen diese Daten nicht direkt auf dem Bildschirm dar, sondern geben sie an unsere realen Gebäudeinstanzen weiter - die, die wir beim Ziehen und Klicken mit der Maus auf den Boden legen.

Diese Instanzen werden von einer anderen Klasse behandelt: Building:

3 script:

// Building.cs

 

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

 

public class Building

{

 

private BuildingData _data;

private Transform _transform;

private int _currentHealth;

public Building(BuildingData data)

{

_data = data;

_currentHealth = data.HP;

 

GameObject g = GameObject.Instantiate(

Resources.Load($"Prefabs/Buildings/{_data.Code}")

) as GameObject;

_transform = g.transform;

}

 

public void SetPosition(Vector3 position)

{

_transform.position = position;

}

 

public string Code { get => _data.Code; }

public Transform Transform { get => _transform; }

public int HP { get => _currentHealth; set => _currentHealth = value; }

public int MaxHP { get => _data.HP; }

public int DataIndex

{

get {

for (int i = 0; i < Globals.BUILDING_DATA.Length; i++)

{

if (Globals.BUILDING_DATA[i].Code == _data.Code)

{

return i;

}

}

return -1;

}

}

}

 Bitte weiter lesen im nächsten kommentar.

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dann können wir diese Ebene als globale Variable in unserer Datei Globals.cs definieren (wir verwenden einfach den Index der neu erstellten Ebene 8):  (((( Hier kommt das erste zusammenfügen ))

// Globals.cs

 

public class Globals

{

 

public static int TERRAIN_LAYER_MASK = 1 << 8;

// ...

 

} dieser Satz kann muss aber nicht in das Erste Script.

Anschließend fügen wir diesen Code zum BuildingPlacer-Skript hinzu: ((((((((Und hier liegt das haupt Probleme:  4 Script Teil 1)))))

// BuildingPlacer.cs 

 

using UnityEngine;

 

public class BuildingPlacer : MonoBehaviour

{

private Building _placedBuilding = null;

 

void Start()

{

// for now, we'll automatically pick our first

// building type as the type we want to build

_PreparePlacedBuilding(0);

}

 

void Update()

{

if (_placedBuilding != null)

{

if (Input.GetKeyUp(KeyCode.Escape))

{

_CancelPlacedBuilding();

return;

}

 

// ... do the raycast

}

}

 

void _PreparePlacedBuilding(int buildingDataIndex)

{

// destroy the previous "phantom" if there is one

if (_placedBuilding != null)

{

Destroy(_placedBuilding.Transform.gameObject);

}

Building building = new Building(

Globals.BUILDING_DATA[buildingDataIndex]

);

_placedBuilding = building;

_lastPlacementPosition = Vector3.zero;

}

 

void _CancelPlacedBuilding()

{

// destroy the "phantom" building

Destroy(_placedBuilding.Transform.gameObject);

_placedBuilding = null;

}

}

Wir verwenden die Variable _placedBuilding, um zu wissen, welche Building-Instanz (falls vorhanden) derzeit am Ende unseres Mauszeigers baumelt. Jetzt können wir tatsächlich den Raycast machen:   ((( Jetzt folgt ein script teil der muss in das Obere noch rein. dabei tauchen fehler auf))) 4 script teil 2.

public class BuildingPlacer : MonoBehaviour

{

 

// ...

private Ray _ray;

private RaycastHit _raycastHit;

private Vector3 _lastPlacementPosition;

// ...

 

void Update()

{

if (_placedBuilding != null)

{

if (Input.GetKeyUp(KeyCode.Escape))

{

_CancelPlacedBuilding();

return;

}

 

_ray = Camera.main.ScreenPointToRay(Input.mousePosition);

if (Physics.Raycast(

_ray,

out _raycastHit,

1000f,

Globals.TERRAIN_LAYER_MASK

))

{

_placedBuilding.SetPosition(_raycastHit.point);

if (_lastPlacementPosition != _raycastHit.point)

{

_placedBuilding.CheckValidPlacement();

}

_lastPlacementPosition = _raycastHit.point;

}

 

if (_placedBuilding.HasValidPlacement && Input.GetMouseButtonDown(0))

{

// place building                                   (((((( an dieser stelle kommt dann noch ein script teil rein. ))))

}

}

}

}

https://minapecheux.com/wp/making-a-rts-game-1-placing-buildings-unity-c/  

auf dieser Seite ist das Orginal in Englisch. Alles gut erklärt wie gesagt nur verstehe ich nicht wo genau er die Script´s zusammen Baut. ohne das Fehler Passieren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

chrische5   Englisch ist in der Hinsicht das Kleinste übel. Ich komme mit Unity soweit klar. Nur noch nicht ganz mit dem Programmieren. Das wird auch noch Dauern. Aber ein Tutorial zu Finden. Was auch zu Ende Gebracht wird ist Schwer genug. Es gibt viele die was Anfangen und dann einfach Aufhören.   Und das finde ich nicht Richtig. Es muss ja kein Fertiges Game Programmiert.  Werden das Verlage ich nicht mal.  Wenn die Grundfunktionen soweit funktionieren. Das man selber, Weiter machen kann. wie Neue Gebäude usw. Zufügen. Oder Verstanden hat wie man Neue Items einfügt. Finde mal Jemanden der sich heute noch Die Zeit nimmt. Und einem das Erklärt.  Viele Fangen was an und Bringen nie was zu Ende. Woran liegt das  ein Game besteht nicht nur Aus der Programmierung Alleine. Grafiken Sound usw.. gehören auch dazu. Ein Spiel entwickelt man nicht mal Übernacht.   Dazu muss ich Sagen das Unity Engine teilweise nicht mal ausgelegt ist für alle Game Arten zum Programmieren. Sie hat auch ihre Grenzen. Und es gibt immer wieder Leute auf der Welt!! die es schaffen. Das Maximale daraus zuholen. Was zu Programmieren was nicht gedacht war.   

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo

 

Ich kann mich nur wiederholen: Das ist, für mich, alles total wirr und verstehe überhaupt nicht, was dein Problem ist. Kannst du das nicht in einen kurzen Post packen. Eventuell mit einem kurzen Beispiel, welches man nachvollziehen kann? Code sollte in codetags gemacht werden, um leserlicher zu sein. Die Texte scheinen mit einem Übersetzer übersetzt - das ist alles total konfus und macht es furchtbar kompliziert, dir zu helfen.

 

Christoph

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 12 Stunden schrieb Lordchu:

Dazu muss ich Sagen das Unity Engine teilweise nicht mal ausgelegt ist für alle Game Arten zum Programmieren.

giphy.gif

Doch... doch, schon. Ist nur nicht alles gleich einfach. Aber da kann ja irgendwie Unity auch nix für.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Sascha  Du hast recht dafür kann Unity nichts. Die Unity Engine nimmt einen sehr viel Arbeit ab. Dafür bin ich sehr Dankbar. Wenn man Alles was sie Kann noch Programmieren müsste würde man Keine Games erschaffen können. 

 

Ich wiederhole mich nicht nochmal,  chrische5 wenn es für dich zuschwer ist es Okay. Ich poste hier auch nicht nochmal die Seite wo da Tutorial ist.  Hat keinen sinnen Du kannst sicher gut Programmieren. Ich kann es nicht und habe Probleme damit. Das heißt für mich einfach Lernen Lernen und die fehler selber lösen. Ich Danke dir Für deine Bemühungen.  Nächste Woche habe ich Urlaub. Dann werde ich mich mal an die Arbeit machen.  Und Lerne Grund Sachen von Programmieren. Und wenn ich es dann immer noch nicht verstehe. Dann Lerne ich wiederwillig Englisch weiter. Ich mag diese Sprache nicht. Und da fällt es einem Schwer sie zu Lernen. 

 

Da es so Schwer Scheint. Meine Sätze zu Verstehen, Schließe ich hiermit das Thema.  Und werde kein Weiters Aufmachen. Ich beiße mich Alleine Durch Habe ich auch bei Japanisch Geschafft. Ich verstehe über 3000 Japanische Wörter. Mir Ging nur ums Verstehen nicht ums Sprechen.  Dann werde ich auch hier Lösungen finden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...