Jump to content
Unity Insider Forum

Kojote

Members
  • Content Count

    1,226
  • Joined

  • Last visited

  • Days Won

    8

Everything posted by Kojote

  1. Zusammenfassenm, ist das, wenn ichs richtig verstanden habe: Besser mehr Draw Calls und weniger Batches? Würde zu meinem Test gerade passen. 830 DC zu 760 Bat Redutiert zu: 800 DC zu 670 Bat Hab damit gerade 25 FPS gewonnen.
  2. Schau ich gleich mal nach, stimmt, dass deutet auf VSync hin. Noch mal ne Frage zu OCC, ich hab jetzt mal alle Steine und Co. mit FBX exportiert, zusammengeführt und nur ein Material drauf gehaun und reimportiert. Jetzt verbrauch ich zwar nen Berg Materialien weniger, aber OCC funktioniert bei mir nicht mehr. Warum das? Müsste das nicht trotzdem bei einem großen Objekt gehen. Im Endeffekt will ich das auch nur wegen dem Material machen. Ich hab im Endeffekt für die Scene gut 7 Meterialien. Hab aber im Profiler im Endeffekt aber 180 Materialien, da er Objekte einzeln mit dem Material bewertet, die Materialien würde ich gern zusammen fasse. Würde einiges an Rechenleistung sparen. EDIT: Bingo, VSync war an. Deaktiviert sind es nun die selben Werte wie in der GameView, wenn ich Other deaktiviere.
  3. Das mit dem Deep Profile probier ich gerade mal aus. Was mich nun ein wenig wundert, ich habe mir so ein Mesh-Combiner geholt. Damit hab ich jetzt in der Game-View zwischen 90 und 130 FPS, im Build genau 60 FPS durchgehend. Warum verliere ich nun auch noch hier 40 FPS, sollten es nicht mehr sein, da der Editor nicht mehr da ist?
  4. Moin! Gerade bin ich mit dem alten Profiler zurecht gekommen, baut Unity ihn komplett um - unübersichtlicher als vorher und noch verwirrender - drum mal wieder ne Frage.^^ Ich habe in meiner gesamten Scene 828 Drawcalls, mit allem Drum und Dran. Nach dem was man liest, sollte das ein gutes Ergebnis für ein 3D Spiel sein. Batches habe ich 517. Tris knapp 600.000. Auflösung 1920x1080. Nun meine blöden Fragen! Laut Stats in der GameView habe ich 180,9 FPS. Das selbe sagt mir der Profiler, so lange ich ganz unten nicht "Other" in die Statistik einbeziehe (nebenbei VSync ist immer aus). Sobald Other das Häkchen bekommt, geht die FPS Zahl von stolzen 200 auf bis zu 25 runter, was ziemlich Mies ist. Auch mein selbst geschriebenes FPS Script, gibt mir diesen Wert aus, gerade eben 27,77 FPS. Nun mal meine Frage, was ist in Other drin und warum sind meine FPS Werte so so schlecht? Denn selbst wenn ich alles aus meiner Scene entferne, nur das Terrain lasse und den Player, wo ich auch alles entferne, bis auf die Steuerung, gewinne ich nicht mehr als 20 - 30 FPS. 20 - 30 FPS, dass ist alles was meine Scripte, Partikel, Modelle und Grafiken verursachen. Woher also dieser dermaßen schlechte FPS Wert? EDIT: Was mich halt auch wundert ist, dass das Starten der GameView plötzlich viel länger dauert. Sonst nach 1-2 Sekunden, braucht er jetzt plötzlich bis zu 30 Sekuunden. Die Gfx.ProcessCommands dauern dann fast 900 ms. Kann mich irren, aber ich hab gestern nen dritten Monitor angeschlossen. Könnte seit dem sein. Hat das was damit zu tun? Hoffe ihr könnt mir helfen!
  5. Jop, genau ist eine LayerMask und danke, schau ich gleich mal rein. EDIT: Also so richtig verstehe ich das nun nicht. Ich hab ja schon zwei LayerMask. Einmal für Terrain, einmal für Water. Und er soll mir ja sagen, was er als erstes trifft: public LayerMask groundLayer = 9; public LayerMask waterLayer = 4; public void EnterStep(LD_SP_Step_Trigger foot) { Debug.Log("Reagiert"); // Es wird zuerst ueberprueft, ob der Fuss nur auf dem Boden steht, oder auf dem Boden steht und sich im Flachwasser if (Physics.Raycast(foot.transform.position, -transform.up, out footRay, 1)) { if (footRay.transform.gameObject.layer == 4) { // Der Fuss steht im Flachwasser Debug.Log("Water"); StepWater(foot); } else if (footRay.transform.gameObject.layer == 9) { // Der Fuss steht auf dem Boden Debug.Log("Ground"); StepGround(foot); } } } Problem ist eben, dass der Layer Water aus irgend einem Grund nicht getroffen wird. Ich hab mal ein Bild angehangen. Wir haben ein Terrain mit einem Terrain Collider. Desweiteren eine Senke in der eine Plane das Wasser stellt. Die Plane hat einen Box Collider mit Trigger. Die Methode EnterStep, wird aufgerufen, wenn ein Fuß auf den Terrain Collider collidiert. So, ich hab daml Rot den Punkt des Rays gemacht, an jedem Fuß ist ein Ray. Ist es nun möglich, dass Water gar nicht getroffen wird, weil der Fuß ja schon im Collider steckt? PS: Nettes Tier, aber war zu faul den Rest zu zeichnen. Löwe mit einem Bein! EDIT 2: Gerade gefunden: https://answers.unity.com/questions/129715/collision-detection-if-raycast-source-is-inside-a.html Ja, Rays die Innerhalb eines Colliders abgeschossen werden, werden nicht erkannt. Darum hab ich mal den Ray-Abschusspunkt nach oben gesetzt. Zudem ein ignoreLayer, dass er sich nicht selber trifft, im ignoreLayer sind nur Terrain und Water aktiv. Scheint bisher zu funktionieren - eigenartig! O_o"
  6. Grüße! Bin gerade dabei einen Step Manager zu bauen. Ich habe an jedem Fuß einen Trigger, dieser kontrolliert, ob der Fuß auf den Boden tritt, sprich ob der Collider den Layer "Terrain" hat. Wenn er diesen Layer hat, wird von diesem Fuß aus, der Controler für alle Füße angesprochen. Ich weis nun erst einmal, dass es ein Terrain ist, nun kann es aber sein, dass er mit den Füßen zwar auf dem Terrain steht und gleichzeitig aber im Flachwasser ist und noch nicht schwimmt. Jetzt Staubanimationen und Fußstapfen im Wasser wären etwas weniger gut. Drum möchte ich dann im Hauptscript eine Abfrage machen, steht der Fuß auf dem Boden ABER ist gleichzeitig im Wasser. Ich hatte mir das mit einem Ray überlegt: if (Physics.Raycast(foot.transform.position, -transform.up, out footRay, 1)) { if (footRay.transform.gameObject.layer == waterLayer) { Debug.Log("Water"); } else if(footRay.transform.gameObject.layer == groundLayer) { Debug.Log("Ground"); } } Laut Debug.Ray wird der Strahl richtig nach unten abgeschossen. waterLayer ist richtig eingestellt auf Wasser und hat die ID 4. groundLayer ist auch im Inspector richtig eingestellt und hat die ID 9. Arbeite ich nun damit, wird der Debug für den Ground aufgerufen, nicht aber für den waterLayer, obwohl er ja eigentlich drin steht. Warum? Wird der Layer in dem man steht nicht mitgerechnet? Er müsste doch eigentlich das erste sein, was der Ray trifft und sofort als hit zurück geben, oder? Wenn die Überlegung falsch ist, wie kann ich dann überprüfen, ob er im Wasser steht, hat da einer eine Idee? EDIT: Achja, noch eine eigenart. Schreibe ich den Spaß in der if-Klausel so, kommt immer false heraus: footRay.transform.gameObject.layer == groundLayer Schreibe ich es so, funktionierts: footRay.transform.gameObject.layer == 9 groundLayer ist aber auf Terrain gestellt und hat als Layer die ID 9. Vielen Dank! Grüße von Kojote
  7. Kojote

    NavMesh

    Grüße! Ich nutze für mein KI Nav Mesh, genauer gesagt Nav Mesh Surface. Ich hab in einem GameObject zwei mal Surface drin, einmal Rabbit, einmal Corcodile. Include Layer: Terrain: Default Area: Walkable Klappt ganz gut, Problem ist nur, wie lege ich Not Walkable fest? Werde da irgendwie nicht schlau draus. Ich habs mit mehren Objekten getestet und unter Navigation im Mesh Renderer die Objekte auf Non Walkable gestellt. Neu gebacken, aber das Wasser, um was es mir geht, ist immer noch Walkable. Habt ihr da ne Idee was ich falsch mache? Grüße Kojote EDIT: Ah, ok, ich hab bei Layers noch Water und Default rein gemacht und nun sieht das alles schon besser aus. In die Objecte die nicht mit gerendert weerden soll, muss noch das Script Nav Mesh Modifier rein.
  8. Grüße! Sagt mal, kann es sein, dass seit Unity Version 2018, Cursor.visible nicht mehr in einer Coroutine aufgerufen werden kann? In normalen Methoden kein Problem, scheint diese Methode innerhalb einer Coroutine nicht zu funktionieren. Bugmeldung gibt es keine, scheint einfach übergangen zu werden. Grüße von Kojote
  9. Vielen Dank, sehr schöne Übersicht!
  10. Dankesehr! 😃 Stand sieht bisher so aus: - Hauptmenü ist fertig - Tutorial Level ist fertig - Grafik- und Modellmäßg ist alles fertig - ca. 90% aller Script sind fertig - SFX und Musik sind ca. 30 % vorhanden - Englische Übersetzung ist fertig, weitere sind in Planung Roadmap sieht folgender maßen aus. - Erst mal noch ein paar minimale Bugs ausgemerzt - KI und Kampfsystem sind noch nicht 100%ig optimal - Mein Partner baut derzeit fleißig die weiteren Landschaften der nächsten Level - Camerafahrten und In-Game-Videos kommen danach Joar, ist noch einiges zu machen. Aber das ambitioniertes Ziel ist es bis spätestens Mai der Release. 😎
  11. Grüße! Nach langer Zeit auch mal wieder etwas von mir in dieser Ecke des Forums. Der erste Teaser zu Game Alchemists neuem Projekt. 😀
  12. Grüße! Mal ne Frage, es gibt ja die Start und die Awake Methode. Awake startet immer als erstes, dann die Start Methode. Wie verhällt sich das eigentlich? Werden erst alle Awake Methoden gestartet und danach alle Start Methoden? Oder kommt das von Fall zu Fall drauf an, dass eine Methode noch die Awake bearbeitet, während eine andere Methode schon bei der Start Methode ist? Grüße von Kojote
  13. Achja, stimmt ja. Ein Rigidbody fehlt, dass wars, danke! EDIT: Geht trotzdem nicht, Kamera geht weiterhin in den Boden. Habe einen RB auf dem Child und einen Collider. Eigentlich sollten sie collidieren, tun sie aber nicht. 🤨
  14. Grüße! Ich hab mal ne Frage zu der Collision Matrix. Ich habe ein Terrain mit dem Layer "Terrain". Auf der Kamera habe ich ein Child Object mit dem Layer "Terrain Collision" und eine Sphere ohne Trigger. Nach meinem Verständnis, so wie ich das auf dem Bild sehe, dürfte nun eigentlich dank des Child Objects eine Collision zwischen "Terrain" und "Terrain Collision" statt finden, damit die Kamera nicht mehr im Boden verschwinden kann. Haben ja beide einen Collider. Leider passiert dies aber. Kann mir einer sagen, was ich falsch eingestellt hab? Grüße von Kojote
  15. Kojote

    Shadow Bug

    Jop genau, der Bias beim Light war drab schuld. Hab ich etwas runter gedreht und schon war der Fehler weg, danke!
  16. Grüße! Ich hab hier ab und an kleine Schatten Bugs, wie hier auf dem Bild: https://www.imagebanana.com/s/1668/AE8WCYwa.html Kann sich das wer erklären? Was könnte am Licht falsch sein? Grüße von Kojote
  17. Kojote

    Camera

    Grüße! Ich hab hier ein Camerascript, welches ich gern umschreiben würde, leider fällt mir keine passende Lösung ein. Genau genommen, geht es um dieses Stück hier: m_CurrentDist = Mathf.SmoothDamp(m_CurrentDist, targetDist, ref m_MoveVelocity, m_CurrentDist > targetDist ? clipMoveTime : returnTime); m_CurrentDist = Mathf.Clamp(m_CurrentDist, minDistanceZoom, maxDistnceZoom); m_Cam.localPosition = -Vector3.forward * m_CurrentDist; Der Rest der If-Anweisung ist von mir: if (Input.GetAxis("Mouse ScrollWheel") != 0f) { float scroll = Input.GetAxis("Mouse ScrollWheel") * scrollSensitivity; scroll *= (this.m_CurrentDist * 0.3f); this.m_CurrentDist += scroll * -1f; this.m_CurrentDist = Mathf.Clamp(this.m_CurrentDist, minDistanceZoom, maxDistnceZoom); m_Cam.localPosition = -Vector3.forward * m_CurrentDist; } else { m_CurrentDist = Mathf.SmoothDamp(m_CurrentDist, targetDist, ref m_MoveVelocity, m_CurrentDist > targetDist ? clipMoveTime : returnTime); m_CurrentDist = Mathf.Clamp(m_CurrentDist, minDistanceZoom, maxDistnceZoom); m_Cam.localPosition = -Vector3.forward * m_CurrentDist; } } Die Else macht folgendes. Kollidiert die Kamera mit einem Objekt, weicht sie automatisch aus, dazu verändert sie auch ihre Position und Entfernung zum Spieler. m_CurrentDist ist dabei für die Entfernung zuständig. Diese Variable würde ich gern manipulieren. Den Wert im Inspector verändern funktioniert. Nur leider mein If- Statement nicht, der Scroll funktioniert zwar, wird aber ständig durch die Else zurück gesetzt. Habt ihr da ne Idee? Hier noch mal die gesamte Late-Update: private void LateUpdate() { float targetDist = m_OriginalDist; // initially set the target distance m_Ray.origin = m_Pivot.position + m_Pivot.forward * sphereCastRadius; m_Ray.direction = -m_Pivot.forward; var cols = Physics.OverlapSphere(m_Ray.origin, sphereCastRadius); // initial check to see if start of spherecast intersects anything bool initialIntersect = false; bool hitSomething = false; for (int i = 0; i < cols.Length; i++) // loop through all the collisions to check if something we care about { if ((!cols[i].isTrigger) && !(MalbersTools.CollidersLayer(cols[i],dontClip))) //is on a layer we don't want to clip { initialIntersect = true; break; } } if (initialIntersect) // if there is a collision { m_Ray.origin += m_Pivot.forward * sphereCastRadius; hits = Physics.RaycastAll(m_Ray, m_OriginalDist - sphereCastRadius); // do a raycast and gather all the intersections } else // if there was no collision do a sphere cast to see if there were any other collisions { hits = Physics.SphereCastAll(m_Ray, sphereCastRadius, m_OriginalDist + sphereCastRadius); } Array.Sort(hits, m_RayHitComparer); // sort the collisions by distance float nearest = Mathf.Infinity; // set the variable used for storing the closest to be as far as possible for (int i = 0; i < hits.Length; i++) // loop through all the collisions { // only deal with the collision if it was closer than the previous one, not a trigger, not in the Layer Mask if (hits[i].distance < nearest && (!hits[i].collider.isTrigger) && !MalbersTools.CollidersLayer(hits[i].collider,dontClip)) { nearest = hits[i].distance; // change the nearest collision to latest targetDist = -m_Pivot.InverseTransformPoint(hits[i].point).z; hitSomething = true; } } if (hitSomething) // visualise the cam clip effect in the editor { Debug.DrawRay(m_Ray.origin, -m_Pivot.forward * (targetDist + sphereCastRadius), Color.red); } // hit something so move the camera to a better position protecting = hitSomething; if (Input.GetAxis("Mouse ScrollWheel") != 0f) { float scroll = Input.GetAxis("Mouse ScrollWheel") * scrollSensitivity; scroll *= (this.m_CurrentDist * 0.3f); this.m_CurrentDist += scroll * -1f; this.m_CurrentDist = Mathf.Clamp(this.m_CurrentDist, minDistanceZoom, maxDistnceZoom); m_Cam.localPosition = -Vector3.forward * m_CurrentDist; } else { m_CurrentDist = Mathf.SmoothDamp(m_CurrentDist, targetDist, ref m_MoveVelocity, m_CurrentDist > targetDist ? clipMoveTime : returnTime); m_CurrentDist = Mathf.Clamp(m_CurrentDist, minDistanceZoom, maxDistnceZoom); m_Cam.localPosition = -Vector3.forward * m_CurrentDist; } } Grüße von Kojote
  18. Ich probiers mal aus. Einfacher wäre die Idee schon, es ist aber das Icon für die Minimap Camera, das würde ich ungern vom Elternobjekt loslösen. EDIT: private void Update() { transform.localPosition = new Vector3(0, 100, 0); transform.localRotation = Quaternion.Euler(90, 0, gameObject.transform.parent.eulerAngles.z * -1.0f); } Nach dem ichs nun so geschrieben habe, funktionierts auch nicht, er ändert immer noch den Winkel falsch. Scheint bei X zu liegen, wo jetzt 90 steht, dadurch das da drin ein Sprite ist, was um 90 Grad gedreht werden muss, machts das glaub ich falsch. EDIT 2: So, ich habs nun mit nem leeren GameObject zwischen dem Parent und dem Icon GameObject gemacht, damit kann ich die 90° ausgleichen. Das scheint jetzt ganz gut zu klappen. Problem ist nun, dass das Icon, wenn der Spiele rennt, relativ ruckartig schnell hin und her springt. Ich hab nun schon Lerp eingebaut, um die Bewegungen etwas geschmeidiger zu machen, aber mit mässigem Erfolg. Kann man da noch was machen? private void Update() { Vector3 trans = new Vector3(gameObject.transform.parent.parent.position.x, 100, gameObject.transform.parent.parent.position.z); transform.position = Vector3.Lerp(transform.position, trans, Time.deltaTime); transform.localRotation = Quaternion.Euler(gameObject.transform.parent.parent.eulerAngles.x * -1f, 0, gameObject.transform.parent.parent.eulerAngles.z * -1f); } Ich glaub auch gerade Lerp is hier falsch am platz. Glaub das verwechsel ich gerade mit was. Hab mal ein Video gemacht, damit ihr seht was ich meine. Es geht um das blaue Icon rechts unten in der Minimap: https://streamable.com/k5e6o EDIT 3: Warum einfach, wenn mans oben auch kompliziert machen kann ... private void Update() { transform.position = new Vector3(transform.parent.parent.position.x, 100, transform.parent.parent.position.z); transform.localRotation = Quaternion.Euler(gameObject.transform.parent.parent.eulerAngles.x * -1f, 0, gameObject.transform.parent.parent.eulerAngles.z * -1f); }
  19. Grüße! Ich hab mal wieder ein Problem mit Position und Rotation ... 🙃 Hab ein Child Object an meinem Spieler hängen, ich möchte nun in meiner Update Methode das ganze so haben, dass nur die Rotation der Y-Achse übernommen wird, nicht aber X und Z. Desweiteren, dass die Position immer genau in Weltkoordinaten auf Höhe 100 ist, genau über dem Spieler. Hier mal Versuch, aber es dreht sich immer falsch. Mir geht gerade durch den Kopf, dass ich zum Parent eine Gegenrotation der Y und Z Achse machen müsste aber wie? transform.localPosition = new Vector3(0, 100, 0); transform.rotation = Quaternion.Euler(90, gameObject.transform.parent.rotation.y, gameObject.transform.parent.rotation.z * -1.0f); Achja, wie zu sehen, X muss immer 90° haben. Grüße Kojote
  20. Kojote

    Editor

    Grüße! Mal eine Frage zum Editor bzw. zum Inspector. Ich hatte mal in einem Script gesehen, dass, wenn man bei einem Script im Inspector ein Häkchen setzt, weitere Felder im Script angezeigt wurden. Häkchen entfernt und sie wurden wieder versteckt. Wie funktioniert das? EDIT: Hab jetzt gerade folgendes durch Zufall gefunden: https://answers.unity.com/questions/192895/hideshow-properties-dynamically-in-inspector.html Habs nun mal genau abgeschrieben und funktioniert nicht.^^ Editor-Script liegt im Editor Ordner unter Assets. [CustomEditor(typeof(LD_SP_Food))] public class HideFieldEditor : Editor { void OnInspectorGUI() { var script = target as LD_SP_Food; script.isCadaver = GUILayout.Toggle(script.isCadaver, "Flag"); if (script.isCadaver) script.ID = EditorGUILayout.IntField("I field:", script.ID); } } EDIT 2: Ich bekomm das Script oben nicht zum laufen, keine Ahnung an was es liegt. Hab aber was anderes vom User "DMGregory" gefunden: https://gamedev.stackexchange.com/questions/157127/how-to-make-a-property-visible-in-the-inspector-window-if-another-property-is-tr public bool isLightOn = false; [ConditionalProperty("isLightOn")] public float brightness; public class ConditionalPropertyAttribute : PropertyAttribute { public string condition; public ConditionalPropertyAttribute(string condition) { this.condition = condition; } } using UnityEditor; [CustomPropertyDrawer(typeof(ConditionalPropertyAttribute))] public class ConditionalPropertyDrawer : PropertyDrawer { // Determine whether this field should be visible. // (We could probably do some caching here...) bool ShouldShow(SerializedProperty property) { var conditionAttribute = (ConditionalPropertyAttribute)attribute; string conditionPath = conditionAttribute.condition; // If this property is defined inside a nested type // (like a struct inside a MonoBehaviour), look for // our condition field inside the same nested instance. string thisPropertyPath = property.propertyPath; int last = thisPropertyPath.LastIndexOf('.'); if (last > 0) { string containerPath = thisPropertyPath.Substring(0, last + 1); conditionPath = containerPath + conditionPath; } // Get the SerializedProperty representing the field that is our criterion. var conditionProperty = property.serializedObject.FindProperty(conditionPath); // For now, we'll only support bool criteria, and default to visible if there's a problem. if (conditionProperty == null || conditionProperty.type != "bool") return true; // Use the condition property's boolean value to drive visibility. return conditionProperty.boolValue; } public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { if(ShouldShow(property)) EditorGUI.PropertyField(position, property, label, true); } public override float GetPropertyHeight(SerializedProperty property, GUIContent label) { if (ShouldShow(property)) { // Provision the normal vertical spacing for this control. return EditorGUI.GetPropertyHeight(property, label, true); } else { // Collapse the unseen derived property. return -EditorGUIUtility.standardVerticalSpacing; } } } Grüße von Kojote
  21. Ja, GetInstanceID ist für so ungefähr alles, was man als Benutzer so machen kann, völlig nutzlos. Wenn du die Szene neu lädst, kriegen alle Objekte eine neue Instance ID - sie ist nicht persistent. Wenn du Dinge in Savegames identifizieren willst, musst du dich selber um eine ID kümmern. Na klasse! xD Dann ist GetInstanceID ja mal total nützlich für ... ja eigentlich nicht .... 😪
  22. Hallo! Ich habe ein kleines Problem mit GetInstanceID. Ich habe auf meiner Map mehrere Tiere. Wenn ich speichere, speichere ich für jedes Tier seine GetInstanceID ab und über einen Boolean, ob dieses Tier lebendig ist oder tot. Beim Laden möchte ich nun vergleichen zwischen meinen gespeicherten Daten und den Tieren in der Scene. Ich lasse also zwei Schleifen laufen und vergleiche nach einer gefunden und einer gespeicherten GetInstanceID. Sind sie gleich, wird ausgewertet, ob das Tier nun lebendig ist oder tod, um es zu deaktivieren. Scripttechnisch sieht das so aus: GameObject[] gameObjectEnemys = GameObject.FindGameObjectsWithTag("Enemy"); for (int i = 0; i < gameObjectEnemys.Length; i++) { for (int j; i < LD_SP_Save_Data_Object_Manager.Instance.gameObjectEnemysList.Count; i++) { if (gameObjectEnemys[i].GetInstanceID == LD_SP_Save_Data_Object_Manager.Instance.gameObjectEnemys[j].id) { } } } Die ID bekommt jedes Tier in der Startmethode, nun habe ich einen Fehler in Visual Studio den ich nicht ganz nachvollziehen kann: Der ==-Operator kann nicht auf Operanden vom Typ "Methodengruppe" und "int" angewendet werden. Könnt ihr mir hier weiter helfen bzw. habt ihr für die ID ne bessere Idee? Grüße von Kojote
  23. Interessat, was macht localOffset denn?
  24. Jo, hatte da nen ziemlich bescheidenen Denkfehler, habs gerade so gelöst: Vector3 playerPosition = new Vector3(LD_SP_Player_Controler.Instance.transform.position.x, LD_SP_Player_Controler.Instance.transform.position.y - 0.5f, LD_SP_Player_Controler.Instance.transform.position.z); // *** Vector3 playerDirection = transform.forward; float spawnDistance = 1.25f; Vector3 spawnPos = playerPosition + playerDirection * spawnDistance; GameObject instaniate = Instantiate( hillPrefab, new Vector3(spawnPos.x, spawnPos.y, spawnPos.z), Quaternion.identity );
×
×
  • Create New...