본문 바로가기

프로그래밍287

Unity 3D - BladeMaster / WeaponTrail 캐릭터에 해당하는 Blade Master 본체용 스크립트와 컨트롤러용 스크립트가 있다 public 으로 추가된 WeaponTrail 에 직접 드래그 해서 어태치 했는지 뭔지는 모르겠지만.. 저런식으로 되어있다 BladeMaster 에는 단지 WeaponTrail 용 오브젝트를 가지고 있을 뿐 별 역활은 없고 Animation Controller 에서 WeaponTrail 의 시작과 정지를 지시한다 웨폰 자체는 별게 없다.. 아무것도 없다는걸 각인시키기 위한 샷이랄까 ㅡㅡ;; 결국 무기 아래에 이런 오브젝트를 붙여놓고 위와 같이 세팅을 해놓자... 이런이런.. 매쉬 자체를 비워놓고 검의 괘적을 따라 실시간으로 매쉬를 재구성하는 것인가 ㅡ,.ㅡ;;; 부하는 괜찮으려나... 2013. 8. 28.
Unity 3D - LOD 관련 http://chulin28ho.tistory.com/12 2013. 8. 19.
Unity 3D - Animation Scripting 유니티의 애니메이션 시스템은 멋지게 애니메이션이 적용된 스키닝이 된 캐릭터를 만드는 것을 가능하게 해줍니다. 애니메이션 시스템은 애니메이션 블렌딩 blending, 믹싱 mixing, 가산 additive 애니메이션, 걷기사이클 시간동기화 walk cycle time synchronization, 애니메이션 레이어, 애니메이션 재생에 관한 모든 면에서의 제어 (시간, 속도, 블렌드 웨이트 blend-weights), 버텍스 당 1, 2, 혹은 4개 본 bone 들의 메쉬 스키닝뿐만 아니라 물리 기반의 랙돌 ragdoll 과 절차적 애니메이션 procedural animation 도 지원합니다. 가장 만족스런 결과를 얻기 위해서는 Modeling Optimized Characters 페이지의 유니티에서 최.. 2013. 8. 15.
Unity 3D - FBX 애니메이션 animation import export 분리된 애니메이션 http://korea.unity3d.com/board/index.php?db=qnalist&no=1985&mari_mode=view@view&cate=&page=1&listURL=http%3A%2F%2Fkorea.unity3d.com%2Fboard%2F%3Fpage%3D1%26db%3Dqnalist%26search%3Dtitle%26search_str%3D%EC%95%A0%EB%8B%88%EB%A9%94%EC%9D%B4%EC%85%98&search=title&search_str=%EC%95%A0%EB%8B%88%EB%A9%94%EC%9D%B4%EC%85%98&temp FBX Importer - Animations Tabhttp://docs.unity3d.com/Documentation.. 2013. 8. 7.
Unity3D - CharacterController : Script Reference Description CharacterController 당신이 쉽게 이동이 rigidbody를 처리하지 않고 충돌에 의해 제약을 수행 할 수 있습니다. CharacterController는 힘에 의해 영향을받지 않습니다 당신은 이동 funtion를 호출하는 경우에만 이동합니다. 그런 다음 동작을 수행하지만 충돌에 의해 제한 될 수. See Also: Character Controller component and Character animation examples Variables center변환의 위치를 기준으로 문자의 캡슐의 중심입니다. collisionFlags무엇 캡슐 부분은 마지막 CharacterController.Move 동안 환경과 충돌 call. detectCollisions다른 강체 또.. 2013. 8. 5.
boost::atomic & lockfree boost_1_53_0 에 드디어 lockfree 정식 등록... 이제 Tim 씨 홈페이지에서 받아서 덮어쓰는 수고를 덜겠군요... Tim 씨 축하합니다 :) 예제 첫번째 예제. vector 에서 쓰레드 4개로 순차적으로 숫자를 뽑아 사용하고 버렸을 때 ㅎㅎ 해보지 않아도 끔찍하지요.. 돌아갈리가 없습니다 #include "stdafx.h" #include std::vector g_NumList; void WorkerFunc() { while(true) { if(!g_NumList.empty()) { int n = g_NumList.back(); std::cout 2013. 6. 14.
boost 라이브러리 설치 1. 라이브러리를 다운로드 (http://www.boost.org/users/history/ 에 가서 최신 버전을 받자) 2. 다운로드 받은 파일을 압축해제해서 라이브러리를 저장할 곳에 압축을 푼다 3. 압축을 푼 폴더로 들어가 boostrap.bat 을 실행 시킨다 4. cmd (윈도우버튼 + R 누르고 cmd 엔터) 실행 시켜서 압축 푼 폴더로 들어간다 5. 아래의 명령어를 입력 후 엔터 b2 toolset=msvc-10.0 variant=debug,release link=static threading=multi address-model=32 runtime-link=static 비주얼 스튜디오 버전에 따라서 msvc-10.0 을 8.0 이나 11.0 으로 고쳐준다. 라이브러리 경로를 바꿔주고 싶다면 .. 2013. 6. 12.
boost::ptr_unordered_map std::map 과 같지만 일반적으로 속도가 더 빠른 것으로 알려져 있는 unordered map 과 소스를 ptr 로 썼을 때의 안정성을 강화시키는 ptr_ 시리즈를 합해 ptr_unordered_map 이라는 컨테이너가 있습니다. 별도의 clear 를 호출 하지 않아도 메모리의 누수가 발생하지 않습니다. boost::shared_ptr 과의 상성이 좋다고 추천하고 있으니 같이 써 보도록 하지요 예제 #include "stdafx.h" #include #include #include #include class CTest { float m_fLifeSec; boost::timer m_Timer; public: bool m_bDeleteMe; void Run() { if(m_Timer.elapsed() >.. 2013. 5. 24.
미리 컴파일된 헤더의 가상 메모리 범위 초과 error C3859: PCH에 대한 가상 메모리 범위를 초과했습니다. 명령줄 옵션을 '-Zm129' 이상으로 지정하여 다시 컴파일하십시오. 무슨 말이 필요할까요 :) 아래 그림대로 하세요 2012. 11. 23.
Asio Client / Server NetEngine 어떤 엔진에서도 사용이 가능하도록 DLL 로 Server / Client NetEngine 으로 만들어 봤습니다 구조는 흔해빠진 디자인패턴 클라이언트 / 서버를 기초로 제작 했습니다 서버나 클라이언트 같은 구조를 가지고 있습니다 다만 클라랑 서버랑 보내고 받는 쪽 역활이 바뀔 뿐 사용된 것 - Asio - thread - thread group - function bind - shared pointer - posix timer - pool - lockfree queue - queue - tuple - byte streaming - byte encrypt decrypt - callback map - multi index map - program options 2012. 11. 22.
ShootingStar 2012 2003년 제대하고 DX9 이 새로 나온 것을 발견하고 감각을 찾고자 만들어봤던 슈팅게임 ShotingStar 그러나 내부 구조는 그다지 스마트하지 못했는데 이번에 라이트한 3D 엔진을 만들면서 그 엔진을 이용 해 옛날 ShotingStar 를 새롭게 복원해 보기로 했습니다 그저 나누기만 하면 멋진줄 알고 개판쳤던 기존의 프로젝트에서 엔진 DLL 을 베이스로 한 심플한 구조로- 사용된 것 들 - DirectX9 - DirectX Input - vector - shared pointer - thread group - shared mutex - multi index map - Actor Based Multi Override title 에서 enter 를 쳐야 넘어가집니다 2012. 11. 22.
boost::program_options 응용 프로그램을 아규먼트를 넘겨줘서 실행하고 싶을 때 _CHAR* argv 처리한다고 이렇게 만들고 저렇게 만들고 사람마다 다 다를 꺼라고 봅니다. 이것을 시간낭비하지 말고 program_options 를 이용해서 일관되게 만들면 서로 서로 불편할 일 없겠죠 :) 예제#include "stdafx.h" #include namespace po = boost::program_options; int _tmain(int argc, _TCHAR* argv[]) { // 아규먼트 옵션에 대한 설명 po::options_description desc("사용가능한 옵션들"); desc.add_options() ("help", "도움말을 봅니다") ("ip", po::value(), "접속할 서버의 ip 를 입력합니다".. 2012. 11. 16.
boost::function / boost::tuple 의 활용 function callback map 을 만들고 거기에 tuple 을 이용한 변수의 적용을 하는 예제를 만들어 보았습니다 제가 실제 활용한 것은 어떤 패킷에 대한 콜백 처리와 서버 접속자에 대한 send 처리에 활용을 했지요 여기에 템플릿까지 잘 적용하면 더 멋진 모습이 되지만 일단 본 내용에서 전달하고자 하는 취지와는 안맞으니 생략 합니다 :) 예제 소스 #include "stdafx.h" #include #include // 본 예제와는 관계 없음, 다만 BYTE 정의 때문에 추가 #include #include #include class CTestMng { typedef boost::functionTYPE_CNT_CB; std::map m_CallbackMap;// 유저 id 와 send 콜백 맵.. 2012. 11. 7.
boost::tuple / tuples / tuples::tuple 여러개의 변수를 주고 받거나 동시에 다뤄야할 때 유용한- 대표적으로 변수는 하나 넘겨줘야되는데 많은 양의 정보를 넘겨줄 때 유용 할 것 같네요 예제 소스 #include "stdafx.h" #include #include #include #include #include #include class CTest { int m_nVal; public: CTest() : m_nVal(0) {} CTest(int n) : m_nVal(n) {} }; // 생성 및 초기화 boost::tuple t0; boost::tuple t1; boost::tuple t2(3);// 3으로 초기화 boost::tuple t3; boost::tuple t4(CTest(1));// 1로 초기화 boost::tuple t5(t2);/.. 2012. 11. 6.
boost::shared_ptr 과 Virtual Function 과 boost::timer 가상함수를 더 스마트하게 사용하는 방법. shared_ptr 을 이용한 간단한 게임모드 변경을 예로 예제를 작성하였습니다. 실제 최근 개발한 개인 프로젝트에서도 사용한 방법이지요 게임모드 외에도 엑터 관리나 상속을 통해서 만드는 모든 구조에 대해서 응용이 가능합니다 예제 #include "stdafx.h" #include #include #include #include class CGameMode { public: virtual void Run() = NULL; }; class CLogo : public CGameMode { public: void Run() { std::cout 2012. 10. 25.
boost::random http://www.boost.org/doc/libs/1_51_0/doc/html/boost_random.html boost 에서 랜덤 생성도 제공해 줍니다 rand(time(0)) 을 쓸때 생기는 흔한 (혹은 뻔한) 패턴을 피해서 각자 만들곤 하는데 그런 노고를 안해도 될 듯 하네요 1~6 랜덤 숫자 구하기 #include int GetDice() { boost::random::mt19937 rng; boost::random::uniform_int_distribution six(1,6); return six(rng); } 특정 숫자 범위내에서 구하기 #include #include int GetRand() { boost::random::mt19937 gen; boost::random::uniform_i.. 2012. 10. 24.
boost::asio 비동기 서버/클라 step 2 2011/11/09 - [프로그래밍/boost] - boost::asio 비동기 서버/클라 step 1 에 이어서 계속 됩니다 Client -> Recv -> Recv Queue -> Worker Thread -> Send Queue -> Send Callback -> Client 분홍색 까지의 부분을 소스 예제로 봅시다! 어디까지나 예제 차원으로 (원래 asio 예제도 그렇고) class 내부에 막 때려넣었으니 따라하거나 이상한 코딩하는 사람으로 오해하지마세요 ^^; 소스 퍼가실 때 소스코드 부분을 더블 클릭해서 전체 선택 후 카피가 좋습니다 드래그 하면 한줄로 복사되요 컴파일 관련은 이전 글을 참고해 주세요 새롭게 class 가 하나 추가 됐습니다. Worker 인데요 사용된 기술은 boost::lo.. 2012. 9. 25.
오버라이드(Override)와 가상함수(Virtual Function) 오버라이드는 상속관계에서 함수 자신의 내부에서 관련 함수를 찾아서 동작하기 때문에 내부 함수가 있다면 부모쪽으로 넘어가지 않으니 자연히 자기가 가진 함수가 동작하게 된다 가상함수는 내부에서 결정하지 않고 포인터가 실제 가르키는 객체에서 동작을 하게 된다 설명이 조잡하지만, 예제를 보면 이해가 될테고 활용하는데 도움이 될 듯. 관련 내용 추천도서는 effective c++ 이다.. 뭐 지금은 이 바닥 교과서 처럼 된 듯 예제 #include "stdafx.h" #include #include #include class CItem { public: virtual void Run() const = 0; void IsA() { std::cout 2012. 9. 6.
boost::asio 비동기 TCP 서버 / 클라 예제 boost asio 안내서에 있는 기본 예제를 응용하여 작성했으며 컴파일러 옵션은 /Mtd 로 해야 합니다. 클라이언트 부분의 const string 은 내 IP 로 수정해줘야 합니다. 기존에 올렸던 내용은 소스 링크가 깨져서 다시 올립니다 (많은 분들이 보러 오셨는데 ㅠㅠ 깨져있었을 줄이야..) 소스는 퍼가실 때 소스 부분을 더블클릭하면 아랫쪽에 작은 창이 뜨면서 ctrl+c 로 전체 카피가 가능합니다 클라 소스#include "stdafx.h" #include #include #include #include const std::string _MY_IP("192.168.25.2 2012. 9. 3.
RPG 만들기 (23) 70 여마리의 캐릭터 오브젝트들이 대규모 전투를 하는 것을 꾸며봤습니다, 부하 테스트 겸 시험해 봤는데 애초에 필드 고 뭐고 LOD 전혀 안쓴 상태에 에디터 플레이인걸 감안한다 해도 썩 좋은 성능은 아닌 듯 58 프레임 정도가 나오네요 NPC 와 몬스터 오브젝트들의 전투... 흔히 나오는 디아블로3의 요세전 (물론 이건 AI 는 아니고 연출된 장면이지만) 이 나 블레이드 앤 소울의 세력들 다투고 있는 규모 보다는 조금 큰 정도? 안캠코더로 한번 해 봤는데 ㅠㅠ 아.. 철수형... 촬영 60 프레임은 해줘야지 한계가 30이 뭐야.. 엄청 끊기네 다음엔 다른거로 해야겠군요 2012. 8. 31.