- Home /
Question by
kaparov · Feb 24, 2014 at 04:25 PM ·
flyingisland-demo
Changing the seagull fly path in the island demo, from point A to B
I’m using the island demo, and I want to manipulate the flaying path of the seagull, so that I can determinate a flying line from point A to point B. The actual script make the seagulls fly in a circle with a determinated speed and radius. Here is the script, tank you for any help:
#pragma strict
#pragma implicit
#pragma downcast
var flySpeed = 15.00;
var highFlyHeight = 80.00;
var normalFlyHeight = 40.00;
var lowFlyHeight = 20.00;
var flyDownSpeed = 0.10;
var circleRadius = 60.00;
var circleSpeed = 0.20;
var circleTime = 15.00;
var awayTime = 20.00;
var offset : Vector3;
private var myT : Transform;
private var player : Transform;
private var awayDir : Vector3;
private var flyHeight = 0.00;
private var col : Collider;
private var hit : RaycastHit;
= 0.00;
private var lastHeight = 0.00;
private var height = 0.00;
private var terrainSize : Vector3;
private var terrainData : TerrainData;
private var dTime = 0.1;
function Start ()
{
terrainData = Terrain.activeTerrain.terrainData;
terrainSize = terrainData.size;
col = Terrain.activeTerrain.collider;
myT = transform;
player = gameObject.FindWithTag("Player").transform;
MainRoutine();
}
function MainRoutine ()
{
while(true)
{
yield ReturnToPlayer();
yield CirclePlayer();
yield FlyAway();
}
}
function ReturnToPlayer()
{
distToTarget = 100.00;
while(distToTarget > 10)
{
toPlayer = player.position - myT.position;
toPlayer.y = 0;
distToTarget = toPlayer.magnitude;
if(distToTarget > 0) targetPos = transform.position + ((toPlayer / distToTarget) * 10);
else targetPos = Vector3.zero;
targetPos.y = terrainData.GetInterpolatedHeight(targetPos.x / terrainSize.x, targetPos.z / terrainSize.z);
normal = terrainData.GetInterpolatedNormal(targetPos.x / terrainSize.x, targetPos.z / terrainSize.z);
offset = Vector3(normal.x * 40, 0, normal.z * 40);
flyHeight = (distToTarget > 80) ? highFlyHeight : lowFlyHeight;
if(distToTarget > 0) Move(targetPos - transform.position);
yield WaitForSeconds(dTime);
}
}
function CirclePlayer()
{
var time = 0.00;
while(time < circleTime)
{
circlingPos = player.position + Vector3(Mathf.Cos(Time.time * circleSpeed) * circleRadius, 0, Mathf.Sin(Time.time * circleSpeed) * circleRadius);
circlingPos.y = terrainData.GetInterpolatedHeight(circlingPos.x / terrainSize.x, circlingPos.z / terrainSize.z);
normal = terrainData.GetInterpolatedNormal(circlingPos.x / terrainSize.x, circlingPos.z / terrainSize.z);
offset = Vector3(normal.x * 40, 0, normal.z * 40);
flyHeight = normalFlyHeight;
Move(circlingPos - myT.position);
time += dTime;
yield WaitForSeconds(dTime);
}
}
function FlyAway()
{
radians = Random.value * 2 * Mathf.PI;
awayDir = Vector3(Mathf.Cos(radians), 0, Mathf.Sin(radians));
var time = 0.00;
while(time < awayTime)
{
away = player.position + (awayDir * 1000);
away.y = 0;
toAway = away - transform.position;
distToTarget = toAway.magnitude;
if(distToTarget > 0) targetPos = transform.position + ((toAway / distToTarget) * 10);
else targetPos = Vector3.zero;
targetPos.y = terrainData.GetInterpolatedHeight(targetPos.x / terrainSize.x, targetPos.z / terrainSize.z);
normal = terrainData.GetInterpolatedNormal(targetPos.x / terrainSize.x, targetPos.z / terrainSize.z);
offset = Vector3(normal.x * 40, 0, normal.z * 40);
flyHeight = highFlyHeight;
Move(targetPos - transform.position);
time += dTime;
yield WaitForSeconds(dTime);
}
}
function Move (delta : Vector3)
{
delta.y = 0;
delta = delta.normalized * flySpeed * dTime;
newPos = Vector3(myT.position.x + delta.x, 1000, myT.position.z + delta.z);
if(col.Raycast(Ray(newPos, -Vector3.up), hit, 2000)) newHeight = hit.point.y;
else newHeight = 0.00;
if(newHeight < lastHeight) height = Mathf.Lerp(height, newHeight, flyDownSpeed * dTime);
else height = newHeight;
lastHeight = newHeight;
myT.position = Vector3(newPos.x, Mathf.Clamp(height, 35.28, 1000.00) + flyHeight, newPos.z);
}
Comment
You need to change the move method to go from point A to point B ins$$anonymous$$d of going in circle. Or are you asking for the script as well?
Your answer
![](https://koobas.hobune.stream/wayback/20220613134554im_/https://answers.unity.com/themes/thub/images/avi.jpg)