- Home /
Question by
KentRobertS · Oct 19, 2012 at 09:19 AM ·
animationjavascriptsprite
Changing number of frames in uvAnimationTileX
Hey Im trying to make a mario kart like game, but im having some trouble with the animation. For now im using this code, but the problem is that the animations for turning left and right have 5 frames, while forward animation have 12 frames. So was wondering if anyone knows how to change the number of frames, when a button is pressed. Like changing frames from 12 to 5, when "a" is pressed?
Thanks in advance :)
#pragma strict
var uvAnimationTileX = 24; //Here you can place the number of columns of your sheet.
//The above sheet has 24
var uvAnimationTileY = 1; //Here you can place the number of rows of your sheet.
//The above sheet has 1
var framesPerSecond = 10.0;
function Start () {
}
var Forward : UnityEngine.Texture;
var Right : UnityEngine.Texture;
var Left : UnityEngine.Texture;
function Update ()
{
//Changes texture to Forward when "w" is pressed down
if (Input.GetKeyDown ("w"))
renderer.material.mainTexture = Forward;
else if (Input.GetKeyUp ("w"))
renderer.material.mainTexture = Forward;
//Changes texture to Right when "d" is pressed down
//Changes texture to Forward when "d" is released
if (Input.GetKeyDown ("d"))
renderer.material.mainTexture = Right;
else if(Input.GetKeyUp ("d"))
renderer.material.mainTexture = Forward;
//Changes texture to Left when "a" is pressed down
//Changes texture to Forward when "a" is released
if (Input.GetKeyDown ("a"))
renderer.material.mainTexture = Left;
else if (Input.GetKeyUp ("a"))
renderer.material.mainTexture = Forward;
// Calculate index
var index : int = Time.time * framesPerSecond;
// repeat when exhausting all frames
index = index % (uvAnimationTileX * uvAnimationTileY);
// Size of every tile
var size = Vector2 (2.0 / uvAnimationTileX, 1.0 / uvAnimationTileY);
// split into horizontal and vertical index
var uIndex = index % uvAnimationTileX;
var vIndex = index / uvAnimationTileX;
// build offset
// v coordinate is the bottom of the image in opengl so we need to invert.
var offset = Vector2 (uIndex * size.x, 1.0 - size.y - vIndex * size.y);
renderer.material.SetTextureOffset ("_MainTex", offset);
renderer.material.SetTextureScale ("_MainTex", size);
}
Comment