- Home /
Javascript - Detect wall collision and flip
I have a wall and a sprite. I want the sprite to flip and face the other direction once it hits the wall.
I tried this:
function OnTriggerEnter(sprite: Collider){
if(sprite.gameObject.tag == "wall"){
transform.Rotate (Vector3.up * 180);
}
}
Only thing the sprite does is push the wall away rather than flip. Please help!
Can you describe the rigidbody on the player and the components on the wall? I am going to guess that you are using them for the physics - if so, you'll probably need to use OnCollisionEnter ins$$anonymous$$d of OnTriggerEnter
I added a box-collider and rigidbody components to the wall and the sprite. I then added the script to the sprite with update() moving it, and I want the flip to happen on sprite-wall collision. I tried OnCollisionEnter but still no luck
Answer by Shadowys · May 23, 2014 at 08:04 AM
Not sure about you using 2D, but anyway, you could try this :
(Warning: it's in Boo, but you could port it)
def OnCollisionEnter(collision as Collision):
for contact as ContactPoint in collision.contacts:
tag="wall"
if contact.thisCollider.CompareTag(tag) or \
contact.otherCollider.CompareTag(tag):
flip=true
If you're only looking for forward collisions,
def OnCollisionEnter(collision as Collision):
for contact as ContactPoint in collision.contacts:
tag="wall"
if Vector3.Dot(self.transform.forward, contact.normal)>=0.7:
flip=true
The flipping code could be a lerp so it looks smoother though.
rotation=self.transform.rotation
rotation.eulerangles.y+=180
if flip:
self.transform.rotation=Quaternion.Lerp(
self.transform.rotation,
rotation,
60*Time.deltaTime)
#Rotates at 60 degrees per second.
Your answer
Follow this Question
Related Questions
LookAt Problem 1 Answer
hoe to rotate a AI as a animation 1 Answer
transform.Rotate(Vector3.up ... not working 0 Answers
Trouble with rotating/flipping textures 0 Answers
Getting an object to rotate back to zero after key is released 2 Answers