Mugimendu sinple batzuk

Mugimendu sinple batzuk egiteko script batzuk ikusiko ditugu hemen.

Kasu guztietan ikusiko duzue osagai berri bat dagoela:
[Dependency]
var Transform: Transform;

Honekin esaten diogu script hau soilik esleitu ahal zaiola Transform osagaia duen objektu bati. Honekin ziurtatzen dugu ez digula utziko esleitzen kode hau osagai hori ez duen objektu bati.
Frogatu ahal duzue ea LevelSettins objektuari esleitzen uzten dizuen...
Honek ekidituko dizkigu aurretik izan ditugun arazo batzuk objektub desegokiari esleitzeagatik scriptak.
Hau egitea interesgarria da "this.Owner.Xxxxxx." motako kodea erabiltzen dugun script guztietan. 

Adibidez, "this.Owner,Sprite.yyyyy" erabili badugu kodean
[Dependency]
var Sprite:Sprite; 
idatziko genuke klase hasieran eta Sprite osagaia duten objektuei soilik esleitu ahal izango da, exekutatzerakoan akatsik ez dela agertuko ziurtatuz.
SimpleMovementX
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 
  //zehazstutako X 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 MaxX:Real = 12;
  [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(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;
      }
    }
}

SimpleMovementY
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 Y 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;
  [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(MaxY hasierako posizioa baino handiagoa)
      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;
      }
    }
}

TarteanMugitu
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);
        
        // Have to know where we started to know how far we've moved
          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);

        // Apply movement
        this.Owner.Transform.Translation += this.Direction * event.Dt * this.Abiadura;
        
    }
    
}


iruzkinik ez:

Argitaratu iruzkina

Idatzi zure komentarioa. Laster argitaratuko dut. Mila esker!