Jump to content
Unity Insider Forum

dewa

Members
  • Content count

    124
  • Joined

  • Last visited

Everything posted by dewa

  1. Also grade die Grafiken beim RPG sind extrem zeitintensiv. Design, modeling, retopology, rigging, animationen... Da braucht man schon gut ein ganzen Monat für einen ordentlichen Charakter... Bei so einem riesigen Projekt sollte man immer bedenken das grade der Weg zum fertigstellen des Spiel das Ziel sein sollte. Ich habe es bislang immer so gemacht, einfach mit dem Game anfangen, sobald man nicht mehr weiter kommt ein tutorial dazu anschauen, somit hat man halt sofort Bezug vom tutorial zum Projekt. Und bloß nicht entmutigen lassen wenn mal was nicht klappt, jedes Problem ist früher oder später mal gelöst, man muss nur dran bleiben ✌️ Zu iclone CharakterCreator, den habe ich mir damals auch zugelegt, ich meine der preiß liegt ungefähr bei 500Euro um die models auch in unity exportieren zu können. Da musst du aufpassen, einige Lizenzen sehen halt nur vor vor Charakter creator nach iclone zu exportieren, also ist 3dx change noch notwendig dafür...
  2. Hallo zusammen, also ich entwickle grade einen "Trainings Simulator". Man kann dort mit einem Charakter in einem Fitnessstudio trainieren und durch Training verändert sich der Charakter. Das Spiel soll erstmal für Android veröffentlicht werden. Jetzt zur eigendlichen Frage. Da alle Information zum Charakter auf einem Server gespeichert werden kann ich auch alle Informationen der Freunde die man geaddet hat(Freundschaftsliste ingame) leicht anzeigen lassen. Aber im Spiel gibts noch die Funktion das man gegen Freunde Bankdrücken etc. trainieren kann um zu schauen wer stärker ist. Nun frage ich mich ob es überhaupt Sinnvoll ist, das noch irgendwelche Informationen von Freunden angezeigt werden sollen, weil man halt schon vorher erahnen kann wie gut der Freund ist... Oder sollte ich mich nur auf das nötigste beschränken und nur den Level des Freundes anzeigen lassen??
  3. dewa

    Performance ruckelt

    Um die draw calls zu verringern würde ich auch versuchen soviel statische objekte wie möglich zusammen zu fügen, am besten die draw calls auf unter 100 reduzieren, wobei das wahrscheinlich auch noch zu viel ist. Auf meinem galaxy s5 ruckelt es auch bei 30k tries und 40 draws 😁
  4. Hallo zusammen, habe mal eine Frage bezuglich des wechselns von Kleidungsstücken. Ich habe einfach keinen Anhaltspunkt. Modelliert man diese einfach mit in z.B in Maya und macht diese beim Wechsel Ingame einfach Unsichtbar/Sichtbar? Geht es auf die leistung wenn ein Charakter z.B 20 Deaktivierte Shirts an hat? Oder Ignoriert Unity Deaktivierte Objekte komplett? Wie setzt man es um das die Polygone unter den Klamotten verschwinden? Der Charakter verändert mit der Zeit seine Körperform, Kann man Klamotten erstellen die sich den Polygonen anpassen oder müssen für die anderen Formen extra kleidung erstellen? Wie läuft das dann mit der Animation? Sorry für die vielen Fragen 🤓
  5. dewa

    Danke

    jopp, kann mich da nur anschließen. Ohne dieses Forum hätte ich schon lange keine Haare mehr auf dem Kopf 🙏
  6. dewa

    Coroutine Wert verändern

    Hallo zusammen, ich brauch mal einen kleinen denkanstoß. Über einer Coroutine lasse ich einen Timer ablaufen. Wenn man bei Android die App verlässt stoppen die Coroutines und laufen weiter wenn man die App wieder öffnet. Es sollen aber auch Sekunden runtergezählt werden wenn man die App verlässt. Ich bin jetzt soweit das ich bei verlassen der App einen Timestamp speichere und beim öffnen den Aktuellen Timestamp nehme und einfach beide Subtrahiere, läuft auch alles soweit.😁 Nun muss ich nurnoch diesen Wert in der laufenden Coroutine abziehen... Und da liegt das Problem. Wie mache ich das??? 😣 Dauer App abwesendheit in Sekunden: public void OnApplicationPause(bool paused) { if(paused) { System.DateTime epochStart = new System.DateTime(1970, 1, 1, 0, 0, 0, System.DateTimeKind.Utc); int cur_time = (int)(System.DateTime.UtcNow - epochStart).TotalSeconds; PlayerPrefs.SetInt("Time_when_paused", cur_time); } else { TS_paused = PlayerPrefs.GetInt("Time_when_paused"); System.DateTime epochStart = new System.DateTime(1970, 1, 1, 0, 0, 0, System.DateTimeKind.Utc); int cur_time_back = (int)(System.DateTime.UtcNow - epochStart).TotalSeconds; TS_diff = cur_time_back - TS_paused; } } COUNTER: ............... { StartCoroutine(StartCountdown_Kreatin(timer_kreatin,game_paused.TS_diff)); } public IEnumerator StartCountdown_Kreatin(float timer_kreatin,int x) { currCountdownValue = timer_kreatin; while (currCountdownValue > 0) { TimeSpan kreatin_time = TimeSpan.FromSeconds (timer_kreatin); string niceTime = String.Format ("{0:00}:{1:00}:{2:00}", Math.Truncate (kreatin_time.TotalHours), kreatin_time.Minutes, kreatin_time.Seconds); slots.Slot_kreatin_text.text = niceTime; //Abwesendheit vom TIMER abziehen while (x != 0) { timer_kreatin =timer_kreatin - x; x = 0; yield return null; } yield return new WaitForSeconds(1.0f); timer_kreatin--; } } Der Counter startet nachdem alle Daten vom Server geladen worden sind. ich denke das die Coroutine nicht erkennt wenn sich aushalb ein Wert verändert, und somit Trifft der WHILE loop einfach nicht ein... Ihr könnt mir bestimmt weiter helfen.
  7. dewa

    Coroutine Wert verändern

    Das ist eine verdammt gute Idee 🧐 Somit sollte alles klappen, vielen vielen Dank 🤓
  8. Informiere dich mal über den canvas scaler, dieser sollte dir weiter helfen 👌
  9. dewa

    Performance GUI

    Mich interessiert wohl das Asset, könntest du mir bitte den link oder Namen nennen? 😁
  10. Hallo zusammen, ich versuche grade das senden von push Nachrichten am laufen zu kriegen. Wenn ich das Game über mein Samsung Galaxy s4 Starte und von meinen Server die Notification sende kommt diese am Handy, es lauft. Aber auf meinem Huawei Mate 10 Pro erscheint einfach nix. Mein Server gibt auch die Nachricht das die Notification erfolgreich abgesendet worden ist... Ich weiß einfach nicht mehr weiter woran es liegen kann. Schon mal danke
  11. Hallo zusammen, ich habe mir vorgenommen neben meinem bisherigen Projekt noch ein kleines Webbrowser Game zu machen, es soll nur ein kleiner multigame Racer werden. Mir ist es wichtig das ich nicht auf Dienste wie Photon etc. zurückgreife, weil ich einfach mal das richtige Networking lernen möchte. Nun stell ich mir die Frage wie ich dies am besten umsetze. Es müssen ja nur die Koordinaten der Autos synchronisiert werden? Einen Vserver kann man sich ja mieten, aber wie gehts dann weiter? Muss ich auf dem Server dann Spezielle Software Installieren? Bzw gibt es eine Software die das alles managed (Raumerstellung etc)?? Kennt ihr gute Bücher zu diesem Thema? Schon mal vielen Dank
  12. Das sollte so machtbar sein 👌🏻 Grade in der Lernphase würde ich die Ideen einfach mal versuchen, wenn das später mal was nicht klappen sollte kannst du immernoch hier im Forum fragen. Aber die Grundidee der Umsetzung hört sich gut an.
  13. dewa

    Cooldown verändert sich

    Problem gelöst, Wenn ich die Freundschaftsliste öffne wird die funktion "supplemente_uberprufen()" aufgerufen, dort wird noch mal abgefragt ob der Cooldown aktiv ist und nimmt die alten gespeicherten Timestamps anstatt neue vom Server anzufragen... Man kommt ganz schön durcheinander wenn soziemlich alles nur aus timestamps besteht Danke für deine Hilfe
  14. Hallo zusammen, ich habe folgendes Problem. Ich habe innerhalb des updates() eine cooldown Funktion die einfach von 20s runterzählt bis 0s. Soweit läuft auch alles, aber wenn ich nun z.B die Freundschaftsliste Ingame öffnen springt der Cooldown wieder hoch von z.B 10s auf 12s... Ich weiß absolut nicht wie ich dies beheben kann. Beim öffnen der freundschaftsliste werden auch keine Parameter für den Cooldown verändert schon mal vielen dank
  15. dewa

    Cooldown verändert sich

    Der Wert "Timer_eiweiß" wird jeweils zwei mal gesetzt. Beim kauf des Ingame Objects wo dann anschließend die Cooldown anfängt. Oder beim Start des Spieles. // Beim Ingamekauf einen Timestamp in der Online SQL datenbank speichern und gleichzeitig den Aktuellen Timestamp vom server laden. public IEnumerator eiweiß_ts_coro(string Username, string Passwort) { WWWForm form = new WWWForm(); form.AddField("username", Username); form.AddField("passwort", Passwort); WWW webRequest = new WWW("http://hosti...........weiß.php", form); yield return webRequest; if (webRequest.text != null) { Debug.Log(webRequest.text); eiweis_ts = (int.Parse(webRequest.text)); ts_vergleichen.aktueller_ts=(int.Parse(webRequest.text)); eiweiß = false; meine_daten.Geld = meine_daten.Geld - 25; meine_daten.Geld_text.text = meine_daten.Geld.ToString(); eiweiß_boni_pruf (); } } //Solange der Aktuelle Timestamp+3600 kleiner ist als der Gepeicherte eiweiß Timestamp ist der Cooldown noch am zählen //Beim Start des Spiels wird ernaut der Aktuelle und der eiweiß Timestamp vom server abgefragt und diese Funktion ernaut aufgerufen um zu überprüfen wieviel Zeit vergangen ist. public void eiweiß_boni_pruf() { if (ts_vergleichen.aktueller_ts < eiweis_ts+3600) { eiweißvorrat = (true); ts_vergleichen.timer_eiweiß =(eiweis_ts+3600)-ts_vergleichen.aktueller_ts; slots.slot (); } else { eiweißvorrat = (false); } } Es läuft alles Perfekt, nur wenn ich die Feundschaftsliste ( "Freunde_aktual()" ) öffne springt der Cooldown halt paar sekunden nach oben.
  16. dewa

    Cooldown verändert sich

    void Update () { //Eiweiß float to HH:MM:SS if (timer_eiweiß > 0 & shop_auswahl.eiweißvorrat) { TimeSpan eiweiß_time = TimeSpan.FromSeconds (timer_eiweiß); timer_eiweiß -= Time.deltaTime; string niceTime = string.Format ("{0:D2}:{1:D2}:{2:D2}", eiweiß_time.Hours, eiweiß_time.Minutes, eiweiß_time.Seconds); slots.Slot_eiweiß_text.text = niceTime; } if (timer_eiweiß < 0 & shop_auswahl.eiweißvorrat) { shop_auswahl.eiweißvorrat = (false); slots.slot (); } } Freundschaftsliste //Wenn Freundschaftsliste nicht geöffnet, Lade Daten vom SQL Server public void Freunde_aktual() { if (Freunde_anim.GetCurrentAnimatorStateInfo (0).IsName ("Freunde_slide_in")) { freunde_anzeigen (); } else { laden_symbol.SetActive (true); StartCoroutine (Freunde_laden_coro (init_regist.Username, hash_helper.Md5Sum (init_regist.Passwort))); } } //Dateien vom SQL Server public IEnumerator Freunde_laden_coro(string Username, string Passwort) { Debug.Log(Username); WWWForm form = new WWWForm(); form.AddField("username", Username); form.AddField("passwort", Passwort); WWW webRequest = new WWW("http://hosting3381.af923.netcup.net/freunde_laden.php", form); yield return webRequest; Debug.Log(webRequest.text); freunde_laden.anzahl_freunde = 0; string[] splitarray = webRequest.text.Split('|'); freunde_laden.anzahl_freunde = (splitarray.Length) - 1; Debug.Log("wieviele freunde? " + freunde_laden.anzahl_freunde); freunde_laden.anzahl_freunde_text.text = freunde_laden.anzahl_freunde.ToString()+"/16"; foreach (Transform child in freunde_laden.ScoreScrollList.transform) { Destroy(child.gameObject); } for (int i = 0; i <= (freunde_laden.anzahl_freunde - 1); i++) { GameObject Scorepanel; Scorepanel = Instantiate(freunde_laden.ScoreEntryPanel) as GameObject; Scorepanel.transform.parent = freunde_laden.ScoreScrollList.transform; Scorepanel.transform.localScale = new Vector3(1.03f, 1.03f, 1.03f); Transform ThisName = Scorepanel.transform.Find("Name"); Transform ThisEXP = Scorepanel.transform.Find("Exp"); Transform ThisLVL = Scorepanel.transform.Find("Level"); Transform Thisbalken = Scorepanel.transform.Find("EXP_BALKEN"); Transform Thischar_bild = Scorepanel.transform.Find("char_bild"); //Freunde Daten zuordnen Text EXP_freund_txt = ThisEXP.GetComponent<Text>(); Text Name = ThisName.GetComponent<Text>(); Text Level = ThisLVL.GetComponent<Text>(); //EXP Balken Image Balken = Thisbalken.GetComponent<Image> (); Image char_bild = Thischar_bild.GetComponent<Image> (); Name.text = splitarray[i]; string Freund = (splitarray[i]); StartCoroutine(Freunde_exp(Freund,Level,Balken,char_bild,EXP_freund_txt)); } freunde_anzeigen (); ts_vergleichen.suplemmente_prufen (); } //Wenn Freundschaftsliste nicht geöffnet ist, öffne diese. public void freunde_anzeigen() { if (Freunde_anim.GetCurrentAnimatorStateInfo(0).IsName("Freunde_slide_in")) { Freunde_anim.SetBool("freunde_klick", false); } else { Freunde_anim.SetBool("freunde_klick", true); store.beenden_store_gm (); shop_auswahl.Info_close (); } laden_symbol.SetActive (false); } Soooo... ich hoffe das ist nicht zu viel Code
  17. Hallo zusammen, habe mal wieder einer Frage. Ich erstelle momentan eine fitness simulations app und bin momentan am überlegen ob ich auserhalb meiner app einen amazon affiliate store erstelle. Dazu habe ich nun eine Fragen, vielleicht hat jemand von euch schon Erfahrungen damit gemacht. Darf ich User von der App in mein Shop verlinken? Wenn ja, müssen dann trotzdem noch 30% meines Umsatzes an Apple/Google abgegeben werden?
  18. Hallo zusammen, ich glaube ich habe seit dem Update zur Version Unity 2017.3 .0f3 ein Problem mit meiner Post Request. public IEnumerator anmeld_coro(string Username, string hash_regist) { WWWForm form = new WWWForm(); form.AddField("username", Username); form.AddField("passwort", hash_regist); UnityWebRequest webRequestroh = UnityWebRequest.Post("http://ho***********************in.php", form); yield return webRequestroh.SendWebRequest(); Debug.Log (webRequestroh.downloadHandler.text); } Mit dem Code ist doch alles in Ordnung oder?? Ich bin mir nicht ganz sicher ob es am Update liegt weil ich versucht habe das Programm über XCode aufm IPhone zu installieren und musste deshalb "paar" Änderungen vornehmen, habe aber nix an meinem Code in C# oder in php geändert. Fehler vom Server: Notice: Undefined index. Es werden wohl aus irgendeinem Grund die form Daten nicht zum Server gesenden. Schon mal danke
  19. dewa

    WWW.Form sendet nix

    Also ich habe mir Unity 2018(beta) Installiert und mit dieser Version Funktioniert wieder alles wie gewollt. Werde wohl bei 2018 bleiben und mich einfach damit abfinden
  20. dewa

    WWW.Form sendet nix

    Ich habe zum beispiel über eine Website eine Webrequest gestartet und die Funktionierte Also kanns ja nicht am Server liegen. Ich habe jetzt Unity deinstalliert und lade mir eine ältere Version runter. Mal schauen ob es dann wieder Funktioniert.
  21. dewa

    WWW.Form sendet nix

    Hat keiner einen Rat?? Ich weiß bei dem Problem absolut nicht weiter
  22. dewa

    IFit Fitness Game

    Nein Das habe ich erstmal nur als Lückenfüller genommen Vorm Release werde ich dort mal um Erlaubniss fragen ^^
  23. Hallo zusammen, ich stelle mal auch mein Projekt vor Es handelt sich , wie des Thema schon beschreibt um ein Fitness Spiel. Man startet "unsportlich" und kann sich im Spiel Trainieren. Dazu hat man verschiedene Übungen. Nebenbei kann man auch Eiweiß, Kreatin nehmen um seine Trainingsergebnisse zu verbessern. Diese kann man für Coins kaufen die man entweder durchs Werbung schauen bekommt oder für Level ups Das Trainieren kostet Kcal welche sich alle 24h um einen bestimmten betrag erhöhen wenn man sich ins Spiel einloggt. Sobald die Kcal zur verfügung stehen bekommt man eine Push notification. Auserdem kann man jede Übung nur alle 15 Stunden Trainieren, danach hatt meine eine Art Cooldown. Diese werden mit Timestamps die vom Server kommen errechnet. Je mehr man Trainiert desto höher steigt die "Belastungs Anzeige", dies ist auch abhängig von der Übung. Die Belastungs reduziert sich täglich um einen gewissen Betrag. Ist diese bei 100% muss man halt warten bis man sich Erholt hat. Indem man im Shop bandagen kauft kann man diese auch reduzieren. Nebenbei hat man eine Freundschaftsliste wo das Level und Erfahrungspunkte angezeigt werden. Also beim Bild "Ubung" sieht man das das Trainieren nur über einer Gui verläuft, also man klickt auf Trainieren und Punkte werden Addiert. Beim BANKDRÜCKEN , KNIEBEUGEN, KREUZHEBEN sind aber komplette Animationen enthalten und man erfährt das Gewicht welches man Maximal stemmen kann.Diese Gewichte erhöhen sich auch mit steigender Kraft. Die Werte kann man dann auch in der Freundschaftsliste sehen und sich somit messen oder in Facebook Teilen Nebenbei wird auch noch das Gewicht des Charakters angezeigt. Ich glaube das wars Freue mich sehr auf Verbesserungsvorschläge, und noch mal ein Dank ans Forum und an den Leuten die mir bei meinen Fragen geholfen haben Android + IOS DrawCalls: 15 Tries: 40.000
  24. Am besten einfach Tutorials aus Youtube nachbauen und versuchen zu verstehen. Aber ich glaube seit Unity 2017.3 wurden die normalen HTTP gequest durch UnityWebRequest ersetzt. Also am besten damit arbeiten und nicht die falschen raus suchen.
  25. Hallo zusammen, ich habe relativ wenig Ahnung wenn es um die Sicherheit von Datenbank zugriffen geht. Ich habe mir folgendes gedacht. Ich erstelle ein Hash was sich aus Username,Passwort,Salt, und einem Timestamp von der Datenbank zusammensetzt. Also bevor man Scripte aufruft, die wichtige Funktionen haben wird erst mal der Timestamp geholt von dem letzden Datenbank zugriff. C# public init_regist init_regist; public hash_test hash_test; public void OnTriggerEnter(Collider Other) { StartCoroutine(server_ts(init_regist.Username,init_regist.Passwort)); } public IEnumerator server_ts( string Username,string Passwort) { WWWForm form = new WWWForm(); form.AddField("username", Username); form.AddField("passwort", Passwort); WWW webRequest = new WWW("http://hostin(.................).net/last_login.php", form); yield return webRequest; if (webRequest.text != null) { hash_test.last_login_ts = (int.Parse(webRequest.text)); hash_test.createhashtest (); } else { Debug.Log(webRequest.text); } } php: <?php $servername = "hahah"; $un = "hihihi"; $pw = "hohoho"; $dbname = "hehehe"; $eingelogt =false; $username = $_POST["username"]; $passwort = $_POST["passwort"]; $last_login_server= 0; $conn = new mysqli($servername, $un, $pw, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $param = $username; $stmt = $conn->prepare("SELECT passwort FROM i(...)t WHERE username LIKE ?"); $stmt->bind_param("s", $param); $stmt->execute(); $stmt->bind_result($passwort2); while ($stmt->fetch()) { if($passwort2==$passwort) { $eingelogt = true; }else{ echo "error"; $stmt->close(); $conn->close(); } } $param = $username; $stmt = $conn->prepare("SELECT last_login FROM i(...)t WHERE username LIKE ?"); $stmt->bind_param("s", $param); $stmt->execute(); $stmt->bind_result($last_login_server); while ($stmt->fetch()) { echo ($last_login_server); } $conn->close(); ?> Nachdem das C# Script den Timestamp hat wird der Hash in Unity generiert. Und zum Server geschickt. public init_regist init_regist; public hash_helper hash_helper; public trigger_ts trigger_ts; public static int last_login_ts; static string salt = "|husdhuisdh"; public void createhashtest() { string securehash = init_regist.Username+init_regist.Passwort+salt+last_login_ts ; string hash = hash_helper.Md5Sum (securehash); Debug.Log (hash); StartCoroutine(sichere_con(init_regist.Username, init_regist.Passwort, hash)); } public IEnumerator sichere_con( string Username, string Passwort, string hash) { WWWForm form = new WWWForm(); form.AddField("username", Username); form.AddField("passwort", Passwort); form.AddField("hash", hash); WWW webRequest = new WWW("http://hos(.......)h_test.php", form); yield return webRequest; if (webRequest.text != null) { Debug.Log("securehash php :" +webRequest.text); } else { Debug.Log(webRequest.text); } } zum Php Script: <?php $servername = "........"; $un = "....."; $pw = "......."; $dbname = "......"; $eingelogt =false; $username = $_POST["username"]; $passwort = $_POST["passwort"]; $csharphash= $_POST["hash"]; $salt= "|husdhuisdh"; $last_login_server= 0; $last_login_server_neu= time(); $belastung=0; $securehash= "test"; $conn = new mysqli($servername, $un, $pw, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $param = $username; $stmt = $conn->prepare("SELECT passwort FROM i(.....)t WHERE username LIKE ?"); $stmt->bind_param("s", $param); $stmt->execute(); $stmt->bind_result($passwort2); while ($stmt->fetch()) { if($passwort2==$passwort) { $eingelogt = true; }else{ echo "falsches PW"; $stmt->close(); $conn->close(); } } $param = $username; $stmt = $conn->prepare("SELECT last_login FROM i(....)t WHERE username LIKE ?"); $stmt->bind_param("s", $param); $stmt->execute(); $stmt->bind_result($last_login_server); while ($stmt->fetch()) { $securehash = $_POST["username"].$_POST["passwort"].$salt.$last_login_server; if (md5($securehash) === ($csharphash) ) { //DO STUFF! echo "ES KLAPPT"; }else{ $stmt->close(); $conn->close(); } } $stmt = $conn->prepare("UPDATE i(....)t SET last_login=? WHERE username = ?"); $stmt->bind_param('ss', $last_login_server_neu, $username); $stmt->execute(); $conn->close(); ?> Und zuletzt noch die Hash helper Class womit der Hah erzeugt wird. public string Md5Sum(string strToEncrypt) { System.Text.UTF8Encoding ue = new System.Text.UTF8Encoding(); byte[] bytes = ue.GetBytes(strToEncrypt); // encrypt bytes System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider(); byte[] hashBytes = md5.ComputeHash(bytes); // Convert the encrypted bytes back to a string (base 16) string hashString = ""; for (int i = 0; i < hashBytes.Length; i++) { hashString += System.Convert.ToString(hashBytes[i], 16).PadLeft(2, '0'); } return hashString.PadLeft(32, '0'); } Ich merke grade das es sehr viel Code ist, sorry aber wollte lieber mal den kompletten ablauf posten. Ist das mit dem Hash + Timestamp so in Ordnung? Reicht das als Sicherheit aus??
×