- Home /
Rigidbody (Player) goes through wall
I have a game that player is the cube.That cube moves around.The cube has a rigidbody with box collier.When the player moves toward the wall, and touch the wall, a bit later, the player suddenly goes through. How to prevent a rigidbody to move through walls? #pragma strict
// Move object using accelerometer
var speed = 10;
function Start () {
Screen.sleepTimeout = SleepTimeout.NeverSleep;
}
function Update () {
var dir : Vector3 = Vector3.zero;
dir.x =/*Input.acceleration.x*5;*/ Input.GetAxis("Horizontal");//Input.acceleration.x*5;//Input.GetAxis("Horizontal");//-Input.acceleration.y;
dir.z =/*Input.acceleration.y*2;*/Input.GetAxis("Vertical");//Input.acceleration.y*5;//Input.GetAxis("Vertical"); //Input.acceleration.x;
// 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;
// stop to cross movement
if(Mathf.Abs(dir.x) > Mathf.Abs(dir.z)) {
dir.z = 0;
}
else {
dir.x = 0;
}
// Move object
transform.Translate (dir * speed);
}
The problem may be co$$anonymous$$g from your use of 'transform.Translate'. With Rigidbodies, I believe it's better to avoid Translating the transform and ins$$anonymous$$d use the Rigidbody component for movement.
can you help me how to use Rigidbody component in this script....thanks
And you should look at the wall, it has to have a collider in it!
Answer by RafaelCN · Mar 13, 2014 at 05:36 PM
Use this instead of transform.Translate();
public float walkAcceleration = 5f;
rigidbody.AddRelativeForce(Input.GetAxis("Horizontal") * walkAcceleration * Time.deltaTime, 0, Input.GetAxis("Vertical") * walkAcceleration * Time.deltaTime);
I am trying but not able to solve the problem.i want to this script work in mobile device too thatwhy i make like this only problem is Rigidbody (Player) goes through wall .please give me whole script that should work in device.thanks #pragma strict
// $$anonymous$$ove object using accelerometer
var speed = 2;
function Start () {
}
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 =Input.acceleration.z;
// clamp acceleration vector to unit sphere
if (dir.sqr$$anonymous$$agnitude > 1)
dir.Normalize();
// $$anonymous$$ake it move 10 meters per second ins$$anonymous$$d of 10 meters per frame...
dir *= Time.deltaTime;
// stop to cross movement
if($$anonymous$$athf.Abs(dir.x) > $$anonymous$$athf.Abs(dir.z)) {
dir.z = 0;
}
else {
dir.x = 0;
}
// $$anonymous$$ove object
transform.Translate (dir * speed);
}
Your answer
Follow this Question
Related Questions
How I can find the complete event of my animation 1 Answer
Movement script, moving up when moving positively in z axis 1 Answer
How to change game object axis according to the camera rotation? 0 Answers
How to keep the default axis as it is after camera rotation? 1 Answer
How to Move an object after it was reproduced by spawn 0 Answers