FANDOM



Bonjour à tous ! Bienvenue dans mon premier tutoriel qui sera, je l'espère, le premier d'une longue série.

Pour ceux qui me connaissent pas, j'ai participé à la création de : Porté par le Vent, Doomsday Carrot Rampage et CraftFighter. Ma spécialité étant le scripting, c'est de ça dont je vais vous parler.

Mon objectif va être de vous montrer comment scripter avec CraftStudio. J'entends par là vous aider à comprendre comment fonctionne l'API et comment l'utiliser.

J'aimerais quand même vous prévenir que je ne reprends pas tout à zéro. Je vais essayer d'expliquer le plus de choses possible mais je présume que vous avez déjà regardé le wiki relativement en détail et que vous êtes allé un peu voir les jeux déjà créés.

Il existe également un tuto de Florent sur le forum qui explique un peu des principes de base en LUA : http://www.craftstudio-france.fr/forum/viewtopic.php?f=5&t=264.?



Le script Modifier

Bon sans plus tarder, entrons dans le vif du sujet !

Vous êtes content, vous avez fait un héros qui a trop la classe. Il ne vous reste qu'un seul problème : comment je fais pour le faire bouger ?

Et bien, ce n'est pas si compliqué. Voici ma solution :

local MOVE_SPEED = 0.1 
local ROTATE_SPEED = 2 

function Behavior:Awake() 

end 

function Behavior:Update() 
    local horizontal = CraftStudio.Input.GetAxisValue( "Horizontal" ) 
    local vertical = CraftStudio.Input.GetAxisValue( "Vertical" ) 

    self.gameObject.transform:Rotate( Quaternion:FromAxisAngle( Vector3:Up(), horizontal*ROTATE_SPEED) )
    self.gameObject.transform:MoveOriented( vertical*Vector3:Forward()*MOVE_SPEED ) 
end


Pour le faire fonctionner, il faut avoir les axes horizontal et vertical définis dans l'onglet d'administration. Pour horizontal : Q en positif et D en négatif. Pour verticial : Z en positif et S en négatif. Il suffit ensuite d'attacher ce script à l'object que vous voulez contrôler.

Ce script permet de faire pivoter votre personnage avec Q et D et de le faire avancer ou reculer avec Z et S.

Essayons de comprendre ça. Nous avons au début :

local MOVE_SPEED = 0.1
local ROTATE_SPEED = 2


Ce sont deux constantes qui permettent de rendre notre script plus lisible. Plutot que d'utiliser des nombres, il est préférable de les décaler au début en tant que constante.

Nos deux constantes ici nous permettent de définir la vitesse de déplacement et la vitesse de rotation.

Ensuite, la fonction Awake est vide. Il n'y a rien à mettre la dedans dans notre cas.

Enfin le Update :

local horizontal = CraftStudio.Input.GetAxisValue( "Horizontal" )
local vertical = CraftStudio.Input.GetAxisValue( "Vertical" )

On regarde avec ceux deux lignes si on appuie sur nos touches de contrôle. Quand on appuit sur Z vertical passe à 1. Si on appuit sur D horizontal passe à -1 etc...

Ensuite :

self.gameObject.transform:Rotate( Quaternion:FromAxisAngle( Vector3:Up(), horizontal*ROTATE_SPEED) )

Cette ligne nous permet de faire tourner notre object.

self correspond à l'object auquel on a attaché le script. gameObject nous donne accès à l'object en lui même. transform nous permet d'utiliser les attributs liés au déplacement de l'object.

Dans notre cas, le premier qu'on utilise est Rotate. Celui ci nous permet donc de faire tourner notre object. Il prend en paramètre un Quaternion, un genre d'object bizarre qui traduit une rotation. Une façon de créer un Quaternion est de spécifier l'axe de rotation et la valeur de la rotation avec l'attribut FromAxisAngle. Dans notre cas, l'axe de rotation et le vecteur vertical, soit Vector3:Up() et la valeur de la rotation a été défini précédement : ROTATE_SPEED.

On note également que j'ai multiplié ROTATE_SPEED par horizontal. En effet, on veut que la rotation s'effectue que si on appuie sur les touches qui correspondent. Si on touche à rien, horizontal vaut 0 et donc notre object tourne de 0 dégré.

Dernière ligne :

self.gameObject.transform:MoveOriented( vertical*Vector3:Forward()*MOVE_SPEED )

Le début de la ligne est identique. La différence est l'attribut de transform que l'on utilise.

Cette fois, on veut effectuer un déplacement. On peut alors utiliser MoveOriented qui permet de définir un déplacement en tenant compte de l'orientation de l'object. On veut que notre object droit devant lui. On utilise donc l'axe Vector3:Forward(). Ainsi, peu importe notre orientation notre object ira toujours droit devant lui d'après sa propre orientation. On remarque à nouveau une constante MOVE_SPEED définit auparavant. Il ne faut pas oublier une fois de plus de multiplier par? vertical. Lorsqu'on ne touche à rien, vertical vaut 0 et on ne bouge pas.

Conclusion Modifier

Voilà c'est la fin de mon premier tutoriel. J'espère que mes explications ne sont pas trop confuses.

Afin d'illuster mes propos, voici une vidéo faisant la démonstration de ce script !

Video

Et voici le lien vers les sources qui m'ont permis de faire la vidéo : Pack

N'hésitez pas à me laisser des commentaires et de me dire ce que vous aimeriez que je montre !

Bilou84

Interférence d'un bloqueur de publicité détectée !


Wikia est un site gratuit qui compte sur les revenus de la publicité. L'expérience des lecteurs utilisant des bloqueurs de publicité est différente

Wikia n'est pas accessible si vous avez fait d'autres modifications. Supprimez les règles personnalisées de votre bloqueur de publicité, et la page se chargera comme prévu.

Sur le réseau FANDOM

Wiki au hasard