- Home /
Make platforms that collide with player from one direction but not the other.
I'm trying to make a platform object which the Character Controller can pass through if it collides with it from below or the sides, but does not go through it if he collides from above.
An example of this kind of platform can be seen here: http://www.youtube.com/watch?v=JFiQH2QMJFA
I was hoping there was a way to tell the Character Controller to ignore the collision reaction with the platform unless the collision flags showed the character coming from above. So far I haven't been able to achieve this effect. Any advice is appreciated.
Answer by Bunny83 · May 20, 2012 at 01:32 AM
I've posted a script on this question which can remove the bottom faces from a MeshCollider at runtime. You can specify an angle limit
Answer by aldonaletto · May 19, 2012 at 12:44 AM
The Unity plane primitive has a one-sided collider: only the visible side generates collisions. You can use any object as the platform - just remove its original collider (if any), then create a plane (Hierarchy view, Create/Plane) and adjust its dimensions and position to be the platform "ground". Finally, child the plane to the platform - you can even remove its Mesh Renderer to make it invisible (the collider is independent of the renderer).
EDITED: A simple and seamless alternative is to have a trigger childed to the platform and placed above it, like below:
In the Inspector, set isTrigger in both (the parent platform and the trigger). When the player enters this trigger, set the platform collider isTrigger to false; when the player exits the trigger, set the platform collider isTrigger to true (script attached to the childed trigger):
function OnTriggerEnter(other: Collider){ if (other.tag == "Player"){ transform.parent.collider.isTrigger = false; } }
function OnTriggerExit(other: Collider){ if (other.tag == "Player"){ transform.parent.collider.isTrigger = true; } }
Awesome! Passing through the plane isn't as seamless as I'd like, but it might work well with a few tweaks.
There's a seamless alternative that uses a trigger ins$$anonymous$$d of the plane collider - take a look at my answer.
The issue I see is that this assumes there will only be a single entity interacting with the platform at a time. Interesting approach though.
You're right: when some character is over the platform, the others will get headaches trying to pass through it. Definitely, not suitable for multiple characters!
Your answer
Follow this Question
Related Questions
Moving a player on a rigidbody platform that can collide 2 Answers
Rotating Platform Collision Issue 1 Answer
Making a Child/Parent Based Moving Platform? 2 Answers
Collision on the bottom? 1 Answer