- Home /
Next Scene Script Help
I have this script to go to the next scene -
// Load the level named "Map_Select".
Application.LoadLevel ("Map_Select");
http://unity3d.com/support/documentation/ScriptReference/Application.LoadLevel.html
but it changes right away. I want it to change when i click on a box with Box Collider. Any help???
Answer by dood_legacy · Jun 11, 2012 at 04:20 AM
This is a lot of code to answer your question -- but it is generally how I do clickable buttons from content (i.e. out of Maya). I have a button of whatever shape and texture, and a plane that represents the click area, and I name that plane 'collider'.
This first script is GUITouchBase.cs. It is the base class that handles generic click events. The second script is the place where you'd handle these click events and call Application.LoadLevel()
using UnityEngine;
using System.Collections;
public class GUITouchBase : MonoBehaviour
{
private MeshCollider plane;
private Transform collision;
private RaycastHit hit;
public float rayDepth= 100.0f;
public delegate void OnTouchedDelegate();
public OnTouchedDelegate TouchedDelegate;
void Start ()
{
// content requirement: provide a mesh called 'collider'
// that will be raytested against.
collision = gameObject.transform.FindChild("collider");
collision.renderer.enabled = false;
plane = collision.gameObject.AddComponent<MeshCollider>();
MeshFilter filter = collision.gameObject.GetComponent<MeshFilter>();
plane.sharedMesh = filter.mesh;
}
void Update ()
{
if ( Input.GetMouseButtonDown( 0 ) )
{
Ray ray = Camera.main.ScreenPointToRay( Input.mousePosition );
if ( plane.Raycast( ray, out hit, rayDepth ) )
{
if ( TouchedDelegate != null )
{
OnTouched( TouchedDelegate );
}
}
}
}
public void OnTouched (OnTouchedDelegate d)
{
if (d != null)
{
d ();
}
}
}
And here is the second script -- the one you'd actually attach to your button object.
using UnityEngine;
using System.Collections;
public class GUILoadLevelButton : MonoBehaviour
{
private GUITouchBase toucher;
void Start ()
{
toucher = gameObject.AddComponent<GUITouchBase>();
toucher.TouchedDelegate = new GUITouchBase.OnTouchedDelegate(LoadLevel);
}
// If there is a successful raycast hit in the GUITouchBase Update method,
// this function will get called here because we assigned it to the
// TouchedDelegate of the GUITouchBase class.
public void LoadLevel()
{
Application.LoadLevel("Map_Select");
}
}
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
How to Set a bool to Individual Scenes (C#) 1 Answer
Fading To New Scene Problem? 1 Answer
Network load scene 0 Answers
Can't get simple script to work? 4 Answers