Jump to content
Unity Insider Forum

Elharter

Members
  • Content Count

    225
  • Joined

  • Last visited

  • Days Won

    5

Everything posted by Elharter

  1. Danke für deine ausführliche Antwort. Ich glaube das schaffe ich jetzt so auf Anhieb nicht. Mein Zugang wäre eher auf Pixel-Ebene gewesen. Die Textur und die Farbe der Pixel kann ich eindeutig auslesen und zuordnen (Beton, Gras, Sand usw) da gibt es keinerlei Überschneidungen da die Farben eindeutig sind pro Pixel. Jetzt hab ich mehr an eine Art "virtuellen" Brush/Pinsel gedacht der Bereiche ausliest und mit einer echten, ordentlichen Textur überschreibt oder überlagert und die Randbereiche wie Kanten oder Linien entsprechend abschneidet. Oder ich zeichne die Textur nach Priorität....zb: 1. Wiese, überlagern mit neuer Texture 2. Sand Und am Ende zeichne ich die vorhandene Straße über alles drüber.... Mit Shade und Co habe ich bis dato nichts gemacht. lg
  2. Stimmt - habe ich vergessen *closed hier*
  3. Hallo, hat jemand eine Idee wie ich von einer Splatprototyp-Texture, also einer Grafik die auf einem Terrain liegt, Pixel SO auslesen kann dass ich sie a) überschreiben b) überlagern kann mit einer anderen/neueren/besseren Texture? Hab da irgendwie keinerlei Zugang oder Idee. Zb alle grüne Pixel mit einer neuen Texture die ich mitlade die eben echter nach Gras aussieht. Problem ist, ich kann es eben nicht Pixel für Pixel tauschen sondern müsste es InCode entsprechend immer bis zu den Randlinien "pauschal" überschreiben. danke
  4. Aus pers. Interesse: also zb bei Patronenkugeln einer Waffe?
  5. Kannst ja gerne mal reinsehen (als Alphatester) wenn dich Top-down arcade racing game interessiert :p *ot*
  6. Etwas aufwändig das zu erklären. Es ist ein "offenes" Track-File-Format wofür es um die 5-15 Trackeditoren gibt, die alle das selbe tun am Ende. Und hierbei ist es eben so dass die Strecke 512x512 Pixel gross ist (also in einem Quadrat gefahren wird). Und je nach Skalierung alles eben kleiner wird oder größer wird. Hier ein Beispiel - Worldsize 120: Und hier das selbe mit Worldsize - 255: Ich muss das Auto also verkleinern...... Inzwischen habe ich es aber hinbekommen. Ich habe einfach alle Werte (Mass, Suspension, Angular Drag, Drag) von allen Komponenten in der Relation angepasst zur Worldsize - scheint zu funktionieren. lg
  7. Die Strecken werden außerhalb von Unity gebaut mit einem Trackeditor, sämtliche Settings speichere ich binär. Bei der Erzeugung findet sich eine "Worldscale" die alles skaliert innerhalb der Welt/Strecke. Funktioniert alles tadellos. Verwende ich Worldscale=100 (also 1:1) ändere ich nichts. Verwende ich 120, muss ich um 20% vergrössern. Das erledige ich beim instanzieren aller Objekte. Der logische Vorgang ist wie folgt: 1. Strecke wird geladen (Größe unbekannt, irgendwas zwischen 0-100% die von mir natürlich definiert sind, aber ich gebe Sie hier jetzt der Einfachheit in % an) 2. Strecke/Track/Map hat eine Worldsize von 40% bspw. 3. Car instanzieren (dieses ist designed, gezeichnet und gecoded und getestet auf eine Worldsize von 80% weil das die gängigste Größe ist) Jetzt muss ich das Auto entsprechend der Strecke auf 40% skalieren, so dass das Auto wieder zur Strecke passt vom Verhältnis. Die Strecke wird vom Spieler per Trackeditor gebaut, Worldsize ist dabei variable und erst zum Zeitpunkt des "Ladens" bekannt. Jetzt klarer?
  8. behoben public void UpdateQualifiyingScoreBoard() { QualiPanelText.text = "Quali-Drivers: "+cntOnlinePlayersLoop+"\n"; foreach (Player p in PhotonNetwork.PlayerList) { //QualiPanelText.text += "\n" + p.NickName+":"+p.GetBestLap(); // Insert Listentrys the first time if (qBestLapOrderList.Count < PhotonNetwork.PlayerList.Length) { qBestLapOrderList.Add(new qBestLapOrder(p.NickName, p.GetBestLap())); } for (int cnt = 0; cnt < qBestLapOrderList.Count; cnt++) { // Update List Entry everytime after first insert if(qBestLapOrderList[cnt].qNickname == p.NickName) { qBestLapOrderList[cnt].qBestLap = p.GetBestLap(); } } //qBestLapOrderList = qBestLapOrderList.OrderBy(qBestLapOrderList.).ToList(); //qBestLapOrderList.Sort(SortByBestLap); qBestLapOrderList.Sort((l1, l2) => l1.qBestLap.CompareTo(l2.qBestLap)); } for (int cnt = 0; cnt < qBestLapOrderList.Count; cnt++) { float tmpbestlap = qBestLapOrderList[cnt].qBestLap; int minutes_b = Mathf.FloorToInt(tmpbestlap / 60F); int seconds_b = Mathf.FloorToInt(tmpbestlap - minutes_b * 60); int milliseconds_b = Mathf.FloorToInt((tmpbestlap - seconds_b) * 100); string niceTime_b = string.Format("{0:0}:{1:00}:{2:00}", minutes_b, seconds_b, milliseconds_b); if (qBestLapOrderList[cnt].qBestLap > 1) { QualiPanelText.text += "P" + (cnt + 1) + "." + qBestLapOrderList[cnt].qNickname + "(" + niceTime_b + ")\n"; } } }
  9. Ich instanziere in meinem Spiel um die 1.000 Objekte vor dem Laden und bewege mich da bei etwa 1-3 Sekunden.....+ Zuweisungen genauso wie du es benötigst. Beim Ladevorgang ist das nichts wofür dich ein Benutzer je anklagen wird
  10. Hallo, ich hänge, kann mir bitte jemand weiter helfen: public void UpdateQualifiyingScoreBoard() { QualiPanelText.text = "Online-Players:"+cntOnlinePlayersLoop+"\n"; foreach (Player p in PhotonNetwork.PlayerList) { if (qBestLapOrderList.Count < PhotonNetwork.PlayerList.Length) { qBestLapOrderList.Add(new qBestLapOrder(p.NickName, p.GetBestLap())); qBestLapOrderList.Sort(SortByBestLap); } for (int cnt = 0; cnt < qBestLapOrderList.Count; cnt++) { qBestLapOrderList[cnt].qBestLap = p.GetBestLap(); float tmpbestlap = p.GetBestLap(); int minutes_b = Mathf.FloorToInt(tmpbestlap / 60F); int seconds_b = Mathf.FloorToInt(tmpbestlap - minutes_b * 60); int milliseconds_b = Mathf.FloorToInt((tmpbestlap - seconds_b) * 100); string niceTime_b = string.Format("{0:0}:{1:00}:{2:00}", minutes_b, seconds_b, milliseconds_b); QualiPanelText.text += qBestLapOrderList[cnt].qNickname + ":" + niceTime_b; } } } public static int SortByBestLap(qBestLapOrder p1, qBestLapOrder p2) { return p1.qBestLap.CompareTo(p2.qBestLap); } Ich raff die CompareTo Methode nicht ganz..... ich will 1-12 Spieler sortieren. Kurz erklärt: 1,2,3 oder 12 Spieler fahren ein Qualifiying. Ich sende über CustomProperties die Bestlap und verarbeite diese. Somit verfüge ich zentral über die BestLap jedes gejointen Fahrers. Nun möchte ich diese Liste sortieren. Schnellster ganz oben, langsamster ganz unten. Passiert aber nicht. Was mache ich falsch? danke
  11. Ja, ich habe Strecken die skaliert sind oder werden und somit muss das Auto auch skaliert sein..... sonst funktioniert das alles nicht. Es reicht jedoch das ganze 1x beim laden zu tun, nicht direkt während des Spiels.
  12. Hallo, habt ihr eine Ahnung wie es in Unity einfach möglich ist ein Auto entsprechend zu skalieren? Ich habe schon gelesen dass es dabei massig Probleme und Bugs hinsichtlich der Physics gibt. Hat da jemand Erfahrungen? danke
  13. Hallo...ich verwende Obfuscator - sieh es dir an, das ist was du suchst. lg
  14. Ich vermute dass die Speed zu gering gewählt ist.... Einfacher Test, tausche: controller.SimpleMove(transform.forward * speed); zu controller.SimpleMove(transform.forward * 30); Außerdem würde ich die locatePosition Function abändern auf zirka sowas: var direction = hit.point - transform.Position; direction.y = 0.0; if (direction.magnitude > 0.5) { controller.SimpleMove(direction.normalized * speed); } Aufpassen musst du bei so Dingen dass dein Character nicht irgendwo, irgendwann beginnt zu ruckeln oder zu zucken. lg
  15. mhm nun also der screenshot ist schon aus einem terrain das ich codiert in ein terrain/splatprototyp geladen habe.... pixel für pixel. Das funktioniert an sich so, wie ich das will. Am Ende ist diese 512x512 Textur jedoch dann "eine".
  16. Ok, gelöst: public float rotCorrect = 5; // for smoothness keep between 5-10 // to low will be watered out by collision resolution // to high will jitter, or jump public float correctAt = 30; // should not ever exceed 90, and in some cases // should never exceed 45 depending. // keeps the player upright by performing sutle corrections to the rotation if((transform.eulerAngles.x>=correctAt)&&(transform.eulerAngles.x<180)){ transform.Rotate(-rotCorrect,0,0); } if((transform.eulerAngles.x<=(360-correctAt))&&(transform.eulerAngles.x>=180)){ transform.Rotate(rotCorrect,0,0); } if((transform.eulerAngles.z>=correctAt)&&(transform.eulerAngles.z<180)){ transform.Rotate(0,0,-rotCorrect); } if((transform.eulerAngles.z<=(360-correctAt))&&(transform.eulerAngles.z>=180)){ transform.Rotate(0,0,rotCorrect); }
  17. mhhh ich glaube ich habe mich falsch ausgedrückt....es geht mir nicht um ein Rad oder um ähnliches. Ich will einfach per eulerAngle den maximwinkel einschränken...
  18. Hi Leute, ich hab heute schon wieder zuviel Code im Hirn, das ich vor lauter Bäume den Wald nicht mehr sehe. Ist Zustand: - 1 Auto - 1 Rigibody Das Auto fährt, 2 Reifen berühren einen Gegenstand und das Auto fährt ewig auf 2 Reifen davon. Gut..... transform.rotation.eulerAngle brauch ich also. Mein Problem ist, meine Werte schwanken (aufgrund der Federn und des Geländes) von 355, 356, 360...bis zu 2.... wo das Auto "gerade" wirkt. Wie bewerkstellige ich also so einen Bereich als Max-Limit wenn ich bspw. nicht über einen Winkel von sagen wir 35° nicht überschreiten will, egal ob links oder rechts seitlich. Ich weiß die Antwort ist so einfach danke für den Hint
  19. Hallo, schaut euch mal die angehängte Textur an. Diese liegt vor. Defacto ein gewisser Rahmen an festgelegten Pixelfarben. In diesem Beispiel gibt es: - grün - hellgrau - dunkelgrau - beige/sandfarbe - rot/weiß - weiß Also bis hierher ja ziemlich einfach. Jetzt würde ich gerne eine Texturverbesserung vornehmen und alles was "grün" ist mit einer neuen Textur, die entsprechender hochwertiger nach Gras aussieht überblenden, bzw. überschreiben - zur Laufzeit. Nachdem die Kanten jedoch scharf bleiben sollen (um zb die Streckenabgrenzungen in weiß zu erhalten) stehe ich logisch ein wenig an. Habt ihr da eine Idee wie ich das angehen könnte? lg & danke
  20. So, habs nun gelöst - für die Nachwelt: Von CsteamID zu String: steamidstring = Convert.ToString(SteamUser.GetSteamID ()); Von String zu SteamID: myownSteamID = new CSteamID(Convert.ToUInt64(steamidstring)); lg
  21. Ich muss diesen alten Thread ausgraben. Ich habe gerade deinen Beitrag gefunden Zer0 weil ich GENAU das benötige. Die "Technik des Unityterrains". Ich steht jetzt genau bei dem Problem an, dass ich weit hineinzoomen kann/soll/will und die Pixel wirklich hässlich sind. Hast du zu dieser Technik mehr Infos? Wäre super danke
  22. Danke Sascha. Das hilft mir nur leider nichts... ich stehe komplett an. Knapp 60h coden macht den Kopf kaputt. Könntest es mir anhand meines beispieles erklären?
  23. Hallo, ich habe folgendes Problem: Ich verwende das Steamworks SDK für Unity und habe Steam in mein Spiel integriert. Ich ziehe adde in ein Array die "gejointen" UserID von Steam - also String. Danach möchte ich mit einer Funktion aus dem SteamFramework das Avatar ziehen: IEnumerator _FetchOthersAvatar(CSteamID userid, int usercnt) { avatarInt = SteamFriends.GetLargeFriendAvatar(userid); //int ret = SteamFriends.GetLargeFriendAvatar(m_Friend); //print("SteamFriends.GetLargeFriendAvatar(" + m_Friend + ") : " + ret); //m_LargeAvatar = SteamUtilsTest.GetSteamImageAsTexture2D(ret); while (avatarInt == -1) { yield return null; } if (avatarInt > 0) { SteamUtils.GetImageSize(avatarInt, out width, out height); if (width > 0 && height > 0) { Debug.Log("Width:" + width); Debug.Log("Width:" + height); byte[] avatarStream = new byte[4 * (int)width * (int)height]; SteamUtils.GetImageRGBA(avatarInt, avatarStream, 4 * (int)width * (int)height); downloadedAvatar = new Texture2D((int)width, (int)height, TextureFormat.RGBA32, false); downloadedAvatar.LoadRawTextureData(avatarStream); downloadedAvatar.Apply(); avatarImageFriends[usercnt].sprite = Sprite.Create(downloadedAvatar, rect, pivot); } } } Nur leider haut das nicht hin, weil ich die UserID als String übergebe und die Funktion aber "CSTEAMID" verlangt. In der API findet sich die Info das dieser Wrapper (Csteamid) einfach dies als Ulong deklariert. Jetzt weiß ich zwar das ich es "casten" muss , krieg es aber nicht hin. Ich durchlaufe also das Array mit den aktuellen Spielern: foreach (Player p in PhotonNetwork.PlayerList) { //Debug.Log("Steamloader: PlayerNickname found:"+ p.NickName + "and the Userid of this player is:"+p.UserId); playerListEntries.Add(p.NickName); // ******************OPEN***************** //CSteamID other_SteamID = new CSteamID((ulong)p.UserId); StartCoroutine(_FetchOthersAvatar(SteamUser.GetSteamID(other_SteamID), cntPlayersLoop)); cntPlayersLoop = cntPlayersLoop + 1; } Aber wie caste ich es richtig? Bin über jede Hilfe dankbar lg
×
×
  • Create New...