Jump to content
Unity Insider Forum

Nyral

Members
  • Content count

    13
  • Joined

  • Last visited

Community Reputation

1 Neutral

About Nyral

  • Rank
    Member
  • Birthday 07/08/1987

Profile Information

  • Gender
    Male

Recent Profile Visitors

1,237 profile views
  1. Nyral

    Interpolation zwischen Zellen

    Vielen Dank für die Antwort, werde mir das mal anschauen und geb dann nochmal bescheid.
  2. Nyral

    Interpolation zwischen Zellen

    Hallo, ich habe ein 2D Grid(2D Array) das aus 100x100 Zellen besteht. Die Ausgangsfarbe der Zellen ist dabei Blau. Jetzt kann ich die Zellen von Blau auf Gelb färben, wenn ich auf die gewünschte Zelle klicke. Das Funktioniert schon. Mein Problem ist das dass registrieren des Mausklicks und das anschließende umfärben der Zelle im Update passiert. Wenn ich jetzt schnell mit gedrückter Maustaste über das Feld fahre, werden nur die Zellen umgefärbt, wo sich der Mauszeiger zur Zeit des Update befunden hat. Wie Realisiere ich jetzt am besten das die Zellen zwischen den verschiedenen Mauspositionen umgefärbt werden bzw. wie Interpoliere ich am besten zwischen den Zellen? Mein Code Snippet zum umfärben einer Zelle beim Klick mit der Linken Maustaste (das Script hängt bei meinem GameManager GameObjekt): void Update() { if (Input.GetMouseButton((int)MOUSEBUTTONS.LEFT)) { Vector2 TempRayPos = new Vector2(Camera.main.ScreenToWorldPoint(Input.mousePosition).x, Camera.main.ScreenToWorldPoint(Input.mousePosition).y); RaycastHit2D TempHit = Physics2D.Raycast(TempRayPos, Vector2.zero, 0f); if (TempHit.collider != null) { Cell TempCell = TempHit.transform.GetComponent<Cell>(); if (TempCell) { //Hier geschied dann das umfärben der Zelle } } } }
  3. Du könntest das mit dem Laufen ähnlich wie mit dem Menü lösen. Wenn das Menü geöffnet ist lässt du einen Flag setzen. In deinem Movement Script fragst du dann den Flag ab. Wenn dieser gesetzt ist, dann braucht er den Raycast nicht senden und das laufen beginnen. Ist dieser nicht gesetzt dann wird der Raycast gesendet und der Char bewegt sich.
  4. Sry für den weiteren Doppelpost aber das Thema kann nun geschlossen werden. Habe das Problem nun gelöst. Habe für den Upload des Scores die Hilfsklasse "WWWForm" von Unity verwendet die die Datenübertragung zu einem Server managed. So sieht nun das überarbeitete Unity script aus: IEnumerator SetScore(string _name, int _score, string _setScorePhpURL) { //Set the upload flag hsCurrentHighscoreConnection = HIGHSCORECONNECTION.HC_UPLOADINGSCORE; //Create the hash string strHash = MD5Sum(_name + _score + strSecretKey); //Helper class upload to server WWWForm wwwForm = new WWWForm(); wwwForm.AddField("name", _name); wwwForm.AddField("score", _score); wwwForm.AddField("hash", strHash); WWW wwwHighscoreServer = new WWW(strSetScoreURL, wwwForm); //Set the score yield return wwwHighscoreServer; //Check the score upload if (wwwHighscoreServer.error != null) { hsCurrentHighscoreConnection = HIGHSCORECONNECTION.HC_ERROR; Debug.LogError("Upload highscore error: " + wwwHighscoreServer.error); } else { //Set upload is done flag hsCurrentHighscoreConnection = HIGHSCORECONNECTION.HC_UPLOADISDONE; wwwHighscoreServer.Dispose(); } } Das php file habe ich wie folgt angepasst: <?php $isDebug = 0; // 1 = Debug output is on; 0 = Debug output is off $db = mysql_connect('host', 'database', 'pw') or die ('Could not connect: ' . mysql_error()); mysql_select_db('table') or die ('Could not select database'); $name = mysql_real_escape_string($_POST['name'], $db); $score = mysql_real_escape_string($_POST['score'], $db); $hash = $_GET['hash']; $secretKey = "secret"; $real_hash = md5($name . $score . $secretKey); if($real_hash == $hash) { $query = "insert into table values (null, '$name', '$score');"; $result = mysql_query($query) or die ('Query failed: ' . mysql_error()); if($isDebug == 1) echo "Insert user score is done."; } if($isDebug == 1) echo "Ende set user score script"; ?> So funktioniert der Score upload sowohl daheim im W-Lan sowie mit dem Handynetz.
  5. Du könntest ein Flag setzen lassen wenn du in einem Untermenü bist. Und das Hauptmenü darf nur aufgerufen werden wenn du "ESC" drückst und das Flag nicht gesetzt ist. So in der Art: public class ToggleMenu : MonoBehaviour { public GameObject gMainMenu = null; public GameObject gSubMenu = null; bool bIsMainMenuOpen = false; // Use this for initialization void Start () { gMainMenu.SetActive(false); gSubMenu.SetActive(false); } // Update is called once per frame void Update () { if (Input.GetKeyDown(KeyCode.Escape) && !bIsMainMenuOpen) { gMainMenu.SetActive(!gMainMenu.activeSelf); } else if (Input.GetKeyDown(KeyCode.Escape) && bIsMainMenuOpen) { gSubMenu.SetActive(!gSubMenu.activeSelf); gMainMenu.SetActive(!gMainMenu.activeSelf); bIsMainMenuOpen = false; } } public void ToggleMenuState(GameObject _menu) { _menu.SetActive(!_menu.activeSelf); } public void SetSubMenuFlag(bool _state) { bIsMainMenuOpen = _state; } } Wenn du ESC drückst und das Flag nicht gesetzt ist wird das Hauptmenü angeschalten bei nochmaligem drücken wird es wieder deaktiviert. Die Methoden "ToggleMenuState" gibst du zweimal den OnClick Listener des entsprechenden Untermenu Buttons. Als Parameter einfach einmal das Untermenu Gameobjekt und einmal das Haupmenu Gameobject geben. Ausserdem gibst du dem OnClick Listener noch die Methode "SetSubMenuFlag" als Parameter dann den Hacken auswählen. Die Methode "ToggleMenuState" macht nichts anderes als das Gameobjekt das als Parameter übergeben wurde an bzw. auszuschalten. Dazu Toggelt es den bool wert den "gameobjekt.activeSelf" zurückgibt. Und mit der Methode "SetSubMenuFlag" kannst du das Submenu flag setzen. Wenn nun das entsprechende Untermenü angezeigt wird und du nun nochmal "ESC" drückst landest du wieder im Hauptmenü. Dies wird mit dem zweiten if Statment realisiert. Hier wird nichts anders gemacht als nochmal überprüft ob du die "ESC" Taste gedrückt hast und ob das Submenü flag gesetzt wurde. Wenn beides eintrifft dann wird das Untermenu/Hauptmenü wieder ausgeschalten /eingeschalten bzw. der "gameobjekt.activeSelf" wert getoggelt. Sollte nun das Untermenü noch zusätzlich z.B über einen "Back" Button verlassen werden dann brauchst du nichts anderes zu machen als dem OnClick Listener zweimal die Methode "ToggleMenuState" mit den ensprechenden Menüpunkten und die Methode "SetSubMenuFlag" ohne ausgewählten Haken geben. Hoffe du hast es verstaden wie ich es meine. Edit: Habe das ganze noch etwas erweitert damit mehrere Untermenüs gehen und nicht nur eins. Hier das Unitypackage dafür: MainMenu.rar
  6. Keiner eine Idee woran das liegen könnte?
  7. Nyral

    Raumschiff Steuerung RTS-Game

    Hallo, hab mal was zusammen gebastelt, wie du es brauchst. Wird die rechte Maustaste gedrückt, wird ein Raycast von der Camera zu der Mauszeiger Position im World space gesendet. Dann speichere ich diese Position in einer Vector3 Variable. Zu diesem Wert bewegt sich dann das Raumschiff. Dabei bleibt der y Wert immer gleich. Der Flieger fliegt immer auf der gleichen Ebene. Drückt man rechts Strg, lässt sich die y Ebene durch bewegen der Maus in der Y Achse verändern. Lässt sich zwar noch um einiges verbessern aber damit der Jäger durch den Raum fliegt sollte es reichen. public class MoveTo : MonoBehaviour { public float speed = 10f; Plane groundPlane = new Plane(Vector3.up, Vector3.zero); Vector3 ClickPos = Vector3.zero; bool bIsMouseClick = false; // Use this for initialization void Start () { } // Update is called once per frame void Update () { if (Input.GetMouseButtonDown(0)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); float rayDistance; if (groundPlane.Raycast(ray, out rayDistance)) { ClickPos = ray.GetPoint(rayDistance); ClickPos.y = transform.position.y; } bIsMouseClick = true; } if (Input.GetKey(KeyCode.LeftControl) && bIsMouseClick) { ClickPos.y += Input.GetAxis("Mouse Y"); } transform.position = Vector3.MoveTowards(transform.position, ClickPos, speed * Time.deltaTime); if (Vector3.Distance(transform.position, ClickPos) <= 0.1f) bIsMouseClick = false; } } Viel Spass
  8. Danke für den link werde es mir mal anschauen. Das ist ja das komische das es funktioniert wenn ich mit dem Handy per W-Lan am Router angemeldet bin. Es aber nicht mehr geht wenn ich über das Handynetz mich verbinde. MFG Nyral
  9. Der vServer ist bei 1Blu gehostet oder was meinst du mit wo genau? Wie könnte ich das eintragen von Daten in die Datenbank sicherer machen? Könntest du mir da bitte ein Stichwort bzw. ein Beispiel geben, damit ich mir das mal anschauen kann. MFG Nyral
  10. Hallo, hoffe ihr könnt mir bei meinem Problem helfen. Bin gerade dabei ein kleines Android Spiel zu entwickeln. Das Spiel beinhaltet auch einen online Highscore. Im großen und ganzen läuft alles schon so wie es soll. Zumindest wenn ich es am PC oder Handy im eigenen W-Lan teste. Hier funktioniert der Upload und Download des Highscores einwandfrei. Wenn ich jetzt aber versuche einen neuen Highscore über das Handynetz auf meinen vServer hochzuladen bekomme ich immer den Fehler: Java.io.EOF Exception. Das Herunterladen des Highscores funktioniert dabei einwandfrei. Habe leider keine Ahnung woran das liegen könnte, da es ja über W-Lan funktioniert. Als Datenbank verwende ich MySQL die auf meinem vServer läuft. Habe mich nach diesem Tutorial für den online Highscore gehalten: Server side Highscore Mein php-file das dass eintragen in die Datenbank übernimmt: <?php $isDebug = 0; // 1 = Debug output is on; 0 = Debug output is off $db = mysql_connect('host', 'database', 'pw') or die ('Could not connect: ' . mysql_error()); mysql_select_db('table') or die ('Could not select database'); $name = mysql_real_escape_string($_GET['name'], $db); $score = mysql_real_escape_string($_GET['score'], $db); $hash = $_GET['hash']; $secretKey = "secret"; $real_hash = md5($name . $score . $secretKey); if($real_hash == $hash) { $query = "insert into table values (null, '$name', '$score');"; $result = mysql_query($query) or die ('Query failed: ' . mysql_error()); if($isDebug == 1) echo "Insert user score is done."; } if($isDebug == 1) echo "Ende set user score script"; ?> Und hier die Upload Methode in Unity: IEnumerator SetScore(string _name, int _score, string _setScorePhpURL) { //Set the upload flag hsCurrentHighscoreConnection = HIGHSCORECONNECTION.HC_UPLOADINGSCORE; //Create the hash string strHash = MD5Sum(_name + _score + strSecretKey); //Create the url string strSetScoreURL = _setScorePhpURL + "name=" + WWW.EscapeURL(_name) + "&score=" + _score + "&hash=" + strHash; WWW wwwHighscoreServer = new WWW(strSetScoreURL); //Set the score yield return wwwHighscoreServer; //Check the score upload if (wwwHighscoreServer.error != null) { hsCurrentHighscoreConnection = HIGHSCORECONNECTION.HC_ERROR; Debug.LogError("Upload highscore error: " + wwwHighscoreServer.error); } else { //Set upload is done flag hsCurrentHighscoreConnection = HIGHSCORECONNECTION.HC_UPLOADISDONE; } } Schon mal danke im voraus für eure Hilfe. MFG Nyral
  11. Nyral

    Game Challenge #3

    Mal eine Frage: In dem Thread "Über die Make a Game Challenge" steht, man soll die Größe 600x450px verwenden. Gilt das auch fÜr unser Frogger Spiel? Frage deshalb weil dort auch folgender Satz steht: und hier im ersten Post Etwas verwirrend mit den verschiedenen Regeln. Lg Sascha
  12. Nyral

    Game Challenge #3

    Mal eine frage ist es erlaubt das Game mit eigenen Ideen zu erweitern? Lg Sascha
  13. Nyral

    Game Challenge #3

    Hallo, wir sind ein zwei Mann Team und würden uns auch gerne an der Challenge versuchen. Bitte eintragen. Danke Lg Sascha
×