- Home /
Question by
rustyruss1985 · May 11, 2018 at 03:15 PM ·
rigidbody2dcollider2dspriterendererpolygoncollider2d
how to make 2d sprite with polygon collider bounce?
Hi, i'm trying to build a sprite-based game with precise collisions between my sprites...right now i'm just testing with two circular sprites, one is stationary (circObject2) and one is initialized moving slowly towards the other in the +x-direction (circObject1).
however, when circObject1 reaches circOjbect2 and makes contact, there is no bounce, ie, it just pushes it continuously further in the +x direction.
how can i make my two objects bounce? thanks
float count = 0;
List<List<GameObject>> objs;
Sprite[] numSprites;
GameObject circObject1;
Sprite circSprite1;
GameObject circObject2;
Sprite circSprite2;
void Start()
{
Physics2D.gravity = Vector2.zero;
Physics2D.velocityThreshold = 0.01f;
circSprite1 = Resources.Load("circle", typeof(Sprite)) as Sprite;
circObject1 = new GameObject("circ1");
SpriteRenderer rend1 = circObject1.AddComponent(typeof(SpriteRenderer)) as SpriteRenderer;
rend1.sprite = circSprite1;
circObject1.transform.position = new Vector2(-1, 0);
circObject1.AddComponent<Rigidbody2D>();
circObject1.GetComponent<Rigidbody2D>().velocity = new Vector2(1f, 0f);
circObject1.AddComponent<PolygonCollider2D>();
circSprite2 = Resources.Load("circle", typeof(Sprite)) as Sprite;
circObject2 = new GameObject("circ2");
SpriteRenderer rend2 = circObject2.AddComponent(typeof(SpriteRenderer)) as SpriteRenderer;
rend2.sprite = circSprite2;
circObject2.transform.position = new Vector2(1, 0);
circObject2.AddComponent<Rigidbody2D>();
circObject2.AddComponent<PolygonCollider2D>();
}
Comment
Answer by rustyruss1985 · May 11, 2018 at 05:34 PM
never mind, fixed it myself. i had to add a physicsmaterial2d to the circle collider:
void Start()
{
Physics2D.gravity = Vector2.zero;
Physics2D.velocityThreshold = 0.01f;
PhysicsMaterial2D actorMaterial = new PhysicsMaterial2D();
actorMaterial.bounciness = 1;
//collider2D.sharedMaterial = actorMaterial;
circSprite1 = Resources.Load("circle", typeof(Sprite)) as Sprite;
circObject1 = new GameObject("circ1");
SpriteRenderer rend1 = circObject1.AddComponent(typeof(SpriteRenderer)) as SpriteRenderer;
rend1.sprite = circSprite1;
circObject1.transform.position = new Vector2(-1, 0);
circObject1.AddComponent<Rigidbody2D>();
circObject1.GetComponent<Rigidbody2D>().velocity = new Vector2(1f, 0f);
circObject1.AddComponent<CircleCollider2D>();
circObject1.GetComponent<CircleCollider2D>().sharedMaterial = actorMaterial;
circSprite2 = Resources.Load("circle", typeof(Sprite)) as Sprite;
circObject2 = new GameObject("circ2");
SpriteRenderer rend2 = circObject2.AddComponent(typeof(SpriteRenderer)) as SpriteRenderer;
rend2.sprite = circSprite2;
circObject2.transform.position = new Vector2(1, 0);
circObject2.AddComponent<Rigidbody2D>();
circObject2.AddComponent<CircleCollider2D>();
circObject2.GetComponent<CircleCollider2D>().sharedMaterial = actorMaterial;
}