Jump to content
Unity Insider Forum

Elharter

Members
  • Gesamte Inhalte

    267
  • Benutzer seit

  • Letzter Besuch

  • Tagessiege

    6

Alle erstellten Inhalte von Elharter

  1. Was genau meinst du damit? Den Namen oder was?
  2. Elharter

    Rennspiel

    Nachdem ich ja auch seit über 2 JAhren ein Rennspiel entwickle (GeneRacing) frage ich mich wie du die Physics gelöst hast !? In deinem letzten Post schreibsti du auch dass du eine RayCast Version gebaut hast, gibt es die schon zu sehen? Ich überlege auch seit geraumer Zeit alles auf Raycasting umzubauen. lg
  3. Hey, so kurz wie möglich erklärt. Ich habe einige GameObjekte die prozedural spawnen. Nachdem ich auch über Brücken verfüge (die im Terrain durchaus darunter hohl sein können) kann ich sie nicht wie üblich mit einem mittigen Raycast nach unten spawnen lassen. Bei allen anderen Objekten schieße ich einen Raycast nach unten, ermittle so die Geländehöhe und spawne es dann dort. Geht wunderbar. Bei Brücken mit Hohlraum darunter natürlich nicht. Ergebnis sieht dann so aus: Das ist natürlich Blödsinn. Aus diesem Grund habe ich bei allen Objekten, dort wo ich es für gut befinde eine einfaches GameObjekt als Child verwendet um zu definieren WO ich die Höhe prüfen möchte. Im Falle der Brücke sind das die Beine. Also zb so: Beim spawnen prüfen ich nun ob ein "Heightpoint" vorhanden ist um dann nachfolgenden VON DORT einen Raycast (statt der Mitte) nach unten zu schießen. Funktioniert nur nicht. Es wird ständig die MItte das Parents genommen. Siehe hier das ergebnis als DrawRay: Nach 2h Fehler suchen, brauche ich eure Hilfe ich stehe an. Vector3 totrans; bool heightpfound = false; if (trackObject.transform.Find("Heightpoint") != null) { GameObject hp = trackObject.transform.Find("Heightpoint").gameObject; totrans = hp.transform.position; Debug.Log("Heightpoint found, use it: Name is:"+ hp.name); heightpfound = true; Debug.Log("Heightpoint position is:" + totrans); } else { totrans = trackObject.transform.position; Debug.Log("NO Heightpoint found, use center"); } Debug.Log("GameObject Position is:" + trackObject.transform.position); if (Physics.Raycast(totrans, Vector3.down, out hit)) { distanceToGround = hit.distance; Vector3 incomingVec = hit.point - totrans; Vector3 reflectVec = Vector3.Reflect(incomingVec, hit.normal); if (heightpfound) { Debug.DrawLine(totrans, hit.point, Color.red, 60, false); //show-spawn line Debug.DrawRay(hit.point, reflectVec, Color.green, 60, false); //show reflection-line } if (!hit.transform.gameObject.name.Contains("Terrain")) { Debug.DrawLine(totrans, hit.point, Color.yellow, 60, false); //show line if the object didnt hit terrain Debug.Log("Object " + prefab + "/ hitted:" + hit.transform.gameObject); } trackObject.transform.position = hit.point; if (TerrainRotation == true) { trackObject.transform.rotation = Quaternion.FromToRotation(Vector3.up, hit.normal); //trackObject.transform.rotation = Quaternion.FromToRotation(transform.up, hit.normal) * trackObject.transform.rotation; } } Debug.Log gibt eindeutig unterschiedliche Werte aus....trotzdem sehe ich die Raycasts immer mittig und auch der Spawn funktoniert nicht wie man sieht. lg Michael
  4. Ich hab den Code jetzt nochmal verändert zu diesem: void OnMouseOver() { Debug.Log("Mouse is over:" + gameObject.name); Renderer[] rs = gameObject.GetComponentsInChildren<Renderer>(); int i = 0; foreach (Renderer r in rs) { Material m = r.material; Debug.Log("Materialname is:" + m.name); newColor = new Color(m.color.r, m.color.g, m.color.b, 0.25f); //newMaterial.SetColor("Color", newColor); //newMaterial.SetColor("_Color", newColor); m.EnableKeyword("_BaseColor"); m.SetColor("_BaseColor", newColor); m.color = newColor; m.EnableKeyword("_Surface"); m.SetFloat("_Surface", (float)SurfaceType.Transparent); i++; } } void OnMouseExit() { Debug.Log("Mouse is exited from:" + gameObject.name); Renderer[] rs = gameObject.GetComponentsInChildren<Renderer>(); int i = 0; foreach (Renderer r in rs) { Material m = r.material; newColor = new Color(m.color.r, m.color.g, m.color.b, 1f); m.EnableKeyword("_BaseColor"); m.SetColor("_BaseColor", newColor); m.color = newColor; m.EnableKeyword("_Surface"); m.SetFloat("_Surface", (float)SurfaceType.Opaque); i++; } } selbes Verhalten..... GANZ komisch... Siehe Video hier:
  5. Hey Kollegen, nun mein Code: void OnMouseOver() { Debug.Log("Mouse is over:" + gameObject.name); Renderer[] rs = gameObject.GetComponentsInChildren<Renderer>(); int i = 0; foreach (Renderer r in rs) { Material m = r.material; Debug.Log("Materialname is:" + m.name); oldMaterial = r.material; oldColor = r.material.color; newMaterial = new Material(oldMaterial); newColor = new Color(oldColor.r, oldColor.g, oldColor.b, 0.10f); //newMaterial.SetColor("Color", newColor); //newMaterial.SetColor("_Color", newColor); newMaterial.SetColor("_BaseColor", newColor); newMaterial.color = newColor; newMaterial.EnableKeyword("_Surface"); newMaterial.SetFloat("_Surface", (float)SurfaceType.Transparent); newMaterial.name = "Modified Material"; r.material = newMaterial; i++; } } void OnMouseExit() { Debug.Log("Mouse is exited from:" + gameObject.name); Renderer[] rs = gameObject.GetComponentsInChildren<Renderer>(); int i = 0; foreach (Renderer r in rs) { r.material = oldMaterial; i++; } } Ganz seltsames Verhalten. Grundsätzlich: es passiert nix. Weder die Farbe, noch das Surfacetype ändert sich. Clicke ich jedoch im Inspector und klappe den Shader AUF, nimmt er den neuen Wert einmal an. (Ich benutze URP) Was ist hier los? Jemand eine Idee? danke
  6. Check mal in Unity ob du eine "Success" oder eine "Build error" Fehlermeldung erhalten hast, nachdem Build....das sagt dir mehr
  7. Wie gerne hätte ich jetzt zu diesem alten, sehr guten Tut, die BIlder zurück *heul*
  8. Rein informativ noch, damit man ein wenig Code sieht: Listenelemente werden so instanziert: GameObject track_sync_ListContentPanel = Instantiate(Track_SyncTrackListPrefab, SyncTrackListContent.transform); track_sync_ListContentPanel.transform.SetParent(SyncTrackListContent.transform); Füllen des Bildes links am Rand erfolgt zurzeit so: //fill track image in Transform TrackAvatar = track_sync_ListContentPanel.transform.Find("TrackImage Column/Avatar").transform; StartCoroutine(GetTrackScreenshot(data.filename.ToString().ToLower(), TrackAvatar)); Die CoRoutine GetTrackScreenshot sieht wie folgt aus: IEnumerator GetTrackScreenshot(string filename, Transform avatar) { string extractedfilename = filename.Replace(".trk", "_screenshot.png"); string path = "http://www.gene-racing.com/tracks/" + extractedfilename; UnityWebRequest www = UnityWebRequestTexture.GetTexture(path); yield return www.SendWebRequest(); yield return new WaitForSeconds(1); if (www.isNetworkError || www.isHttpError) { Debug.Log("WWW Error:"); Debug.Log(www.error); } else { Debug.Log("NO www error:"); //set new textures GameObject[] syncItems = GameObject.FindGameObjectsWithTag("Tracks_SyncTrackListItem"); foreach (GameObject prefab in syncItems) { Transform TrackFileName = prefab.transform.Find("TrackName").transform; Debug.Log("Trackname of SyncTrackListItem is:" + TrackFileName.GetComponent<Text>().text); if(TrackFileName.GetComponent<Text>().text.ToString().ToLower() == filename) { //find the parent avatar of it Transform avatarfound = TrackFileName.parent.Find("TrackImage Column/Avatar").transform; //Reset textures first, to avoid see old pictures Destroy(avatarfound.GetComponent<RawImage>().material.mainTexture); Destroy(avatarfound.GetComponent<RawImage>().texture); avatarfound.GetComponent<RawImage>().material.mainTexture = ((DownloadHandlerTexture)www.downloadHandler).texture; avatarfound.GetComponent<RawImage>().texture = ((DownloadHandlerTexture)www.downloadHandler).texture; } } } }
  9. Hallo liebes Forum, ich habe folgendes Problem: Eine Scrollview. Darin enthalten sind natürlich etliche Listenitems. Ich habe mir ein Muster gebaut, dieses als Prefab gespeichert um es dann jeweils laden zu können. Die einzelnen Items (Prefabs) die ich dann innerhalb der ScrollView lade, lade ich per JSON aus einer MySQL DB aus dem Web. Funktioniert alles prima und wunderbar. Problem das ich nun habe: Ich möchte zu jedem einzelnen EIntrag eine Grafik laden, der per URL an Unity übertragen wird um in jedem Listeneintrag die dazupassende Grafik anzeigen zu können. Sämtlicher Inhalt kommt per JSON aus einer DB. Zur Veranschaulichung ein Screenshot: Nun. Die Bilder sollten links sein.... sowie dieses eine das man sehen kann. Zurzeit lade ich die Bilder per CoRoutine: IEnumerator GetTrackScreenshot(string filename, Transform avatar) { ..... Das Problem ist aber dass ich zwar das Transform des einzelnen Listenelements mitgeben kann - aber bei einem einfachen Reload der gesamten Liste, werden alle Grafiken vertauscht und stehen an falschen Stellen. Deswegen 2 Fragen: a) muss ich die Grafiken asynchron , per CoRoutine, laden? b) wie übergebe ich eine frisch instanziertes Listenelement SO an die CORoutine dass diese auch 100%ig weiß welches listenelemt betroffen ist? Ich habe jetzt alle Varianten durchprobiert und komme nicht auf den Fehler. Entweder verschieben sich alle Grafiken, oder es werden gar keine angezeigt. lg
  10. Alpha 0.0.7h - a little preview [youtube]http://www.youtube.com/watch?v=QhiF9d_Oo_g[/youtube]https://www.youtube.com/watch?v=QhiF9d_Oo_g&feature=youtu.be Buaxyies Track 0.0.7h Preview Showing: -Network stats (F5) -Day/Night Cycle -Lights (carlight, sunlight, street lamps) -BlobLight -PitBox -Damage -Refuel/damage repair/tire change -Reset Car (one Hit) and back to current waypoint -Camera rotation -Camera zooming -Camera follow cam -Camera reset to default -Camera change between perspective/ortographic -Qualifiying 10 rounds -Best lap times -Best world records regarding current track -Tracktime +/- difference to bestlap Biggest approch currently is to get the car-importer ready to use... (fbx-files), thats why we are late greetings
  11. 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"; } } }
  12. 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
  13. Hey, hat jemand eine Ahnung wie ich einen Ingame-Lag analyisieren oder herausfinden könnte? Wenn ich einen Build erstelle läuft alles flüssig.... konkret geht es um ein gewöhnliches ScrollRect das ich per instanzierte Listenelemente befülle. Starte ich den Build im Editor ist es mir fast niht möglich zu scrollen. danke & lg
  14. Hallo, bitte um Hilfe, ich stehe an... wenn ich ein mehrdimensionales Array in einer Klasse anlege, wie kann ich dann darauf zugreifen? Ich steh gerade komplett an tracks wird gefüllt per JSON Script (TrackInfo tracks = JsonUtility.FromJson<TrackInfo>(www.text);) danke [System.Serializable] public class RootObject { public TrackInfo[] tracks; } [System.Serializable] public class TrackInfo { public int id; public int userid; public int steamuserid; public string filename; public int filesize; public string filehash; }
  15. Du drehst das monster SELBST nirgendwo..... du bewegst es in alle möglichen Richtungen. Du musst das monster per Rotate in sich noch drehen damit es sich auch dorthin schaut wo du es willst Mir ist noch ein wenig unklar was und wie du drehen willst. Welche Perspektive? Was soll sich mit welcher Eingabe drehen? Es hängt ja auch alles immer von der Perspektive ab. Aber grundsätzlich: du willst das sich das Objekt (monster) selbst auch dreht .....dH dh wenn du nach rechts gehst, soll sich das Gesicht von dem Monster auch nach rechts drehen.
  16. Ausgehend von 4 Wheelcollider, Suspension einem Box Collider usw..... wie bewerkstellige ich eine realitische Kollision zwischen 2 Autos? In meinem Fall kollidieren 2 Autos, angenommen eines steht das andere Auto fährt mit Vollgas seitlich in das stehende. Was passiert nun: das Auto das zuvor (angenommen) 200km/h gefahren ist bleibt ruckartig stehen. Das stehende Auto bewegt sich kaum. Das ist natürlich Schwachsinn. Wie kann ich ein realistischeres Verhalten bewerkstelligen? Gibt es irgendwelche Tuts oder Youtube videos dazu die ihr kennt? danke Michael
  17. Hallo, ich habe eine relativ Komplexe Fahrphysik auf einem Auto. Viele Teile werden erst mit Awake initialisiert und dann an das Parent attached. Aus diesem Grund habe ich eine Art leeres GameObject das alle Car-Komponenten beinhält. So....das ist jetzt gerade blöd... weil ich beim instanzieren mit Photon eine "View" in dem Parent benötige. Kann ich zwar machen, nur funktioniert natürlich der Sync nicht - da das Parent sich nicht bewegt (sondern nur die Chils darunter). Was kann ich tun? lg Mike p.s. das verwenden einer non-observed View im Parent und einer richtigen View im Child funktioniert nicht, da dann Wheels+Physics nicht gesynct werden (da in eigenen Childs).....ich müsste also jedes Child mit einer View versehen > ergo > Overload.
  18. ah habs schon....das sind die Defaults.... lol
  19. Kann mir jemand sagen wieso hier manche Pfeile grün sind? danke
  20. *verärgert* Um die 15 Angebote (mit avg-1.500€) für ein GUI bekommen dass ich jetzt in 2 Tagen (mit fast 0 Erfahrung) selber gelöst habe....

    1. Vorherige Kommentare anzeigen  %s mehr
    2. MarcoMeter

      MarcoMeter

      Sicherlich fällt auch zur Zeit Dinge wie ein Aunforderungskatalog und Qualitätssicherung.

    3. Felix K.
    4. Hrungdak

      Hrungdak

      Das Problem ist nicht, eine einfache Aufgabe zum Festpreis zu lösen. Als Anbieter muss man in so einem Fall auch mit Nachforderungen rechnen, Änderungen in letzter Minute, Ungenauigkeiten im Anforderungskatalog. D.h, du machst eine Kalkulation seriös und nimmst diese dann mal drei. Dann bist du einigermaßen auf der sicheren Seite. Gängiger Standard in der SW-Entwicklung.

       

  21. Ja "Spline" klingt schon mal sehr gut als Stichwort....lässt sich gut scripten. Ist noch die Frage ob man auf ein Spline eben Texturen legen kann damit das Curb eben dann auch wie ein Curb aussieht Aber rein logisch betrachtet klingt das passend. @kakashi: wie gesagt, mir gehts eigentlich mehr um die Curbs als um die Strecke. Die Strecke möchte ich gerne mit einem Pinsel zeichnen.
  22. Ja genau das will ich eben nicht.... ich will "keine" Teile haben.... ich möchte dass der Spieler sich seine Strecke beliebig zeichnen kann. Stärke, länge, Dicke, kurvenradius, alles....mit einem Pinsel. Nur er soll eben die Möglichkeit bekommen rot/weiße "Curbs" die Kurve entlang zeichnen zu können. Funktion brauchen die keine haben, muss nur rot/weiß sein.
  23. Und wie hast du das dann deformiert? Gibt es dazu ein Beispiel/Demo/Video?
  24. Mhhh naja das "malen" ist sicher ein Kinderspiel....aber es hört auf lustig zu werden wenn du schön gerade Geraden haben möchtest oder eine ordentlich gebogene Kurve zb.... oder du eben Curbs benötigst. @Bemmi: ja das würde grundlegend gehen, begrenzt den Spieler aber zu sehr da dann nur eine begrenzte Anzahl an Streckenverianten möglich sind. Ein grenzenloses "malen" bewirkt da schier undenkbare offene Möglichkeiten. Setzt aber voraus dass es eben eine Möglichkeit gibt das entsprechend auch umzusetzen.
×
×
  • Neu erstellen...