Ai flying

I have a waypoint code. Is it possible to modify this code so that the object that uses this component banks or turns like an airplane?

My code:

var waypoints : Transform[ ];
var waypointRadius : float = 1.5;
var damping : float = 0.1;
var loop : boolean = false;
var speed : float = 2.0;
var faceHeading : boolean = true;
private var targetHeading : Vector3;
private var currentHeading : Vector3;
private var targetwaypoint : int;
private var xform : Transform;
private var useRigidbody : boolean;
private var rigidmember : Rigidbody;

// Use this for initialization
function 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
function FixedUpdate() {
targetHeading = waypoints[targetwaypoint].position - xform.position;

currentHeading = Vector3.Lerp(currentHeading,targetHeading,damping*Time.deltaTime);
}

// moves us along current heading
function 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
function OnDrawGizmos(){

Gizmos.color = Color.red;
for(var i : int = 0; i< waypoints.Length;i++)
{
var pos : Vector3 = waypoints*.position;*
if(i>0)
{
var prev : Vector3 = waypoints[i-1].position;
Gizmos.DrawLine(prev,pos);
}
}
}

Very, very rarely is it ‘not possible’ to implement a particular behavior or feature :slight_smile:

As for your question, for ‘cosmetic’ orientation effects (such as banking or rolling in your example), I’d recommend using a parent-child object pair, where the parent object follows the path and the child object banks in local space based on the parent object’s velocity delta (that is, acceleration).