- Home /
Waypoint help.
This is the waypoint code i use: // SeekSteer.cs // Written by Matthew Hughes // 19 April 2009 // Uploaded to Unify Community Wiki on 19 April 2009 // URL: http://www.unifycommunity.com/wiki/index.php?title=SeekSteer using UnityEngine; using System.Collections; public class SeekSteer : MonoBehaviour { public Transform[] waypoints; public float waypointRadius = 1.5f; public float damping = 0.1f; public bool loop = false; public float speed = 2.0f; public bool faceHeading = true; private Vector3 currentHeading,targetHeading; private int targetwaypoint; private Transform xform; private bool useRigidbody; private Rigidbody rigidmember; // Use this for initialization protected void Start () { xform = transform; currentHeading = xform.forward; if(waypoints.Length<=0) { Debug.Log("No waypoints on "+name); enabled = false; } targetwaypoint = 0; if(rigidbody!=null) { useRigidbody = true; rigidmember = rigidbody; } else { useRigidbody = false; } } // calculates a new heading protected void FixedUpdate () { targetHeading = waypoints[targetwaypoint].position - xform.position; currentHeading = Vector3.Lerp(currentHeading,targetHeading,damping*Time.deltaTime); } // moves us along current heading protected void Update() { if(useRigidbody) rigidmember.velocity = currentHeading * speed; else xform.position +=currentHeading * Time.deltaTime * speed; if(faceHeading) xform.LookAt(xform.position+currentHeading); if(Vector3.Distance(xform.position,waypoints[targetwaypoint].position)<=waypointRadius) { targetwaypoint++; if(targetwaypoint>=waypoints.Length) { targetwaypoint = 0; if(!loop) enabled = false; } } } // draws red line from waypoint to waypoint public void OnDrawGizmos() { Gizmos.color = Color.red; if(waypoints==null) return; for(int i=0;i< waypoints.Length;i++) { Vector3 pos = waypoints[i].position; if(i>0) { Vector3 prev = waypoints[i-1].position; Gizmos.DrawLine(prev,pos); } } } }
Now i have a helicopter with the player in it. The helicopter has a waypoint: the ground. It will crash. It works and all, but how would i make it so that when it hits the ground it goes to a different scene?
Answer by Oliver Eberlei · Jun 12, 2011 at 10:34 PM
If your helicopter and the ground have colliders attached to them, you can use
http://unity3d.com/support/documentation/ScriptReference/MonoBehaviour.OnCollisionEnter.html
This function will be called whenever a collision appears and you can then check if the collision is in fact with the ground (by checking the name or tag of the other collider).
Once you have the collision, you can use this function to load another scene
http://unity3d.com/support/documentation/ScriptReference/Application.LoadLevel.html
Sth like this
void OnCollisionEnter(Collision collision)
{
if( collision.gameObject.name == "Ground" )
{
Application.LoadLevel( "youAreDeadLevel" );
}
}
Your answer
Follow this Question
Related Questions
Updating main menu using PlayerPrefs when collecting an object in different scene (level) 1 Answer
Scene change for a fixed amount of players 0 Answers
Multiple Scenes: Are previous scenes still active after you call a new scene? 1 Answer
Unity seems to be taking a long time destroying a scene? 0 Answers
Scene Change Event 1 Answer