- Home /
How to make automatically moving sprite not passing through another sprite?
I have made a scene like the above picture. The wall is made by a number of tiles. The bomb has set a c# script to move automatically like this: using UnityEngine;
public class BombScript : MonoBehaviour {
public int speedX;
public int speedY;
public int directionX;
public int directionY;
public Vector2 speed;
public Vector2 direction;
public Vector2 movement;
public bool collided = false;
void Start () {
speedX = Random.Range (1, 3);
speedY = Random.Range (1, 3);
directionX = Random.Range (-1, 1);
directionY = Random.Range (-1, 1);
while (directionX == 0 && directionY == 0) {
directionY = Random.Range (-1, 1);
}
speed = new Vector2 (speedX, speedY);
direction = new Vector2 (directionX, directionY);
}
void Update () {
movement = new Vector2 (speed.x * direction.x, speed.y * direction.y);
}
void FixedUpdate() {
rigidbody2D.velocity = movement;
}
}
I give the wall box collider 2D and the bomb circle collider 2D, rigid body of 0 gravity and physic 2D for bouncing. But when I run it, the bomb didn't bounce or stop by the walls but passed through the walls. How can I fix it to make the bomb bounce?
Check they are all on the same sorting layer. Check that Is $$anonymous$$inematic is unchecked also.
Answer by tobyfee · Mar 16, 2014 at 06:55 AM
so when you collide with the wall, physics will helpfully tell the rigidbody on your bomb "hey friend I think you'd better stop, maybe move in the other direction a bit, thanks for colliding." However you've got a petty tyrant in your script: every single frame he resets the bombs velocity. It's always at one speed, always one direction. No matter what physics info the bomb gets, it just pushes though.
you have two ways to solve this: either add an onCollider event to detect the collision and calculate which way it should move, something like direction *= -1 should do the trick, but you'd have to stop updating direction every frame, just do it at start and let collisions change it.
Or you could start your bomb moving with AddForce, which you'd call only once at start() and then let physics do the rest
https://docs.unity3d.com/Documentation/ScriptReference/Rigidbody2D.AddForce.html
Your answer
Follow this Question
Related Questions
Object move and bounce off walls infinitely 1 Answer
Unlimitted run Game on mobile. 0 Answers
problem with 2d movement down slopes 0 Answers
Avoid character bouncing off of obstacles 0 Answers
Why is gameobject rotating by 90 degrees only once? 1 Answer