2013년 7월 31일 수요일

유니티 prefab에서도 enum은 int일뿐

사실 C++ 에서 enum을 많이 쓰는 이유는 enum자체가 int값이랑 별 다르지 않기 때문입니다. 예를 들어

enum eAnimal
{
    ANIMAL_DOG,
    ANIMAL_CAT
};

이 있으면 ANIMAL_DOG은 0, ANIMAL_CAT은 1에 불과할 뿐이죠.

int dogIndex = ANIMAL_DOG;

이런게 아무 문제 없이 되었으니까요. 이제는 C#부터 비롯한 다양한 언어에서(아마 C++ 차세세대 규격도 그랬던듯) enum을 strong type으로 다뤄서 저런게 쉽게 안되게 하긴 하는데 그래도..

int dogIndex = (int)ANIMAL_DOG;

하면 여전히 dogIndex는 0이 됩니다.

근데 C#에서 재밌는게 enum으로 부터 스트링 값을 뽑아올수가 있지요. 즉 ANIMAL_DOG을 실행중에 "ANIMAL_DOG"이라 문자열로 가져올수도 있는겁니다. 그래서 유니티를 만지면서 함 실험을 해봤습니다. 유니티에서 prefab을 만들면 그 값을 기억하는데 이때 enum 형을 기억하면 과연 문자열을 기억하는지 아니면 int로 기억하는지 궁금했어요.

사실 은근 string으로 저장되길 바랬습니다... string으로 저장하면 이런게 되거든요..
만약 prefab에 ANIMAL_CAT을 저장해눴는데.. 그 후에 eAnimal에 새로운 놈을 추가하면..

enum eAnimal
{
    ANIMAL_DOG,
    ANIMAL_MOO,
    ANIMAL_CAT
};

나중에 그 prefab을 읽어와도 숫자 1이 아닌 "ANIMAL_CAT"으로 읽히기에 중간에 다른 놈을 삽입해도 아무 문제가 없다는거죠...

근데 실험해보니... ANIMAL_MOO가 읽히더군요 -_-;

뭐 그래서 유니티에서 prefab저장할때 enum은 int 저장되는겁니다... 뭐 이거의 장점도 있어요.... 이름 바꾸긴 편하죠.. ANIMAL_CAT을 ANIMAL_MEOW로 바꿔도 아무 문제가 없거든요.

그럼 이상 후다닥 -_-

2013년 7월 24일 수요일

셰이더 프로그래밍 입문 GLSL 소스코드(비공식)

제가 출판했던 셰이더 입문 책의 샘플이 HLSL로 되어있는데 GLSL로 바꾸서 본인 블로그에 공개해주신 분이 계시더군요. 혹시라도 GL쪽을 더 많이 하시는 분들을 위해 여기에 링크를 걸어둡니다. 제목에 써놨듯이 비공식이며... 혹시라도 소스코드에 문제가 있더라도 전 모르는 일입니다.. 후후후 -_-

자 그럼 링크입니다.. 꺄아~


http://libsora.so/glsl_example/

2013년 7월 9일 화요일

인생은 결국 놀이의 문제다.

인생은 결국 놀이의 문제다. 젊어서 노느냐 아니면 늙어서 놀 수 있느냐...

- 김포프 (2013년 7월 5일)