Jump to content
Unity Insider Forum

bitkorn

Members
  • Content count

    6
  • Joined

  • Last visited

Community Reputation

0 Neutral

About bitkorn

  • Rank
    Newbie
  • Birthday 07/11/1970

Profile Information

  • Gender
    Male
  • Location
    Hagen
  1. Ich habe das Problem auch. Das Survival Shooter Tutorial habe ich durch und dort funktioniert alles. In meinem Projekt funktioniert es nicht 1. <Bake> habe ich gemacht 2. nav = GetComponent<NavMeshAgent>(); // Script wie im Tut, und das Script hängt auch am Prefab 3. den NavMeshAgent habe ich groß genug (answers.unity) Woran kann es noch liegen, daß diese Fehlermeldung kommt? Edit: Ja, geil ...wenn nix als statisch (Boden, Gebäude etc.) beim Backen markiert ist, kommt halt auch dieser Fehler.
  2. bitkorn

    TransformPoint() verdoppelt die Direction

    Sascha, erstmal danke für deine Hartnäckigkeit. Ich glaub bei mir ists jetzt auch durchgesickert. Irgendwie dachte ich weil es ja einmal eine Richtung ist und einmal ein Punkt sollte nichts doppeltes passieren ...aber genug jetzt davon Ja, es geht nur um den Sichtbereich. Aber irgendwie auch darum, daß ich aus der dunklen VectorQuaternionETC-Hölle ein freundliches Plätzchen mache. ...meine Lösung hatte ich ja schon gepostet. Vector3.Dot() sieht sehr gut aus ...danke, kannte ich auch noch nicht.
  3. bitkorn

    TransformPoint() verdoppelt die Direction

    jou, aber wenn ich TransformDirection() oder transform.richtung nehme (was ja beide das gleiche ist) meinst du, das ein anschließendes TransformPoint() doppelt gemoppelt ist und darum dieser Mist passiert ...was ja scheinbar auch richtig ist. Ohne TransformPoint() bekomme ich die Punkte aber nicht in die Welt. Da stehen wir wieder am Anfang. Ergebnis ist: wenn ich einmal etwas von lokal nach Welt transferiere merkt sich Unity das und rechnet bei einem zweiten Transferieren irgendwas drauf. Mich nervt, daß TransformPoint() meiner Meinung nach nicht tut was es tuen soll. Wenn ich TransformPoint() einen x-beliebigen Vector3 gebe, was ja einfach drei Werte sind, sollte es mir von jedem TransformUrsprung einen Punkt machen und diesen 1:1 als Weltkoordinate zurück geben. Aber nein, es scheint mehr zu machen!
  4. bitkorn

    TransformPoint() verdoppelt die Direction

    dank dir. Daß transform.forward das gleiche wie TransformDirection() ist hätt ich nicht vermutet. Ein Vector3.forward ignoriert leider die Rotation Ohne TransformPoint() habe ich es dann immer im Weltursprung Darum habe ich nun eine andere Lösung. Dabei benutze ich drei Variablen und lass die Rotation weg ...lege also einfach die Direction fest: f_sideAngle um den Sichtwinkel zu bestimmen visualRange um den Abstand der OperatorPoints (v3_rightBlind & v3_leftBlind) zum Bot zu bestimmen operateRadius um die Distanz vom Hero zu jedem OperatorPoint zu vergleichen private bool CanSeeHero() { v3_rightBlind = Vector3.forward + new Vector3(f_sideAngle, 0, 0); v3_leftBlind = Vector3.forward + new Vector3(-f_sideAngle, 0, 0); v3_rightBlind = v3_rightBlind * visualRange; // etwas verlaengert v3_leftBlind = v3_leftBlind * visualRange; // etwas verlaengert v3_rightBlind = transform.TransformPoint(v3_rightBlind); // rechts Punkt in Weltkoordinaten v3_leftBlind = transform.TransformPoint(v3_leftBlind); // links Punkt in Weltkoordinaten if (Vector3.Distance(v3_rightBlind, heroPosition) < operateRadius && Vector3.Distance(v3_leftBlind, heroPosition) < operateRadius) { return true; // Hero ist im Sichtfeld } return false; } Das geht mit Winkeln bestimmt besser !?
  5. bitkorn

    TransformPoint() verdoppelt die Direction

    ne, aus der verlängerten lokalen Direction (v3_rightBlind * operateRadius) möchte ich den resultierenden Punkt in Weltkoordinaten haben.
  6. hi Forum, ich möchte einen Sichtbereich für meine Bots schaffen. Also einen Bereich in dem sie den Helden sehen können. Leider baut TransformPoint() Mist: es scheint immer auf die Rotation was aufzurechnen ...so siehts zumindest aus ...ich habe dazu ein Video hochgeladen um es deutlich zu machen (link unten) mit folgender Methode teste ich ob der Held im Sichtfeld des Bots ist: private bool CanSeeHero() { observeEye.transform.Rotate(0, f_sideAngle, 0); // drehe observeEye nach rechts v3_rightBlind = observeEye.transform.forward; observeEye.transform.Rotate(0, -2 * f_sideAngle, 0); // drehe observeEye nach links v3_leftBlind = observeEye.transform.forward; // operate point v3_rightOperator = v3_rightBlind * operateRadius; // etwas verlaengert v3_leftOperator = v3_leftBlind * operateRadius; // etwas verlaengert v3_rightOperator = transform.TransformPoint(v3_rightOperator); // rechts Punkt in Weltkoordinaten v3_leftOperator = transform.TransformPoint(v3_leftOperator); // links Punkt in Weltkoordinaten // rotate back to forward observeEye.transform.Rotate(0, f_sideAngle, 0); if (Vector3.Distance(v3_rightOperator, heroPosition) < operateRadius && Vector3.Distance(v3_leftOperator, heroPosition) < operateRadius) { return true; // Hero ist im Sichtfeld } return false; } und mit dieser male ich die Gizmos (vonwegen der LinienFarben): void OnDrawGizmos() { Gizmos.color = Color.blue; Gizmos.DrawRay(observeEye.transform.position, v3_leftBlind); Gizmos.color = Color.white; Gizmos.DrawRay(observeEye.transform.position, v3_rightBlind); Gizmos.color = Color.green; Gizmos.DrawLine(observeEye.transform.position, v3_rightOperator); Gizmos.DrawLine(observeEye.transform.position, v3_leftOperator); if (debugInViewfield) { Gizmos.color = Color.yellow; Gizmos.DrawRay(observeEye.transform.position, v3_moveDirection); } else if (debugInRange) { Gizmos.color = Color.cyan; Gizmos.DrawRay(observeEye.transform.position, v3_moveDirection); } } und das Video: Die grünen Linien sollen mit den kurzen am Bot gleich sein. Tuen sie aber nicht ...wenn der Bot (mit den kurzen Linien) sich einmal rum dreht haben die grünen schon zwei Umdrehungen weg. So wie die kurzen sollen sich auch die per TransformPoint() "globalisierten" mitdrehen. Es liegt ganz klar an der TransformPoint() Methode die das vermasselt. Was mache ich falsch? ...was verstehe ich bei TransformPoint() falsch?
×