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.
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.
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;
}
}