Jump to content
Unity Insider Forum

rentox

Members
  • Content count

    12
  • Joined

  • Last visited

Community Reputation

3 Neutral

About rentox

  • Rank
    Member
  1. rentox

    RTS survival

    Hallo zusammen, gerne wollte ich euch kurz mein erstes Projekt vorstellen. Beschreibung: Man startet in seinem eigenen Dorf und drei Dorfbewohnern. Jeden Tag wird pro Dorfbewohner Nahrung verbraucht und jeder Dorfbewohner benötigt ein Haus über dem Kopf. Von Zeit zu Zeit kommen neue Personen in die Siedlung diese können aufgenommen oder Abgelehnt werden. Die Dorfbewohner Männer und Frauen haben verschiedene Werte: - HP (wenn auf null stirbt die Person zb. durch Nahrungsmangel oder Angriffe in der Nacht) - Skills für die Berufe ( wenn eine Person einen Beruf genügend lange ausführt steigt der level an und die Rohstoffe können schneller gesammelt werden) - Moral - Loyalität - Alter - usw.. Es gibt folgende Berufe: - Holzfäller - Sammler - Fischer - usw.. Wir können jeder Person einen Beruf zuteilen und die Person beginnt dann Rohstoffe zu sammeln und bringt diese in ein zentrales Lagerhaus. Personen können auch als Krieger oder Range eingesetzt werden, dies ist jedoch nicht rückgängig zu machen. Die anderen Dorfbewohner müssen dann für die Nahrung welche von den Soldaten benötigt wird aufkommen bzw. diese Sammeln. In der Nacht kommen die Dämonen aus dem Boden und greifen alle Dorfbewohner welche sich nicht in einem Haus oder an einer Feuerstelle befinden an. Über die Nacht müssen die Feuerstellen durch Holz betrieben werden, ist dies nicht vorhanden erlischt das Feuer und die Dämonen stürmen in die Siedlung. Die Dämonen sind extrem stark und nahezu unbesiegbar. So ist es auch nicht möglich die Siedlung (Feuerstellen) in der Nacht zu verlassen. Häuser können von den Dämonen nicht angegriffen werden. In jedem Haus können die Plätze an die Dorfbewohner vergeben werden, diese sind dann auch ohne Feuer in der Nacht in Sicherheit. Das ist mein Prozess bis jetzt. Geplant habe ich noch folgende Funktionen: - Männer und Frauen die im selben Haus wohnen können verheiratet werden (Nachname wird ersetzt) - Eheleute können Kinder bekommen wenn im Haus genügend Platz vorhanden (Nachname wird übernommen) Kinder können nicht arbeiten und werden erwachsen. - Es gibt andere Siedlungen und Schauplätze welche am Tag besucht werden können, Reisen in der Nacht empfiehlt sich weniger. - Andere Dörfer können überfallen werden, sind feindlich oder freundlich gestimmt Das ist mein erstes Projekt mit Unity und leider entspricht es von den Funktionen und vom Umfang her überhaupt nicht mit meinen Fähigkeiten. Ich hatte wohl etwas zu ambitionierte Ziele gesetzt, habe gelernt und viel Fehler gemacht. Bevor ich das Projekt nun einstelle wollte ich gerne mal den Status präsentieren. Die Screenshots habe ich leider momentan nicht dabei, dafür einen kleinen Video: Screens:
  2. There should be 'Patria-TerraIncognita_Data' folder next to the executable Da fehlt wohl noch der Folder
  3. rentox

    Anfängerfragen bzgl eigenem Spiel

    Hi, wenn es um Grundlagen im Bereich C# geht finde ich die "microsoft virtual academy" sehr gelungen: http://www.microsoft...app-development Videos gibt es in DE und EN, hier mal zwei "Lehrgänge" für einen "Einsteiger": http://www.microsoft...beginner-mit-c- http://www.microsoft...r-programmierer Ab und an etwas langgezogen. Edit: In der virtual academy gibt es auch Unity Videos, da würde ich aber die Videos von unity3d.com/learn/ vorziehen.
  4. Da würde ich gerne noch eine Frage nachreichen. Also wäre sowas falsch? Auf dem Mauer GameObject: void OnCollisionEnter (Collision col) { if(col.gameObject.name == "PlayerOderSonstwas") { // call function from parrent } } Auf dem parrent dann eine Funktion welche für alle Mauer Teile verwendet wird. Also sollte die Funktion direkt auf jedem "Mauer" GameObject sein und nicht einmalig auf dem Parrent?
  5. rentox

    Chrome Addon: Automatischer Ablauf

    Sehr schön, ich habe auch schon MacroX verwendet um excel Listen mit Inhalten aus dem Internet abzufüllen. Kann auch ganz nützlich sein: http://www.macrox.de/
  6. rentox

    Chrome Addon: Automatischer Ablauf

    iMakro könntest du mal testen: https://chrome.google.com/webstore/detail/imacros-for-chrome/cplklnmnlbnpmjogncfgfijoopmnlemp/reviews
  7. rentox

    Heroes of the Storm - Beta Keys

    Bin schon bei der Beta dabei und habe 2x4 keys via newsletter bekommen.
  8. Hallo zusammen, habe noch drei Beta keys zu vergeben: 8WKNTG-PYNK-PT4V4H-M2CV-YVH24D CKK2K9-KEKM-7NJV82-C72Z-DNVE6W DMZGTJ-WN9Y-BRMVRP-E7CF-GJGEVM bitte kurze Rückmeldung wenn jemand einen Key verwendet, ich werde ihn dann hier austragen. Grüsse
  9. rentox

    Platformer Tutorial

    Kein Tutorial - aber um mal reinzuschauen ist das 2D Platformer Projekt von Unity ganz nett: https://www.assetstore.unity3d.com/en/#!/content/11228 Und dann gibt es auch noch das 2D Ressource Pack: https://www.assetstore.unity3d.com/en/#!/content/18684 Falls du die noch nicht kennst. Grusse
  10. also sowas: int score; if (score > 100) { loadLevel("level_1"); } http://docs.unity3d.com/ScriptReference/Application.LoadLevel.html
  11. rentox

    C# Code Analyse - Anfänger

    Wow, vielen Dank für die Inputs! Das mit den Referenzen (zwischenspeicher) muss ich mir mal im Detail anschauen wie das, wie beschrieben, eleganter gelöst werden kann. Zu beginn habe ich wirklich alles kommentiert. Das hat vor allem mit meinem fehlende Wissen zu tun. Somit werde ich in Zukunft "basics" wie beispielsweise "++" nicht mehr kommentieren: //timer = timer + 1 timer++; Bei meinen ersten Gehversuchen mit C# haben mir die Kommentare sehr weitergeholfen - ich denke sobald man etwas beschreiben kann, hat man es auch verstanden. Okey - sieht doch gleich viel verständlicher aus - Danke! Dann habe ich noch das hier gefunden (DRY): http://www.clean-cod...e/Tugenden.ashx Vielen Dank für eure Antworten - ich hoffe dass ich mit der Zeit auch mal etwas zurückgeben kann!
  12. Hallo zusammen, ich habe vor einiger Zeit ein kleines Unity Projekt gestartet. Mein Ziel ist es mich in C# einzuarbeiten und dabei möglichst viel zu lernen. Ausser PHP und js Basics habe ich keine Programmier-Kenntnisse. Nun wäre ich froh wenn sich jemand meinen Code anschauen könnte und mir sagen kann ob ich auf dem richtigen Weg bin. Für mich ist es extrem schwer abzuschätzen ob ich "gute" Scripts schreibe oder ob ich grobe Schnitzer verbaue. Gerne würde ich euch zwei Files zeigen: Funktion: der Spieler bewegt sich zu einer Ressource (Holz, Gold, ...) und kann diese durch anklicken einer GUI abbauen. Eine Ressource hat mehrere Werte (Name, ID, dropAfter (wie lange dauert das abbauen der Ressource), RessourceObjectItem (der Gegenstand welcher durch das abbauen gewonnen wird), Animation (welche Animation während des abbauen abgespielt werden soll)). Wenn die Ressource aufgebraucht wurde wird das Objekt zerstört. gatherRessource.cs kann auf beliebige Objekte zugewiesen werden. gatherRessourceHandler.cs wird auf ein Objekt zugewiesen, in meinem Fall (GameSettings), und verwaltet das abbauen von Ressourcen sowie die GUI anzeige. gatherRessourceHandler.cs: using UnityEngine; using System.Collections; using UnityEngine.UI; public class gatherRessourceHandler : MonoBehaviour { //define GUI public GameObject GUIGather; public GameObject GUIButtonStart; public GameObject GUIButtonStop; public GameObject GUIGatherTextBox; Text GUIGatherTextBoxText; //define Ressource Object Settings public GameObject RessourceObject; public string ressourceName; public int ressourceId; public float dropAfter; public float range; public int RessourceObjectAmount; public GameObject RessourceObjectItem; public AnimationClip gatherRessourceAnimation; //define Player and animation CharacterController character; public bool doGather; //define Script Settings public float dropTimer; //stop animation once //define Script Settings float timer; //stop animation once bool runonce = false; //define temp distance float distance; // Use this for initialization void Start () { //set status to false doGather = false; //set timer to 0 timer = 0; // get player characterController character = GameObject.FindGameObjectWithTag ("Player").GetComponent<CharacterController> (); // get Textbox from GUI GUIGatherTextBoxText = GUIGatherTextBox.GetComponent<Text>(); } // Update is called once per frame void Update () { // if none Ressource selected if (RessourceObject != null) { // get distance from player to the Ressource object distance = Vector3.Distance (RessourceObject.transform.position, character.transform.position); Debug.Log (distance); // if player is in range if (distance < range) { // activate GUI GUIGather.SetActive (true); GUIButtonStart.SetActive (true); // update text into GUI TextElement updateText(ressourceName); } else { stopGather (); GUIGather.SetActive (false); } if (doGather) { if(RessourceObjectAmount == 0) { ressourceEmpty(); }else{ dropItem (); timer = timer + 1; //timer++ Debug.Log (timer); // play animation character.GetComponent<Animation> ().Play (gatherRessourceAnimation.name); runonce = true; } } if (!doGather && runonce == true) { stopAnimation (); runonce = false; } } } void dropItem() { if (dropAfter == timer) { Instantiate (RessourceObjectItem, new Vector3 (RessourceObject.transform.position.x, RessourceObject.transform.position.y +2, RessourceObject.transform.position.z), Quaternion.identity); // ressourceObject minus drop RessourceObjectAmount --; RessourceObject.GetComponent<gatherRessource>().setRessourceObjectAmount(RessourceObjectAmount); timer = 0; } } public void startGather () { doGather = true; GUIButtonStop.SetActive(true); GUIButtonStart.SetActive(false); } public void stopGather () { doGather = false; GUIButtonStart.SetActive(true); GUIButtonStop.SetActive(false); } // call when ressource is empty public void ressourceEmpty () { RessourceObject.GetComponent<gatherRessource>().destroyRessourceObject(); stopAnimation (); stopGather (); runonce = false; GUIButtonStart.SetActive(true); GUIButtonStop.SetActive(false); GUIGather.SetActive (false); RessourceObject = null; } void stopAnimation() { character.GetComponent<Animation>().Stop (gatherRessourceAnimation.name); Debug.Log (" once"); } public void updateText(string value) { GUIGatherTextBoxText.text="Gather " + value; } } gatherRessource.cs using UnityEngine; using System.Collections; public class gatherRessource : MonoBehaviour { //define Ressource public string ressourceName; public int ressourceId; public float dropAfter; public float range; public int RessourceObjectAmount; public AnimationClip gatherRessourceAnimation; public GameObject RessourceObjectItem; public GameObject RessourceSelection; GameObject gameSettingsObject; // Use this for initialization void Start () { gameSettingsObject = GameObject.FindGameObjectWithTag ("gameSettings"); } // Update is called once per frame void Update () { } void OnMouseOver() { // right mouse button if (Input.GetMouseButtonDown(1)) { Debug.Log ("Mouse is over ressource"); // set gameobject gameSettingsObject.GetComponent<gatherRessourceHandler> ().RessourceObject = gameObject; gameSettingsObject.GetComponent<gatherRessourceHandler> ().ressourceName = ressourceName; gameSettingsObject.GetComponent<gatherRessourceHandler> ().ressourceId = ressourceId; gameSettingsObject.GetComponent<gatherRessourceHandler> ().dropAfter = dropAfter; gameSettingsObject.GetComponent<gatherRessourceHandler> ().range = range; gameSettingsObject.GetComponent<gatherRessourceHandler> ().RessourceObjectAmount = RessourceObjectAmount; gameSettingsObject.GetComponent<gatherRessourceHandler> ().gatherRessourceAnimation = gatherRessourceAnimation; gameSettingsObject.GetComponent<gatherRessourceHandler> ().RessourceObjectItem = RessourceObjectItem; // gameObject for visual selection feedback RessourceSelection.SetActive (true); // show visual Feedback for 0.5s StartCoroutine (ressourceSelectionDeactivate (0.5f)); } } public void setRessourceObjectAmount(int newRessourceObjectAmount ) { RessourceObjectAmount = newRessourceObjectAmount; } public void destroyRessourceObject() { Destroy (gameObject); } IEnumerator ressourceSelectionDeactivate(float waitTime) { yield return new WaitForSeconds(waitTime); RessourceSelection.SetActive(false); } } Ich würde mich über ein Feedback und Inputs sehr freuen. Beste Grüsse
×