Jump to content
Unity Insider Forum

Elharter

Members
  • Content count

    193
  • Joined

  • Last visited

  • Days Won

    2

Elharter last won the day on June 24 2016

Elharter had the most liked content!

Community Reputation

18 Gut

About Elharter

  • Rank
    Advanced Member
  • Birthday 07/17/1981

Profile Information

  • Gender
    Male
  • Location
    Vienna

Recent Profile Visitors

1,000 profile views
  1. Elharter

    Rotate & Movement

    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.
  2. Ok .... gelöst und erledigt. Ich setze einfach für alle Trackobjekte > trackObject.layer = 2; // set Ignore Raycast Layer Somit stehen sich alle Objekte nicht mehr gegenseitig im Weg herum. Auch wenn noch ein paar alte (nicht zerstörte Objekte) beim Ladevorgang vorhanden sind. Yeah - danke Zer0
  3. Okay noch besser eingegrenzt mit: if (Physics.Raycast(trackObject.transform.position, Vector3.down, out hit)) { distanceToGround = hit.distance; Vector3 incomingVec = hit.point - trackObject.transform.position; Vector3 reflectVec = Vector3.Reflect(incomingVec, hit.normal); Debug.DrawLine(trackObject.transform.position, hit.point, Color.red, 30, false); //show-spawn line Debug.DrawRay(hit.point, reflectVec, Color.green, 30, false); //show reflection-line if (!hit.transform.gameObject.name.Contains("Terrain")) { Debug.DrawLine(trackObject.transform.position, 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); } } dH ich sehe wenn ein Objekt NICHT auf dem Terrain hitted.... ich krieg ne gelbe Linie und einen Debug.Log raus... Ergebnis1: Object StandNew (UnityEngine.GameObject)/ hitted:StandNew(Clone) (UnityEngine.GameObject) Die Tribüne hitted sich selbst..... toll. Ergebnis2 eine Barriere hittet ein Objekt das gar nicht auf der Map existiert...... meine Vermutung also: beim reload des Tracks sind "alte" Objekte noch kurz vorhanden. Vor jedem Track-Load cleare ich alle vorhergehenden Trackobjekte mit: //clear existing Trackobjects foreach (Transform child in trackobjectsParent.transform) { GameObject.Destroy(child.gameObject); } Offensichtlich dauert das zu lange...
  4. Elharter

    umfangreiche Daten abspeichern

    Hier auch etwas zu lesen: http://previewlabs.com/writing-playerprefs-fast/
  5. okay....das bringt erleuchtung...aber ich bin noch verwirrter als vorher: Wirft: Object Booth_Prefab (UnityEngine.GameObject)/ hitted:StandNew(Clone) (UnityEngine.GameObject) .... Booth = sind diese Hütten StandNew sind die Tribünen... wtf die sind nicht mal irgendwie in der Nähe !?!?!?!
  6. Elharter

    Terrain heigths setzen

    Richtig... in meinem Fall ist es halt 64x64 groß und immer gleich - deshalb so fixiert.
  7. Hallo, irgendwas hats in meinem Code und ich finde den Fehler nicht... ich instanziere diverse Objekte per Script. Davor erstelle ich ein Terrain. void CreateTrackObject(GameObject prefab, float x_clamped, float y_clamped, float rotation, bool TerrainRotation, float worldSize, string tagdecl) { GameObject trackObject = Instantiate(prefab, new Vector3(x_clamped, 50, y_clamped), Quaternion.identity); trackObject.transform.parent = trackobjectsParent.transform; trackObject.tag = tagdecl; RaycastHit hit; float distanceToGround = 0; if (Physics.Raycast(trackObject.transform.position, Vector3.down, out hit)) { distanceToGround = hit.distance; Vector3 incomingVec = hit.point - trackObject.transform.position; Vector3 reflectVec = Vector3.Reflect(incomingVec, hit.normal); Debug.DrawLine(trackObject.transform.position, hit.point, Color.red, 30, false); //show-spawn line Debug.DrawRay(hit.point, reflectVec, Color.green, 30, false); //show reflection-line trackObject.transform.position = hit.point; if (TerrainRotation == true) { trackObject.transform.rotation = Quaternion.FromToRotation(Vector3.up, hit.normal); } } //maybe this line should be moved to a higher line-position after rayhasthit hit trackObject.transform.localEulerAngles = new Vector3(0, rotation, 0); } An sich funktioniert das soweit ganz gut....aber in manchen Fällen fliegen die Objekte in der Luft obwohl NICHTS in der Nähe ist was kollidieren kann. Siehe Foto. Woran kann das liegen? Ich habe auch schon versucht Objekten den Layer "IgnoreRaycast" zu geben um zu verhindern das sich die gegenseitig im Weg sind -> hilft nix. lg
  8. Ja, tust du glaube ich. Ahhh okay. Dictionary lautet das Stichwort. Ich lese mich mal ein. danke
  9. Folgender Code: using UnityEngine; using UnityEngine.UI; namespace TheBestGame { // Utility class for swapping the sprite of a UI Image between two predefined values. public class SpriteSwapper : MonoBehaviour { public Sprite enabledSprite; public Sprite disabledSprite; private bool m_swapped = false; private Image m_image; public Text filesize; public Image TimeIcon; public Text fastestLap; public void Awake() { m_image = GetComponent<Image>(); } public void SwapSprite() { if (m_swapped) { m_swapped = false; m_image.sprite = disabledSprite; filesize.color = new Color(84, 84, 84, 255); TimeIcon.color = new Color(84, 84, 84, 255); fastestLap.color = new Color(84, 84, 84, 255); } else { m_swapped = true; m_image.sprite = enabledSprite; // change colors for track-infos filesize.color = new Color(255, 255, 255); TimeIcon.color = new Color(255, 255, 255); fastestLap.color = new Color(255, 255, 255); } } } } Auf weiß wechseln geht einwandfrei..... (255,255,255) zurück auf dunkelgrau nicht mehr. Hat jemand eine Idee wieso!? Der verbundene Slider (Sprites) arbeitet tadellos. dH die Werte werden alle korrekt übergeben. danke
  10. Hallo, ich verwende eine ScrollView mit Rect-Transforms in einem Grid Layout. Das instanziere ich on the fly weil ich eine Dateiliste auslese und damit ausgebe. Funktioniert soweit alles wie ich es will. Jetzt möchte ich aber eine "Datei-Auswahlliste" erzeugen. Dazu habe ich einen Slider eingebaut siehe Anhang. Soweit so gut. Ich verwende einen "ItemController" als Schnittstelle. Jetzt möchte ich gerne die gewählten Files "speichern", damit ich sie beim szenen-wechsel dann aus dem array entsprechend laden kann. Wie gehe ich das am effizientesten an? Die "Dateinamen" in einem Array ablegen? Wenn ja, aufgrund der Möglichkeit des ein/aus muss ich dann auch ständig aus dem Array-suchen/löschen/hinzufügen.... das erscheint mir irgendwie unperformant. Was wiederrum egal ist, da der User sowieso nur 1x diese Auswahl trifft vor dem Start. Trotzdem glaube ich es geht es irgendwie effizienter. Ich hole mir indem ListController ja schon die Dateiliste per: FileInfo[] info = dir.GetFiles("*.track"); foreach (FileInfo f in info) { } Das könnte ich ja irgendwie gleich nutzen. danke
  11. Danke! Jetzt funktioniert es wunderprächtig. Wird gemacht in Zukunft.
  12. Elharter

    Terrain heigths setzen

    Hab dir jetzt schnell meine Funktion rausgesucht: public float[,] resetheights = new float[64, 64]; public void ResetHeights() // FOR TESTING, reset to flat terrain { int x; int z; for (z = 0; z < terrain.terrainData.heightmapHeight; z++) { for (x = 0; x < terrain.terrainData.heightmapWidth; x++) { resetheights[z, x] = 0; } } terrain.terrainData.SetHeights(0, 0, resetheights); } lg
  13. OT: Mhhh, soll ich meinen ersten Beitrag am besten einfach editieren und die Infos hinzufügen? transform.localScale = distance.magnitude; // statt Vector3.Distance wirft: Severity Code Description Project File Line Suppression State Error CS0029 Cannot implicitly convert type 'float' to 'UnityEngine.Vector3' Und "Script" habe ich keinen aus einem einzelnen Gameobjekt. Ich erstelle hunderte Objekte per Script auf einem Terrain. Und hier geht es um "Wände" sozusagen die dann instanziert werden. An sich hat mein Code funktioniert Jedoch habe ich schon einen Bug gefunden. Code funktioniert nicht mehr wenn X0 und X1 andersrum sind. Also die Werte +/- umgedreht sind. Dann stimmt nix mehr ^^ Edit: hat nichts mit den Werten zu tun, sondern damit dass das Scaling nicht mehr stimmt, sobald da eine Rotation reinkommt....hmpf. Magnitude scheint hier tatsächlich die richtigere Wahl zu sein was ich bis jetzt gelesen habe. Edit2: Ok, die Ursache des Bugs kommt schon aus den Rohdaten. Die 2D-Koordinaten (x0/y0 und x1/y1) gibt es in beide Richtungen, da offensichtlich die besagte Wand von beiden Richtungen gezeichnet/gespeichert werden konnte. Somit stimmen die Formeln nicht mehr und die Berechnungen gehören irgendwo neutralisiert.
  14. Okay.... gelöst: //set line ends to vectors Vector3 vecA = new Vector3(data.line[i].x, 40, data.line[i].y); Vector3 vecB = new Vector3(data.line[i].x1, 40, data.line[i].y1); //get our midway point Vector3 midPointAB = (vecA + vecB) / 2f; //get the direction between the two transforms --> Vector3 dirAB = (vecB - vecA).normalized; // get the rotation of the line //Vector3 relativePos = vecA - transform.position; Quaternion rotationAB = Quaternion.LookRotation(dirAB); // get the length of the line Vector3 abLength = vecB - vecA; line.transform.localPosition = midPointAB; line.transform.rotation = rotationAB; // set the new length (scaling size from cube prefab is 1/80/1/) line.transform.localScale = new Vector3(line.transform.localScale.x, line.transform.localScale.y, abLength.z);
×