Hemen, hiru ZS aurkituko dituzue objektuak mugiarazteko automatikoki, hau da, erabiltzailearen interakziorik gabe, modu desberdinetan:
SimpleMovementX: Objektua, hasierako posiziotik abiatuta, eskuineratza mugituko da MaxX posiziora heldu arte. Une horretan berriz hasierako posiziora bueltatu eta horrela etengabe arituko da. PROPERTY-AK: Abiadura eta MaxX
SimpleMovementY: Objektua, hasierako posiziotik abiatuta, gorantza mugituko da MaxY posiziora heldu arte. Une horretan berriz hasierako posiziora bueltatu eta horrela etengabe arituko da. (SimpleMovementX bezala baina Y ardatzean) PROPERTY-AK: Abiadura eta MaxY
TarteanMugitu: Script honen bidez gure objektua konfiguratutako norabidean hasierako puntutik aurrera eta atzera ibiliko da puntu horretatik zehaztutako distantziararte. PROPERTY-AK: Abiadura, Norabidea eta MaxMoveDistance
Oso erabilgarriak izango dira etengabe mugitzen ibili behar diren objektuentzako, adibidez plataforma mugikorrak, etsai mugikorrak...
Kode hau Transform osagaia duen objektu bati esleituz, X ardatzean dagoen puntutik aurrera mugiaraziko du guk definitutako posizio batera ailegatu arte. Puntu horretara ailegatzerakoan berriz hasierako posiziora bueltatuko da eta muginmendu hori behin eta berriro egingo du.
class SimpleMovementX : ZilchComponent
{
//Script honen bidez, objektua X ardatzean eskuinera mugituko da hasierako puntutik
//zehaztutako MaxX balioa duen punturarte. Puntu horretara ailegatzean berriro
//hasierako puntutik eskuinera abiatuko da.
//Ziurtatu MaxX handiagoa dela bere hasierako posizioaren x ardatzeko osagaia
//baino, bestela ez da mugituko!
//Soilik esleitu ahal zaio Trasform osagaia duen objektu bati
[Dependency]
var Transform : Transform;
[Property]
var Max:Real = 12;
[Property]
var Abiadura:Integer = 1;
//Ondoko aldagaia ez da property-a baina bai klase aldagaia
var HasierakoPosizioa:Real3=Real3(0,0,0);
function Initialize(init : CogInitializer)
{
// Connect to the LogicUpdate event:
Zero.Connect(this.Space, Events.LogicUpdate, this.OnLogicUpdate);
this.HasierakoPosizioa= this.Owner.Transform.Translation;
}
function OnLogicUpdate(event : UpdateEvent)
{
//Ondo konfiguratuta badago mugitu(MaxX hasierako posizioa baino handiagoa)
if (this.MaxX >= this.HasierakoPosizioa.X)
{
// Get current position:
var position = this.Owner.Transform.Translation;
// Update position to the right:
position.X += event.Dt * this.Abiadura;
// If past a certain point,
if (position.X >= this.MaxX)
{
// reset the position.
position.X = this.HasierakoPosizioa.X;
}
// MOVE! Update Translation with changes:
this.Owner.Transform.Translation = position;
}
}
}
Kode hau Transform osagaia duen objektu bati esleituz, Y ardatzean dagoen puntutik gorA mugiaraziko du, guk definitutako posizio batera ailegatu arte. Puntu horretara ailegatzerakoan berriz hasierako posiziora bueltatuko da eta muginmendu hori behin eta berriro egingo du.
class SimpleMovementY : ZilchComponent
{
//Script honen bidez, objektua Y ardatzean gora mugituko da hasierako puntutik
//zehaztutako MaxY balioa duen punturarte. Puntu horretara ailegatzean berriro
//hasierako puntutik gora abiatuko da.
//Ziurtatu MaxY handiagoa dela bere hasierako posizioaren y ardatzeko osagaia
//baino, bestela ez da mugituko!
//Soilik esleitu ahal zaio Trasform osagaia duen objektu bati
[Dependency]
var Transform : Transform;
[Property]
var MaxY:Real = 12; //MaxY hasierako posizioaren y osagaia baino handiagoa)
[Property]
var Abiadura:Integer=1;
var HasierakoPosizioa:Real3=Real3(0,0,0);
function Initialize(init : CogInitializer)
{
// Connect to the LogicUpdate event:
Zero.Connect(this.Space, Events.LogicUpdate, this.OnLogicUpdate);
this.HasierakoPosizioa= this.Owner.Transform.Translation;
}
function OnLogicUpdate(event : UpdateEvent)
{
//Ondo konfiguratuta badago, mugitu
if (this.MaxY >= this.HasierakoPosizioa.Y)
{
// Get current position:
var position = this.Owner.Transform.Translation;
// Update position to the right:
position.Y += event.Dt * this.Abiadura;
// If past MaxY point,
if (position.Y >= this.MaxY)
{
// reset the position.
position.Y = this.HasierakoPosizioa.Y;
}
// MOVE! Update Translation with changes:
this.Owner.Transform.Translation = position;
}
}
}
Kode hau Transform osagaia duen objektu bati esleituz, zehaztutako norabide baten mugituko da aurrera eta atzera gehienezko distantzia batera urrundu arte. Orduan, buelta emango eta eta horrela ibiliko da etengabe.
class TarteanMugitu : ZilchComponent
{
//Script honek bidez gure objektua konfiguratutako norabidean hasierko puntutik
//aurrera eta atzera ibiliko da puntu horretatik zehaztutako distantziararte.
//Script hau Transform osagaia duen objektuari soilik esleitu ahal zaio
[Dependency]
var Transform : Transform;
[Property]
var Abiadura: Real = 5.0;
[Property]
var Direction: Real3 = Real3(0.0, 1.0, 0.0);
[Property]
var MaxMoveDistance: Real = 10.0;
var StartPosition: Real3 = Real3();
function Initialize(init : CogInitializer)
{
// We need to update the object's behavior every logic update
Zero.Connect(this.Space, Events.LogicUpdate, this.OnLogicUpdate);
// Jakin behar dugu non hasi den, kalkulatzeko mugitutako distantzia
this.StartPosition = this.Owner.Transform.Translation;
}
function OnLogicUpdate(event : UpdateEvent)
{
// Kalkulatu hasierako posiziotik mugitutako distantzia
var displacement = this.Owner.Transform.Translation - this.StartPosition;
var distanceFromStart = Math.Length(displacement);
// Gehienezko distantzia gainditu badugu, noranzkoa aldatu!
if (distanceFromStart >= this.MaxMoveDistance)
{
// Change direction to go back the way we came
this.Direction = -displacement;
}
// Ensure the Direction is only a direction via normalization
this.Direction = Math.Normalize(this.Direction);
// Mugitu!
this.Owner.Transform.Translation += this.Direction * event.Dt * this.Abiadura;
}
}