- Home /
object goes through walls(no, dats nnot what r u thinkig about)
so, i have cylinder that moves up and down, it has rigidbody and capsule collider elements attached. so the problem is that if i'm touching green wall, ball goes through it. but i'm sure its not because of its speed, i took into account it, and made max speed(its 15). this cylinder sometimes is working fine, but sometimes not. here's whats happening:
and here is how it has to be:
my controller script:
var speed = 0.0f;
var speedUp = 0.2f;
var MUS = 0.1f;
var UpSpeed = 0.0f;
var DownSpeed = 0.0f;
var cameraLose : Camera;
var mainCamera : Camera;
var collide : boolean = false;
var CollideUp : boolean = false;
var CollideDown : boolean = false;
var maxSpeed = 2;
var me : GameObject;
var score = 0;
var scoreGui : TextMesh;
function Start () {
me.GetComponent.<Renderer>().enabled = true;
cameraLose.enabled=false;
mainCamera.enabled=true;
}
function Update () {
//checking speed
if(UpSpeed==15){
UpSpeed=15;
}
if(DownSpeed==15){
DownSpeed=15;
}
if(speed<maxSpeed){
speed+=speedUp;
}
else{
speed=maxSpeed;
}
transform.position += Vector3.right * speed * Time.deltaTime;
slow();
}
function FixedUpdate(){
//controlling object
if(Input.GetKey("w")){
if(CollideUp==true){
UpSpeed=0;
}
}
if(Input.GetKey("w")){
if(CollideUp==false){
transform.position += Vector3.forward * UpSpeed * Time.deltaTime;
UpSpeed+=MUS;
}
}
if(Input.GetKey("s")){
if(CollideDown==true){
DownSpeed=0;
}
}
if(Input.GetKey("s")){
if(CollideDown==false){
transform.position -= Vector3.forward * DownSpeed * Time.deltaTime;
DownSpeed+=MUS;
}
}
}
//speedUp controlling
function slow(){
if(Input.GetKeyUp("s")){
do{
DownSpeed-=MUS;
//transform.position -= Vector3.forward * DownSpeed * Time.deltaTime;
yield WaitForSeconds(0.01f);
slowDownS();
}while(DownSpeed>0);
}
if(Input.GetKeyUp("w")){
do{
UpSpeed-=MUS;
//transform.position += Vector3.forward * UpSpeed * Time.deltaTime;
yield WaitForSeconds(0.01f);
slowDownW();
}while(UpSpeed>0);
}
}
function slowDownS(){
if(CollideDown==false){
transform.position -= Vector3.forward * DownSpeed * Time.deltaTime;
}
}
function slowDownW(){
if(CollideUp==false){
transform.position += Vector3.forward * UpSpeed * Time.deltaTime;
}
}
//collisons checking
function OnCollisionEnter(collision: Collision) {
//taking up points
if (collision.gameObject.tag == "points"){
score+=10;
scoreGui.text=score.ToString();
gameObject.Find("score int").SendMessage("addScore", score);
}
//if we collide with obstacle die
if (collision.gameObject.tag == "Obstacle"){
collide=true;
mainCamera.enabled=false;
cameraLose.enabled=true;
//me.GetComponent.<AudioSource>().Play();
me.GetComponent.<Renderer>().enabled = false;
die();
}
//make character not to go through walls
if(collision.gameObject.tag=="wallUp"){
CollideUp=true;
}
if(collision.gameObject.tag!="wallUp"){
CollideUp=false;
}
if(collision.gameObject.tag=="wallDown"){
CollideDown=true;
}
if(collision.gameObject.tag!="wallDown"){
CollideDown=false;
}
}
//killing player
function die(){
yield WaitForSeconds(0.2f);
gameObject.Find("score int").SendMessage("show");
Destroy(gameObject);
}
and, yup i also tried to change fixed timestep in time manager, and i changed it to 0.02, i leaved maximum allowed timestep and time scale not changed.
Your answer
Follow this Question
Related Questions
Going through wall 2 Answers
Camera looking through objects when touching 1 Answer
Player rotating after wall collision 1 Answer
Make an instantiated cube destroy a wall on collision 1 Answer
Collision between Player and a Wall 2 Answers