Jump to content
Unity Insider Forum

Character Controller geht durch Wände


Orangesky

Recommended Posts

Ja doch benutze

var speed = 1;
var movey=1;

function Update () {

   var dir : Vector3 = Vector3.zero;

   // we assume that device is held parallel to the ground
   // and Home button is in the right hand

   // remap device acceleration axis to game coordinates:
   //  1) XY plane of the device is mapped onto XZ plane
   //  2) rotated 90 degrees around Y axis
   dir.x =  Input.acceleration.x;
   dir.z = movey;

   // clamp acceleration vector to unit sphere
   if (dir.sqrMagnitude > 1)
       dir.Normalize();

   // Make it move 10 meters per second instead of 10 meters per frame...
 //  dir *= Time.deltaTime;

   // Move object
   transform.Translate (dir * speed);
} 

 

Wie muss ich das ändern?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dachte ich mirs doch. Transform.Translate ignoriert Kollisionen. Damit setzt du quasi die Position jedesmal neu, ohne den Körper wirklich mit Physik zu bewegen. Und dann greift eben auch die Physik nicht.

 

Deswegen braucht es entweder Move oder SimpleMove wenn du einen Charactercontroller bewegen willst.

 

Hier findest du ein Beispiel für die Move Methode: http://docs.unity3d.com/Documentation/ScriptReference/CharacterController.Move.html

Hier die für Simple Move: http://docs.unity3d.com/Documentation/ScriptReference/CharacterController.SimpleMove.html

 

Und Sascha hat irgendwo in der Tutorialsektion auch ein sehr schönes Tutorial zum Thema Charactercontroller liegen. Ich finde es nur gerade nicht :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nein, machts nicht! Nur der Character Controller mag das nicht.

Mit nem Rigidbody löfts. :)

Nope, die Aussage ist völlig richtig.

 

Translate ist komplett abseits der Physik-Engine. Dass das mit Rigibodys zu funktionieren scheint, liegt nur daran, dass der Rigidbody im nächsten Fixed Timestep plötzlich merkt, dass er in einem Objekt steckt und sich raus ploppt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Kommt drauf an was man nutzt. Wenn man rigidbody.MovePosition() nutzt dann wird ein rigidbody zum Ziel bewegt und alles was dazwischen war wird ebenfalls von der Physik-Engine erkannt und bewegt.

 

Und ansonsten ist es ebenfalls nur eine Einstellungssache des rigidbody. Setzt man die collisionDetectionMode auf "Continuous" oder "ContinuousDynamic" dann wird ebenfalls alles erkannt was dazwischen ist. Kostet natürlich Rechenleistung.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hey Leute es will einfach nicht funktionieren !! jetzt bekomme ich diesen error?

UnityException: You are not allowed to call this function when declaring a variable.
Move it to the line after without a variable declaration.
If you are using C# don't use this function in the constructor or field initializers, Instead move initialization to the Awake or Start function.
Accelometer Jet..ctor () (at Assets/Scripts/Accelometer Jet.js:3)

 

mein Script:


var speed = 0.9;
var movey= 0.9;
var controller : CharacterController = GetComponent(CharacterController);


function Update () {

   var dir : Vector3 = Vector3.zero;

   // we assume that device is held parallel to the ground
   // and Home button is in the right hand

   // remap device acceleration axis to game coordinates:
   //  1) XY plane of the device is mapped onto XZ plane
   //  2) rotated 90 degrees around Y axis
   dir.x =  Input.acceleration.x;
   dir.z = movey;

   // clamp acceleration vector to unit sphere
   if (dir.sqrMagnitude > 10)
       dir.Normalize();

   // Make it move 10 meters per second instead of 10 meters per frame...
 //  dir *= Time.deltaTime;

   // Move object
   controller.Move (dir * speed);
}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Eigentlich finde ich den Fehler doch ziemlich Aussagekräftig und er beantwortet doch eigentlich alle Fragen?

 

UnityException: You are not allowed to call this function when declaring a variable.
Move it to the line after without a variable declaration.
If you are using C# don't use this function in the constructor or field initializers, Instead move initialization to the Awake or Start function.
Accelometer Jet..ctor () (at Assets/Scripts/Accelometer Jet.js:3)

 

Simpel von Englisch nach Deutsch übersetzt. Er meckert Zeile 3 an. Und sagt das du diese Funktion nicht aufrufen kannst bei einer Variablen deklaration. Um das Problem zu Lösen sollst du den Aufruf Eine Zeile unter der Variablen Deklaration schieben. Und wenn man C# nutzt soll man die Funktion nicht im Konstuktor oder bei Propertie definition nutzen sondern in die "Start()" oder "Awake()" Funktionen verschieben.

 

Zeile drei ist bei dir.

 

var controller : CharacterController = GetComponent(CharacterController);

 

Ändere es also Beispielsweise in.

 

var controller : CharacterController;

function Start() {
   controller = GetComponent(CharacterController);
}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...