Category Archives: Unity3D

Unity3D story

[펌] Unity Object Pool

원본 주소 : http://lab.gamecodi.com/board/zboard.php?id=GAMECODILAB_Lecture&no=280

 

1. 오브젝트를 일정 갯수 미리 생성해 pool 에서 꺼내쓰는 방법

2. 오브젝트 생성시 발생하는 딜레이를 줄일 수 있음

3. 재사용 가능

4. 메모리 사용량 예측 가능

 

 

 

using System.Collections;  
  
using System.Collections.Generic;  
  
   
  
/* 
 
 * Usage 
 
 *  
 
 * CGameObjectPool<GameObject> monster_pool; 
 
 * ... 
 
 *  
 
 * // Create monsters. 
 
 * this.monster_pool = new CGameObjectPool<GameObject>(5, () =>  
 
    {  
 
        GameObject obj = new GameObject("monster"); 
 
        return obj; 
 
    }); 
 
     
 
     
 
    ... 
 
     
 
    // Get from pool 
 
    GameObject obj = this.monster_pool.pop(); 
 
     
 
    ... 
 
     
 
    // Return to pool 
 
    this.monster_pool.push(obj); 
 
 * */  
  
public class CGameObjectPool<T> where T : class  
  
{  
  
    // Instance count to create.  
  
    short count;  
  
      
  
    public delegate T Func();  
  
    Func create_fn;  
  
      
  
    // Instances.  
  
    Stack<T> objects;  
  
   
  
    // Construct  
  
    public CGameObjectPool(short count, Func fn)  
  
    {  
  
        this.count = count;  
  
        this.create_fn = fn;  
  
   
  
        this.objects = new Stack<T>(this.count);  
  
        allocate();  
  
    }  
  
      
  
    void allocate()  
  
    {  
  
        for (int i=0; i<this.count; ++i)  
  
        {  
  
            this.objects.Push(this.create_fn());  
  
        }  
  
    }  
  
      
  
    public T pop()  
  
    {  
  
        if (this.objects.Count <= 0)  
  
        {  
  
            allocate();  
  
        }  
  
   
  
        return this.objects.Pop();  
  
    }  
  
      
  
    public void push(T obj)  
  
    {  
  
        this.objects.Push(obj);  
  
    }  
  
}

[2D Toolkit] 스프라이트를 겹칠 때 경계가 보이는 문제

롤링맵을 구현 할 때 맵 스프라이트 여러개를 붙여서 사용하는 경우가 많은데
그냥 만들면 경계가 보인다.
어찌어찌 위치를 조정해서 안보이게 하더라도
해당 스프라이트가 움직이기라도 하면 100% 경계가 보인다.

이 문제의 해결 방법!

1.SpriteCollection > Setting 에서 Premultiplied Alpha 체크

2. 밑으로 쭉 내리면 SpriteCollection 에서 사용되는 material 을 Inspector에서 선택

3. Shader 를 tk2d/PremulVertexColor 로 변경

후… 이거 해결하려고 하루 보냄.. ㅠ_ㅠ

http://unikronsoftware.com/2dtoolkit/forum/index.php?topic=323.0