Coding

    #1 AnimBlueprint와 AnimMontage Blend하기

    구현 내용 Enemy는 Player의 위치로 움직이고 일정 거리가 되면 공격 애니메이션(AnimMontage)을 플레이한다. 이슈 공격 애니메이션이 플레이 되었지만 (로그를 통해 확인함) 실제로 애니메이션이 바뀌지는 않았다. 마치 Locomotion이 실행되는 AnimBP가 AnimMontage와 Blend되지 않는 듯이. 해결 원인은 Blend가 되지 않는 것이 맞았다. 그렇다면 Blend해주는 것은 쉽다. AnimBP를 캐싱한 후 슬롯에다가 집어넣으면 된다. 이전에 동영상 강의를 들으면서 왜 애니메이션 포즈를 캐싱해두는지 이해가 안갔는데, 이번 기회에 헤매면서 확실히 이해할 수 있었다.

    Animation Blueprints

    Animation Blueprints Animation Blueprints는 스켈레탈 메쉬의 애니메이션을 제어하기 위해 존재한다. Animation Blueprints는 크게 두 개 그래프, 즉 EventGraph와 AnimGraph로 구성된다. EventGraph와 AnimGraph의 관계 Animation Blueprints와 가장 직접적인 관련이 있다고 할 수 있는 건 AnimGraph라고 할 수 있다. Animation Blueprint라는 것의 제1 목표는 이 프레임에 어떤 포즈를 취해야 하는지 계산하는 것이기 때문이다. AnimGraph에서 이러한 역할을 여러 애니메이션 노드를 통해 수행한다. 그렇다면 EventGraph는 왜 있는걸까? EventGraph는 AnimGraph의 계산과정에서 필..

    BlueprintCallable, BlueprintImplementableEvent, BlueprintNativeEvent

    UFUNCTION에 블루프린트와 관련한 세가지 옵션 - BlueprintCallable, BlueprintImplementableEvent, BlueprintNativeEvent -을 줄 수 있다. BlueprintCallable은 처음 보면 아 이걸 넣으면 블루프린트에 노드로 쓸 수 있는거구나 싶은데, BlueprintImplementableEvent, BlueprintNativeEvent은 단어만 보고는 바로 그 뜻을 알기가 쉽지 않다. 하지만 그 구분은 생각보다 명확한 차이가 있다. 언리얼 문서에서의 표현을 좀더 풀어서보면 다음과 같다. BlueprintCallable은 일종의 블랙박스를 만드는 것이다. 즉, BlueprintCallable이라는 말마따나 블루프린트 수준에서는 부를 수만 있고 작동 ..

    [python] 웹 크롤링으로 게시판 업데이트 확인하기 (1)

    계기 데스크탑을 사고 싶어서 핫딜을 알아보고 싶은데, 핫딜 게시판을 주기적으로 들르자니 너무 귀찮았다. RSS 느낌으로다가 게시판이 업데이트되면 terminal 수준에서 알려주는 어플리케이션을 만들면 편할 것 같았다. 언어는 가장 빠르게 구현할 수 있는 python으로 선택했다. 목표 특정 사이트의 게시물 리스트를 5분 간격으로 탐색하고 업데이트돤 내용만을 추려서 보여준다. 구현 먼저 웹 크롤링에 필요한 모듈을 다운로드한다. pip install requests, beautifulsoup4 requests => 서버에 웹페이지 내용을 요구할 수 있게 해준다. urlopen을 쓸 예정. beautifulsoup4 => requests를 통해 얻은 웹페이지 내용을 쓰기 좋게 다듬어준다. 해당 url을 url..

    [Ray Tracing in C] 2. 벡터

    레이트레이싱은 벡터 연산의 연속으로 이뤄질 것이다. 이 때의 벡터는 프로그래밍에서 1차원 배열이 아니라 수학/공학적인 개념으로 쉽게 말해 '방향과 크기'를 의미한다. 자세한 설명은 동영상 링크를 참조하자. (참고: 선형대수학을 위한 벡터란?) 먼저 벡터 struct를 헤더에 정의하자. 간단히 실수형 x,y,z만 가지고 있으면 된다. (이름은 최대한 짧게 지었다.) // vec.h typedef structs_v { doublex; doubley; doublez; }t_v; 이와 함께 연산들도 미리 정의해놓는다. 벡터의 기본 연산은 모두 쓸 것이다. 목록은 다음과 같다. v_init = 벡터 struct를 정의한다. v_mag = 벡터의 크기를 계산한다. v_norm = 벡터를 normalize(크기를 1..

    [Raytracing in C] 1. 준비

    이번 단계에서는 '레이 트레이싱'이 무엇인지 얇게나마 알아보면서 프로젝트의 방향과 의미를 생각해본다. 레이트레이싱? 이번 프로젝트에서는 C 언어만으로 레이트레이싱(ray-tracing)을 구현해보도록 한다. 레이트레이싱은 단순히 말하자면 '눈'을 시뮬레이션하는 것이다. 인간은 어떻게 사물을 볼 수 있을까? 광원으로부터 반사된 빛이 눈으로 들어와 상을 맺기 때문이다. 레이트레이싱은 이를 최대한 모방해서 현실과 가까운 이미지를 얻는다. (참고: Future of Gaming : Rasterization vs Ray Tracing vs Path Tracing) Ray-tracing in C? C를 통해서 레이트레이싱을 구현하는 일은 쉽지 않다. 무엇보다 C에는 클래스가 없기 때문에 좀 지저분하게 코드를 짜야하..

    Unity : Addressable Asset System

    기존 에셋 시스템의 장단점 직접 레퍼런스 장점 쉽고 코드 길이가 줄어든다. 단점 실제로 쓰지 않아도 메모리가 올라가 있다. 리소스 폴더 장점 쉽고 편리하다 단점 빌드할 때, 리소스 폴더 안의 파일은 각 파일마다 빌드하므로 빌드 사이즈가 커진다. 게임 시작 시 리소스 파일에 대한 인덱싱을 하다보니 앱 시작 시간이 길어진다. 리소스폴더 안에 접근할 때는 파일 이름을 스트링으로 가지고 있기 때문에 에셋의 이름을 변경할 수가 없다. 결론 사용할 때, 경계해야 한다. 에셋 번들 장점 빌드 사이즈 절감 앱 시작 시간이 짧다 단점 에셋번들 종속성(depedency), 버전 관리로 인해 사용하기 까다롭다. 모든 것이 코드로 되어 있어서 에디터 수준에서 작업이 거의 없다. 기존 에셋 시스템의 워크 플로 보통 직접 레퍼런..

    Unity, Design Pattern: Command Pattern

    Command Pattern 커맨드 패턴(Command pattern)은 어떤 요청을 객체로 만들어서 캡슐화해서 요청의 저장, 로깅, 취소를 할 수 있게 도와준다. 커맨드 패턴의 핵심인 Command interface는 아주 간단한 구조를 가지고 있다. public interface Command { public void execute(); } 간단한 구조를 가지고 있는 만큼, 사용자는 다양한 방식으로 자체 커맨드를 만들어서 보낼 수 있다. 예를 들어, 플레이어를 점프하게 만드는 커맨드를 보내고 싶다고 생각해보자. 그럼 먼저 그에 해당하는 커맨드를 구체적으로 정의한다. public class JumpCommand : Command { public void Execute() { Console.WriteLi..