- Home /
Switching between areas in a scene with triggers
Hi, a group of friends and I are making a game in Unity Free for a programming competition. In the game, it is separated by areas, like in a grid system. Each area represents an object so far that has 4 parameters (areaNorth, areaEast, areaWest, areaSouth). Each area is four sided and has a box collider cube that IsTrigger on each side. My problem is figuring out OnTriggerEnter() which "direction" I am going so I can switch to the north, east, west, or south adjacent areas. I've tried using the rigidbody.velocity.x and checking whether it's above zero but it's too inaccurate to actually be able to tell which global direction I'm going. Note, I want to be able go through any collider facing any direction and have it change correctly (for example, walking through the east collider transports me to the east area whether I am walking backward, sideways, or forward through it).
This is my East to West code (I check whether the box collider is a vertical or horizontal trigger so it only keeps track of two of the directions).
public class East_West : MonoBehaviour { public Rigidbody player; public enum VerticalTriggerDirection { East, West }; public VerticalTriggerDirection playerDirection;
// Use this for initialization
void Start()
{
GameObject cube = GameObject.Find("Graphics");
player = cube.rigidbody;
}
// Update is called once per frame
void Update()
{
if (player.velocity.normalized.x > 0)
playerDirection = VerticalTriggerDirection.East;
else if (player.velocity.normalized.x < 0)
playerDirection = VerticalTriggerDirection.West;
}
}
Here is my Trigger Code which I attach to the Vertical Colliders public class TriggerVert : MonoBehaviour { private GameControl hub = new GameControl(); public East_West direction; private int currentArea; private int[] possibleExits; private int areaNext;
// Use this for initialization
void Start()
{
currentArea = hub.GetArea();
possibleExits = hub.GetPossibleExits(currentArea);
}
void OnTriggerEnter(Collider other)
{
if ((int)direction.playerDirection == 0)
areaNext = possibleExits[1];
else if ((int)direction.playerDirection == 1)
areaNext = possibleExits[2];
//Debug.Log(areaNext);
if (areaNext != -1)
{
currentArea = areaNext;
hub.SetArea(currentArea);
Debug.Log(hub.GetArea());
}
}
}