存档

2010年12月15日 的存档

关于贴图动画的一些经验

2010年12月15日 没有评论

原文:
uthor: Joachim Ante – Extended by TomLong74

1 Description
2 Usage
3 Example
4 JavaScript – AnimatedTextureExtendedUV.js
[edit] Description

This script extends the capabilities of the original AnimatedTexureUV.js. This allows many animation skins or animation states to be stored in the same texture. They can be updated at run time to play the new skin or new animation state via SetSpriteAnimation();
[edit] Usage

Attach this script to the object that has a material with the animation cell-sheet texture. From your other script call this script’s SetSpriteAnimation() function with the new parameters:
colCount: the total number of columns in the animation cell-sheet;
rowCount: the total number of rows in the animation cell-sheet;
rowNumber: the row where this animation will start;
colNumber: the column where this animation will start;
totalCells: the number of cells in this animation;
fps: the number of cells (frames) per second the animation will play;
[edit] Example


Example function call: SetSpriteAnimation(4,4,1,0,4,12); Should animate the 4 green cells starting with the left most cell and at a speed of 12 cells per second.
[edit] JavaScript – AnimatedTextureExtendedUV.js

//vars for the whole sheet
var colCount : int = 4;
var rowCount : int = 4;

//vars for animation
var rowNumber : int = 0; //Zero Indexed
var colNumber : int = 0; //Zero Indexed
var totalCells : int = 4;
var fps : int = 10;
var offset : Vector2; //Maybe this should be a private var

//Update
function Update () { SetSpriteAnimation(colCount,rowCount,rowNumber,colNumber,totalCells,fps); }

//SetSpriteAnimation
function SetSpriteAnimation(colCount : int,rowCount : int,rowNumber : int,colNumber : int,totalCells : int,fps : int){

// Calculate index
var index : int = Time.time * fps;
// Repeat when exhausting all cells
index = index % totalCells;

// Size of every cell
var size = Vector2 (1.0 / colCount, 1.0 / rowCount);

// split into horizontal and vertical index
var uIndex = index % colCount;
var vIndex = index / colCount;

// build offset
// v coordinate is the bottom of the image in opengl so we need to invert.
offset = Vector2 ((uIndex+colNumber) * size.x, (1.0 – size.y) – (vIndex+rowNumber) * size.y);

renderer.material.SetTextureOffset (“_MainTex”, offset);
renderer.material.SetTextureScale (“_MainTex”, size);
}
中文的已经有人翻译出来了,大体意思是多。我在使用的过程中的经验:
1,添加cube到场景中;
2,添加材料到cube上;
3,将cube的shader设置为Tranparent/diffuse;
4,将贴图拉到cube上;
5,将贴图的Tiling的x,改成1/frame,frame表示,小贴图的个数;
6,脚本等,就不说了,就是有一个问题,发现,调用脚本动画时候,Time.time已经运转,那么就不是从第一帧开始执行了,我的解决方案是在Start()中获取一个起始时间,然后在脚本动画函数中,减去这个时间。
7,现在发现的问题是,贴图和cube的契合度,会出现,画质损失,或者,在最上面出现最下面的一些像素点。

分类: 游戏开发 标签:

unity圣典

2010年12月15日 没有评论

推荐一个unity手册汉化的网站:unity圣典
有很多志愿者一起翻译官方文档。这样会比较正规,比较有错误,可以被揪出。

分类: 游戏开发 标签: