unity 2d sprite animation

반응형

전체 파일 : 





위와 같이 16개의 이미지를 어떻게 하나씩 그리는가?

1. uv scale 사용. 


void Update () 

{
        1을 기준으로 1/4(0.25)만큼 오프셋을 주면  네번째 것을 출력한다.
        (1/16 ) * 4 = 0.25

renderer.material.mainTextureOffset = new Vector2(0.25f,0.0f);       
     
        하나의 이미지 크기는 1/16 = 0.0625. 

renderer.material.mainTextureScale = new Vector2(0.0625f, 1.0f);
} 

 2. UV Row Column 사용.
위 내용을 한 열의 갯수를 입력받는 (tileX,tileY) 방식으로 바꾸면 아래와같다.

void Update () 

{

renderer.material.mainTextureOffset = new Vector2(0.25f,0.0f);

Vector2 Size = new Vector2(1.0f/_tileX, 1.0f/_tileY);

renderer.material.mainTextureScale = Size;

print (Size);

} 

3. Offset Scale 사용.
offset scale을 이용하여 해당 인덱스의 위치를 계산한다. 

void Update () 

{

_index = _index % (_column * _row); // modulate

Vector2 Size = new Vector2(1.0f/_column, 1.0f/_row); // scale

Vector2 Offset = new Vector2(_index * Size.x, _row); // offset

renderer.material.mainTextureOffset = Offset;

renderer.material.mainTextureScale = Size;

} 

4. fps를 사용하여 animation 시키기.
 
void Update () 

{

int _index = (int)(Time.time * _framesPerSecond);

_index = _index % (_column * _row); // modulate

Vector2 Size = new Vector2(1.0f/_column, 1.0f/_row); // scale

Vector2 Offset = new Vector2(_index * Size.x, _row); // offset

renderer.material.mainTextureOffset = Offset;

renderer.material.mainTextureScale = Size;

}


 그렇다면 위와 같이 두줄로 되어 있는 것은 어떨까?
 
5. 2d animation array.

void Update () 

{

int _index = (int)(Time.time * _framesPerSecond);

_index = _index % (_column * _row); // modulate

        
// 가로, 세로 한 이미지당 크기.

Vector2 Size = new Vector2(1.0f/_column, 1.0f/_row); // scale

int u = _index % _column;

int v = _index / _column;

  

Vector2 Offset = new Vector2(u * Size.x, (1.0f-Size.y)-(v*Size.y)); // offset

renderer.material.mainTextureOffset = Offset;

renderer.material.mainTextureScale = Size;

}

6. Choose Frame Length
원하는 프레임 부터 원하는 프레임 까지 출력 

void Update () 

{

int _index = (int)(Time.time * _framesPerSecond);

_index = _index%_totalFrames;

Vector2 Size = new Vector2(1.0f/_columnSize, 1.0f/_rowSize); // scale

int u = _index % _columnSize;

int v = _index / _columnSize;

Vector2 Offset = new Vector2( (u + _colFrameStart) * Size.x, 

                 (1.0f-Size.y)-(v + _rowFrameStart) * Size.y  ); // offset

renderer.material.mainTextureOffset = Offset;

renderer.material.mainTextureScale = Size;



7. normal map

renderer.material.SetTextureOffset("_BumpMap", Offset);

renderer.material.SetTextureScale("_BumpMap", Size);

 

이 함수의 설명은 아래와 같다.

function SetTextureOffset (propertyName : String, offset : Vector2) : void 

Description

Sets the placement offset of texture propertyName.

Common texture names used by Unity's builtin shaders:
"_MainTex" is the main diffuse texture. This can also be accessed via mainTextureOffset property.
"_BumpMap" is the normal map.

"_Cube" is the reflection cubemap.

8. 함수로 빼서 사용.
그냥 함수로 뺀 것 뿐..
  
void Update () 

{

apiSprite(8, 2, 0, 0, 16, 12);

}

void apiSprite(int ColumnSize, int RowSize, int ColFrameStart, 

int RowFrameStart, int TotalFrames, float FramePerSecond)

{

int _index = (int)(Time.time * FramePerSecond);

_index = _index%TotalFrames;

Vector2 Size = new Vector2(1.0f/ColumnSize, 1.0f/RowSize); // scale

int u = _index % ColumnSize;

int v = _index / ColumnSize;

        Vector2 Offset = new Vector2( (u + ColFrameStart) * Size.x,
        (1.0f-Size.y)-(v + RowFrameStart) * Size.y  );
// offset

renderer.material.mainTextureOffset = Offset;

renderer.material.mainTextureScale = Size;

renderer.material.SetTextureOffset("_BumpMap", Offset);

renderer.material.SetTextureScale("_BumpMap", Size);

}

9. 다른 클래스로 빼서 사용.
 

위와 같이 두개의 클래스를 만들어 주고 Ani Sprite에 함수를 만들어 둔다.

public void apiSprite(int ColumnSize, int RowSize, int ColFrameStart, 

int RowFrameStart, int TotalFrames, float FramePerSecond)

{
...... 어쩌고 저쩌고 ...


그리고 UsingAniSprite클래스에서 AniSprite에 접근해서 사용한다.

void Update () 

{

AniSprite otherScript = GetComponent<AniSprite>();

if(Input.GetKey("d"))

{

otherScript.apiSprite(8, 2, 0, 0, 16, 12);

}



 

'Unity > Unity Study' 카테고리의 다른 글

Unity - Character Controller  (0) 2013.11.03
unity - time 출력  (0) 2013.10.30
unity - time 관련 함수  (0) 2013.10.30
자동 폴더 만들기.  (0) 2013.10.20
Unity Script Debug 방법  (0) 2013.03.27
TAGS.

Comments