오늘 소개해드릴 영화는 필자가 사랑하는 90년대 영화 중 하나인 '에너미 오브 스테이트' 되겠습니다.

어쩌면 요즘 '지니'라는 캐릭터로 더 친근해진 윌 스미스 주연의 영화입니다.

 

사실 이전에 소개해드렸던 네고시에이터와 비교를 해드리자면

네고시에이터는 한정된 장소에서 스토리가 진행되는 액션 영화라면

이 영화는 온 동네를 다 뛰어 다니면서 진행됩니다. 음 미션임파서블 같은 느낌이랄까

 

한 줄로 요약을 하자면 고위 공직자의 살해 영상이 담긴 비디오를 우연히 가지게된 윌 스미스군이

위성, CCTV 등 최신 기술을 동원해 비디오를 찾으려하는 국정원과 추격전을 벌이는 내용입니다.

 

여기서 윌 스미스를 도와주는 인물로 진 핵크만이 출연하게 되는데

이 배우는 영화 크림슨 타이드에서도 그러더니 여기서도 살짝 꼰대끼(?)를 가진 노인네로 나오게 됩니다.

이러한 역할에 최적화된 인물이 아닌가 합니다 ㅎㅎ 인상부터 정말 대체 불가

(크림슨 타이드는 다음 소개에서 뵙겠습니당)

 

위성과 CCTV, GPS등 최신 기술로 인해 전화 한통뿐만 아니라 번화가에 걸어다니기만 해도

위치가 발각되는 주인공의 상황이 이 영화에서는 굉장히 사생활 침해가 심각해보이고

이대로 기술이 발전하다가는 정말 사생활이 없어질수도 있겠구나.. 하는 생각을 심어 줍니다.

 

하지만 요즘 저 기술들이 없으면 치안이나 편의성이 현저히 떨어지기 때문에 살 수가 없죠 ㅎㅎ

아마 저 시대에서는 과학 기술의 발전과 사생활과의 연관성에 대해 얘기를 하고싶었던게 아닐까 생각해봅니다.

 

이 영화 에너미 오브 스테이트는 원조 러닝 액션랄까요

주인공 윌 스미스가 정말 엄청나게 뛰어 다닙니다 ㅎㅎ

영화의 내용을 돌이켜 생각해보면 윌 스미스가 뛰어다니는 모습이 가장 기억에 남네요.

 

저는 개인적으로는 도망자보다 이 영화의 추격전이 더 재미있었던 것 같습니다!

 

지극히 주관적인 평점 그리고 한줄평

추격 액션을 좋아한다면 꼭 볼것!

(4.5/5.0)

오늘 소개해드릴 영화는 쿠엔틴 타란티노의 작품인 '장고 : 분노의 추적자' 입니다.

제목에서도 느낄 수 있듯이 주인공이 무언가에 굉장히 화가난 듯 하네요 ㅎㅎ

저는 이 영화를 처음 알게 되었을 때 따분한 서부극 중 하나겠구나.. 생각하고

보는 걸 좀 꺼려했었는데.. 역시나 타란티노였습니다.

 

영화를 평소에 좋아하셨다면 쿠엔틴 타란티노라는 이름을 한번쯤은 들어보셨을 겁니다.

그도 그런것이 그의 대표작 중에서는 '킬빌' '씬시티' 등 우리에게 매우 친숙한 작품들이 있는데요.

그의 작품의 대다수는 약간의 똘끼가 보이면서도 화려한 영상미가 있고 시기 적절한 사운드로 이루어져 있습니다.

 

요 영화 장고 : 분노의 추적자에서도 그의 똘끼와 천재성을 유감없이 보여줍니다.

 

영화의 내용을 잠깐 설명드리자면 노예로 팔려가던 장고(제이미 폭스)가

현상금 사냥꾼인 닥터 킹 슐츠(크리스토프 왈츠)에 의해 풀려나고

수배범의 얼굴을 안다는 이유로 킹 슐츠와 동행을 하게 됩니다.

장고의 도움 덕에 현상금을 타게 된 슐츠는 장고에게 일을 같이 하자며 제안하게 되고 둘은 파트너가 됩니다.

 

사실 이 영화를 보기 전 크리스토프 왈츠라는 배우에 대해 아예 모르고 있었습니다.

근데 이 영화를 보고난 후 가장 강렬한 인상으로 남게 되었는데요.

제이미 폭스, 레오나르도 디카프리오 등 쟁쟁한 연기파 배우가 나오지만

저에게 그의 연기는 돋보였고 다른 작품들도 챙겨 보고 싶단 생각이 들었습니다ㅎ.ㅎ

 

옛날 양들의 침묵에서 안소니 홉킨스의 연기를 봤을 때와 비슷한 충격(?) 이었습니다 ㅎㅎ

 

이 영화는 중반부에 바로 이 분 레오나르도 디카프리오가 나오면서 긴장감이 슬슬 올라가기 시작하는데요.

연기를 얼마나 잘하는지 영화를 보는 도중 나도 모르게 이 사람이 무서워 집니다..

 

디카프리오는 캔빈 캔디라는 돈이 상당히 많은 부자역으로 나오고 장고의 아내를 노예로 두고 있습니다.

장고는 슐츠와 함께 자신의 아내를 찾기 위해 캔디와 거래를 하게 되고 이 때부터 이 영화의 제 2막이 올라가게 됩니다.

 

영화 장고 : 분노의 추적자에서는 옛날 서부 흑인 노예에 대한 얘기를 하고자 하는 것 같지만.. 저는 그 부분에 대해

얘기하는 걸 사실 잘 이해하지 못해서 포스팅에서 할 말이 없네여...ㅠ 

 

그저 재미가 있고.. 살짝 특이한(?) 타란티노식 서부 액션씬..

그리고 너무 취향에 맞는 OST만 기억에 남아있네요..

(영화는 재미만 있으면 되지! 주의)

 

이 영화 장고 : 분노의 추적자를 보면서 이해 안되는 부분이 있었다면

왜 분노의 추적자일까... 하는 것입니다. 저는 제목을 보고 무언가에 굉장히 화가나서

다 찾아 응징을 하는 영화일 것이다.. 라고 생각했습니다.

 

유혈 사태가 많고 응징하는 부분이 있긴 하지만.. 영화 전체를 추격 복수극으로 보기에는 조금 무리가 있지 않나.. 싶습니다.

(지극히 개인적 ㅎㅎ)

 

그리고 러닝 타임이 굉장히 깁니다.. 아까 잠깐 제 2막이라는 표현을 썼는데.. 맞아요.. 맞습니다..

지루한 영화는 아니지만 너무 긴 탓에 두번을 끊어서 겨우 소화할 수 있었습니다 ㅎㅎ

 

지극히 개인적인 평점과 한줄평

- 똘끼 있는 총격 액션, 명 배우들의 열연, 취향 저격 OST 이 모든 것을 잘 합친 명감독-

(4.0 / 5.0)

 

ps. 사무엘 잭슨(밉상)도 출현 합니다. 근데 밉상입니다.

오늘 소개해드릴 영화는 무려 20년 전인 1998년작 '네고시에이터'라는 영화입니다.

이 때부터 지금까지 꾸준한 인기를 끌고있는 사무엘 잭슨과 깔끔한 연기를 선보이는 케빈스페이시가

주연을 맡아 스토리, 연기 모두 훌륭한 작품으로 기억되고 있습니다.

 

 

영화 네고시에이터는 제목 그대로 협상가들의 이야기를 다룬 영화입니다.

영화의 도입부에는 사무엘 잭슨이 인질극을 벌이는 범인을 화려한 말빨(?)로 제압하는 장면이 나오는데

이에서 알 수 있듯으 사무엘 잭슨은 경력과 명성을 겸비한 최고의 협상가로 등장하게 됩니다.

 

하지만 동료를 죽였다는 억울한 누명을 쓰게 되면서 감옥에 갈 상황에 처해지고

벼랑 끝에선 그는 인질극이라는 최후의 선택을 하게 됩니다.

최고의 협상가의 말빨과 작전에 경찰들은 자리에 앉아 당할 수밖에 없었고

끝내 협상테이블을 차리게 됩니다.

 

어정쩡한 잔챙이들이 협상을 시도하려하자 사무엘 잭슨은 어린애 놀리듯 가지고 놀아 버립니다. (개인적으로 상당히 좋아하는 장면)

그는 옆동네에서 한 말빨(?) 한다는 협상가 케빈 스페이시를 불러달라 하고 그가 아니면 아무 말도 하지 않겠다 합니다.

 

영화 네고시에이터는 누명을 벗기위한 사무엘 잭슨과 그와 협상하려는 케빈 스페이시

그 둘의 사이에 존재하는 경찰과의 스토리를 담은 액션 영화입니다.

 

여기 저기 펑펑 터지는 마이클 베이의 스타일과는 조금 다르지만 배우들 연기가

영화의 긴장감을 러닝 타임 후반부까지 계속해서 끌어가고 있습니다.

 

90년 영화의 향수병에 사는 필자는 이 영화.. 너무나도 좋습니다 ㅠ

 

영화 네고시에이터의 

지극히 주관적인 평점

(4.5/5.0)

 

BFS 알고리즘 문제 : 탈출(백준)


정답률 25%의 살짝 난이도가 있는 문제입니다.

처음 문제를 읽고 정답률에 비해 쉬울 것 같다는 생각이 들기도 했습니다.


어딘가 함정이 있겠지 생각하고 조심스레 풀어보았는데

BFS 알고리즘 문제를 상당히 오랜만에 풀어보아서인지

기본적인 개념에서 문제가 생겨 상당히 고전했습니다.


문제 자체를 그리 어려운 문제가 아닌 듯 합니다.

필자는 고슴도치와 물을 두 개의 큐로 따로 담는 방법으로 풀어보았습니다.


BFS 알고리즘 문제 : 탈출(백준)


01. 변수 선언


02. 인큐, 디큐


03. 초기화


04. 체크 함수


고슴도치든 물이든 바위는 피하고 이미 지나온 포인트는 다시 가지 않으며

배열의 범위를 벗어나지 않아야 한다는 공통점을 가지고 있습니다.


체크된 곳은 물, 바위, 이미 지나온 곳이라는 것을 의미하기도 합니다.


05. BFS


문제를 풀다가 이 부분에서 실수를 하여 상당히 고전했습니다.

실수 내용은 현재 water 큐에 있는 모든 물들을 상하좌우 이동시킨 뒤

Player 큐로 넘어갔어야 했는데, water 큐에 있는 단 하나의 물에 대해

이동처리를 한 뒤 Player 큐로 넘어가버린 것입니다.

한 마디로 BFS에 대한 개념이 흔들린 것.


05. 메인


상당히 오랜만에 풀어보아서 그런지 조금 고전 했던것 같습니다.

감을 잃지 않게 꾸준히 풀어야 할 것 같습니다.





[C#] 세대별 가비지 컬렉션 알고리즘


얼마 전 포스팅에서 가비지 컬렉션의 동작원리에 대해 알아보았습니다.

그렇다면 오늘은 가비지 컬렉션의 성능을 높이기 위한

세대별 가비지 컬렉션 알고리즘에 대해 알아보도록 하겠습니다.


가비지 컬렉션에 대해 공부를 하는 이유는 유니티에서 게임오브젝트를

동적 생성/삭제 하는 과정에서 가비지 컬렉터의 활동 빈도를 높이게 된다고 합니다. 


가비지 컬렉터의 비용은 공짜가 아니기 때문에 이 또한 신중하게 관리되어야 할 메모리입니다.

때문에 메모리 풀을 이용하여 필요한 오브젝트를 미리 생성해놓고 사용하게 되는데

이 또한 가비지 컬렉터의 원리를 제대로 이해해야만 최대 효율로 이용할 수 있겠다는 생각이 들어서 입니다.


세대별 가비지 컬렉션 알고리즘

들어가기전에 이 알고리즘의 핵심만 간단하게 짚어보자면

오래 살아남을 것 같은 객체를 모아놓고 비교적 관심을 덜 주자는 것입니다.

그렇게 된다면 모든 객체에 관심을 주는 것보다 효율적인 관리방식이 될 수 있겠지요.


그렇다면 객체의 수명을 어떻게 예측해야 할까요?


01.   새로 할당된 객체들 모두 0세대에 포함됩니다.

0세대가 임계치에 도달하게되면 가비지 컬렉터는 0세대에 대해 가비지 컬렉션을 수행하게 됩니다.


02.   가비지 컬렉션 수행 후 살아남은 객체들을 1세대로 옮겨지게 됩니다.


03.   이후 또다른 객체가 할당되어 들어온다면 그 객체들은 당연히 0세대에 포함됩니다.

0세대가 또 다시 임계치에 도달하게 되면 가비지 컬렉터는 0세대에 대해 가비지 컬렉션을 수행합니다.


04.   이번에는 1세대가 임계치에 도달하게 되었습니다.

마찬가지로 가비지 컬렉션을 수행합니다.


05.   1세대의 가비지 컬렉션에서 살아남은 객체는 2세대로 옮겨지게 됩니다.

객체의 수명은 이런식으로 가비지 컬렉터에서 오래 살아남았다는 기준으로 정해지게 됩니다.


06.   이러한 방식으로 0세대, 1세대, 2세대를 구분하여 각각의 임계치에 도달하면 해당 세대에 대해 가비지 컬렉션을 수행하게 됩니다.


-->  0세대가 포화된다면 오로지 0세대만 가비지 컬렉션을 수행 한 후 1세대로 이동

1세대가 포화된다면 0세대와 1세대만 가비지 컬렉션을 수행 한 수 각각 1세대, 2세대로 이동


2세대 또한 똑같은 메커니즘으로 가비지 컬렉션을 수행할까요?


-->  2세대가 포화되게 된다면 더 이상 다른 곳으로 옮겨지지 않기 때문에, 전체 가비지 컬렉션을 수행하게 됩니다.


위의 세대별 가비지 컬렉션 알고리즘으로 인해 생성과 삭제가 빈번한 객체에 대해서만

가비지 컬렉터가 신경을 쓸 수있게 하는 메커니즘이 완성되었습니다.


하지만 2세대가 포화되게 된다면 전체 가비지 컬렉션이 수행된다는 항목에 주의를 기울여야 합니다.

전체 가비지 컬렉션이 수행되면 CLR은 앱의 실행을 잠시 멈추고 전체 가비지 컬렉션을 수행함으로써

여유 메모리를 확보하려 듭니다. 앱이 차지하고 있던 메모리가 크면 클수록 전체 가비지 컬렉션의

시간이 길어지므로 앱이 정지하는 시간도 그만큼 늘어나겠지요.

이것이 바로 우리가 가비지 컬렉션을 이해해야하는 중요한 이유입니다.




다이나믹(동적 계획법) 알고리즘 문제 : 이동하기 (백준)


다른 알고리즘에 비해 동적 계획법이 상당히 어렵게 느껴집니다.

그만큼 공부량이 적었다는 반증이기도 하지만, 알고리즘 자체가 어려운 것도 사실입니다.


때문에 항상 다이나믹 알고리즘은 쉬운 문제를 골라서 풀어보았는데

이번에도 그리 난이도가 높은 문제는 아닙니다. 

동적 계획법의 기초중의 기초라 말할 수 있는 문제입니다.


동적 계획법 문제 : 이동하기 (백준)


01. 변수 선언 및 초기화


02. 다이나믹


다이나믹 (동적 계획법) 알고리즘의 핵심은

1. 처음부터 차곡차곡 답을 쌓아 나간다.

2. 저장한 답을 바탕으로 현재의 답을 찾아 나간다.


위의 두가지 핵심을 잘 기억하고 있다면 이 문제는 상당히 쉽게 풀릴 것입니다.

--> 현재의 위치에서 바로 전에 들릴 수 있는 3개의 지점에서의 최대값을 비교합니다.

--> 바로 전에 들릴 수 있는 3개의 지점은 지금까지의 최대값을 저장해왔기 때문에 비교만 해준다면 답을 구할 수 있습니다.

--> 이동 방향은 오른쪽, 밑, 대각 이 세가지 뿐이기 때문에 바로 전에 거쳐온 지점은 현재 지점에서 왼쪽, 위쪽, 10시방향 대각선 위가 될 수 있겠네요.


다른 알고리즘 문제와는 다르게 동적 계획법은 꾸준히 풀지않으면 감이 떨어지는 듯한 느낌이 듭니다.

앞서 말씀드렸듯이 그만큼 동적 계획법의 공부량이 비교적 적었기 때문이기도 하겠지요.

좀 더 분발해야 할 것 같습니다.

Billy Poter - I'll Be There


오늘은 빌리 포터의 I'll Be There라는 곡에 대해 포스팅 해보도록 하겠습니다.

사실 빌리 포터는 많은 히트곡을 가진 가수는 아니지만

팝을 좋아하는 사람이라면 한번쯤은 들어보았을 것입니다.



가수 김범수씨가 빌리 포터의  Love is on the way라는 곡을 방송에서

부른 적이 있는데 아마 윤도현의 러브레터였던 것으로 기억합니다.

그 당시에 그 영상을 정말 수도없이 돌려보았고 시간이 조금 지난 후에서야

원곡이 궁금해 찾아보았고, 빌리 포터란 아티스트에 대해 알게되었습니다.


여담이지만 윤도현의 러브레터라는 프로그램이 좋은 노래를 많이 알게 해준 것 같습니다.



I'll Be There라는 곡은 이후 빌리 포터에 관심이 생긴 뒤 몇 곡을 더들어보다 좋아지게된 곡입니다.

좋은 노래 뿐만 아니라 빌리 포터라는 가수는 정말이지 상당한 가창력을 가지고 있습니다.

브라이언 맥나잇, 와냐 모리스 등 많은 흑형분들이 그렇듯.. 빌리 포터 또한 이에 뒤지지 않는 소울을 가지고 있습니다.



빌리 포터에 대해 알아가면서 상당히 아쉬운 점이 있었다면

발매된 곡 수가 상당히 적다는 것입니다. 제가 알기로는 하나의 앨범이 전부인 걸로 알고있습니다.

I'll Be There는 정식 음원으로도 나오지 않아 듣기에 상당한 불편함이 있었습니다 ㅎㅎ


상당한 가창력을 소유하였음에도 불구하고 앨범을 왜 내지 않느냐.. 의아했지만

뮤지컬쪽에서 왕성하게 활동하고 있다고 합니다.


오늘 소개해드린 빌리 포터의 I'll Be There

흑인 특유의 소울풀한 목소리와 잔잔한 R&B를 듣고 싶으시다면 오늘 시간내어 들어볼만한 가치가 있는 곡입니다.


[DFS 알고리즘] 빙산 (정올)


게임 만들랴 자소서쓰랴 정신 없는 7월이 지나가고

한 달만에 풀어보는 알고리즘..


이번에는 정답률 20%대의 DFS 알고리즘을 풀어보았습니다.

정답률이 낮은 문제의 특징은 정말 어렵거나.. 아니면 함정이 많은 문제인데

이 문제는 어려운 문제라기 보다는 함정이 많은 문제가 되겠습니다.


DFS 알고리즘 문제 - 빙산 (정올)


01. 변수 선언 및 초기화


02. 재귀 함수


03. 1년 후 빙산의 변화 예측 함수


함정 1 : 빙산의 모습을 1년 후로 바꿀 때, 녹아 없어질 빙하라도 바로 0으로 바꾸어준다면 인접한 빙하에 영향을 주게 됩니다.

그래서 저는 -9999라는 숫자로 일단 바꾸어주고, 모든 빙하를 다 둘러본 뒤 -9999의 값을 0으로 다시 바꾸어 주었습니다.


04. 메인


함정 2 : 빙하가 아예 없어질 때까지 반복문을 돌려야 합니다.

따라서 while문을 돌려주고 두 동강 났다면 답 출력하고 리턴

더 이상 체크할 빙하가 없다면 반복문 종료. 그리고 0 출력



20%대 문제 치고는 살짝 쉬운 감이 있지만, 문제를 꼼꼼히 읽지 않았다면 또 한참 헤맸을 법한 문제였습니다.


[모바일 퍼즐 게임] 피즈 펑크! Pz Punk! : The Candy Thief


기획/제작 : 김영조

제작 기간 : 3주

제작 툴 : 유니티



유튜브 영상 링크 : https://www.youtube.com/watch?v=YqW_wrVXG44

다운로드 링크 (안드로이드) : https://play.google.com/store/apps/details?id=com.YJ.PZPunk


----------------------------------------------------------------------------------------------------


게임을 만든 방법

1. DFS 알고리즘 (재귀 함수)

화면상의 과일들을 움직여 3개 이상이 되면 미완성 캔디로 만드는 과정이 필요합니다.
그렇다면 이동된 과일의 상하좌우를 탐색하여 3개 이상이면 캔디로, 아니라면 다시 원위치로 돌아가야 합니다.
이동된 과일의 인접한 부분뿐만 아니라 같은 색으로 이어진 모든 과일들의 주변을 탐색해야 하기 때문에
이를 구현하기 위해 두 가지의 선택지를 생각했습니다.

1. BFS 알고리즘    (큐, 넓이 우선 탐색)
2. DFS 알고리즘    (스택, 재귀 함수, 깊이 우선 탐색)

두 가지 중 DFS 알고리즘이 좀 더 직관적으로 구현하기 좋겠다 생각했고
과일의 체크를 담당하는 Checker라는 클래스를 만들어 재귀 함수를 구현했습니다.

아래는 Checker 클래스의 Connect_Check_Recurse() 재귀 함수의 간략한 설명입니다.

1. 매개 변수로 들어온 x와 y는 해당 과일의 배열 내 인덱스 값이기 때문에 배열의 범위를 벗어나면 안 됩니다. (배열이 곧 퍼즐 판의 크기)
2. 이미 이 메서드로 체크가 된 과일인 경우 체크 대상에서 제외합니다. (같은 타입의 과일이 인접해 있다면 무한 호출에 빠지기 때문입니다.)
3. 현재 떨어지고 있는 과일일 경우 바닥에 착지한 시점부터 체크가 진행되어야 합니다.
4. 같은 타입의 과일인지 체크하고, 같은 타입이라면 이 과일을 기준으로 또다시 상하좌우 체크를 떠나게 됩니다.


유저가 선택한 과일이 지정한 방향으로 이동이 완료되면
선택한 과일을 시작으로 Connent_Check_Recurse() 함수가 호출되게 됩니다.



S를 시작으로 재귀 함수의 호출 순서대로 숫자를 표기했습니다.


1. 유저가 선택한 과일 S를 시작으로 상하좌우 순서로 체크를 떠나기 때문에 1번 과일로 가게 됩니다.

2. 1번 과일이 같은 타입이기 때문에 1번 과일을 기준으로 다시 상하좌우 체크를 하게 됩니다.

3. 1번 과일의 상, 좌, 우측에 있는 과일은 같은 타입이 아니고, 밑은 이미 체크된 과일이기 때문에 재귀 함수의 탈출 조건에 걸리게 됩니다.

4. 1번 과일의 재귀 함수가 완전히 종료되고, 최근에 호출되었던 재귀 함수로 돌아가 나머지 작업을 수행하게 됩니다.

5. 14번째 진행과정은 배열의 범위를 초과한 범위이기 때문에 탈출 조건에 걸리게 됩니다.



2. 버킷 릴레이


위 그림의 번호는 배열 내의 x축 인덱스 값을 나타냅니다.

1번 과일과 2번 과일의 위치를 바꾸어 봅니다.

눈으로 보기에는 성공적으로 위치가 바뀌어 보이지만, 메모리상의 위치는 변함이 없습니다.


1) 화면상의 과일들은 유저의 조작에 따라 인접한 과일과 바뀌는 액션이 필요합니다.

--> 이를 구현하기 위해서 선택한 방법은 버킷 릴레이 방식으로 과일들의 오프셋을 계산해 주는 방식입니다.


A) 과일들이 나열되어 있습니다. 이제 1번과 2번 과일의 위치가 바뀌는 과정을 설명하겠습니다.
B) 1번 과일과 2번 과일의 정보를 바꾸어 줍니다. (과일의 타입 또한 교환되기 때문에 타입이 바뀌게 됩니다.)
2) 두 과일의 위치를 체인지 합니다. 

위의 동작은 한 프레임안에 동작하는 것이기 때문에 플레이어의 눈에는 이동하지 않은 것으로 보이게 됩니다.


그 후 여러 프레임에 걸쳐 두 과일의 위치가 원래 자리로 돌아가게 됩니다.

ex)
1번 과일의 position.x - 2번 과일의 position.x = -1 이라면
위 두 과일의 x축 거리는 (절댓 값) 1만 큼 차이 난다는 것을 의미합니다.

따라서 계산된 값을 서서히 0으로 만드는 과정에서 둘의 위치값에 적절한 수를 연산해 준다면
원하는 위치까지 서서히 이동하는 모션을 구현할 수 있습니다.

이 방식을 사용하면 바로 옆의 과일만 스위치 할 수 있는 것이 아니라
멀리 있는 과일과도 위치가 바뀌는 모션을 사용할 수 있습니다.

만약 계산 결과가 (절댓 값) 4만큼 차이가 난다면 1차이가 났을 때보다 더욱 긴 거리를 이동하게 될 것입니다.


2) 캔디로 만들어진 자리는 빈 공간이 되기 때문에 그 자리를 하늘에서 떨어지는 과일로 채우는 액션이 필요합니다.


이 경우에도 버킷 릴레이 방식을 활용하여 과일이 하늘에서 떨어지는 것처럼 구현할 수 있었습니다.


3. 클래스 재활용

DFS 알고리즘으로 연결된 과일이 몇개인지 확인하는 Checker라는 클래스를 만들었습니다.

1) 게임 시작과 동시에 과일의 초기 배치

--> 3개 이상이 되면 과일이 캔디가 되어버리기 때문에 초기 배치에는 3개 이상이 연결되어 있으면 안 됩니다.
--> 난이도를 생각해서 2개씩 뭉쳐있는 것이 좋다고 판단하여 초기 배치에는 같은 과일이 2개씩 붙어있게 만들었습니다.
--> 적절한 난수를 이용한다면 난이도를 유동적으로 바꿀 수 있습니다.


과일의 초기 배치를 담당하는 FruitMaker 클래스에서 Checker 클래스를 활용하여 초기 배치에 성공했습니다.

2) 과일을 인접 과일과 스위치

--> 선택된 과일이 유저가 선택한 방향으로 옮겨졌다면 이동 완료와 동시에 주위 과일들을 탐색하여
캔디로 바꿀 것인지 혹은 원 위치로 다시 돌아갈 것인지 결정해야 합니다.

과일의 이동을 담당하는 FruitCtrl 클래스에서 Checker 클래스를 활용하여 3개 이상이면 변환, 아니라면 다시 스위치 하도록 구현했습니다.

3) 빈 공간을 떨어지는 과일로 채우기

--> 캔디로 바뀐 빈 공간은 다시 다른 과일들로 채워져야 합니다.
--> 하늘에서 과일이 떨어져 빈 공간을 채우는 형식으로 모두 떨어진 뒤에는 인접한 곳에 자신과 같은 과일이 있는지 확인해야 합니다.

이 또한 과일의 이동을 담당하는 FruitCtrl 클래스에서 Checker 클래스를 활용하여 떨어진 과일의 인접 과일을 체크하도록 했습니다.

4) 미완성 캔디가 이어진 수에 따른 Crush

--> 미완성 캔디의 이어진 수가 많을수록 더욱 많은 보너스 점수를 받을 수 있습니다.
--> 때문에 미완성 캔디의 이어진 수를 확인하는 것도 주요 작업 중 하나입니다.


Checker 클래스의 상하좌우로 동일한 객체를 찾는 로직을 이용하여 미완성 캔디의 수를 카운트했습니다.


4. 오브젝트 풀

과일로 만들어진 캔디를 박스에 담는 것이 주요 점수원이기 때문에 캔디를 매번 생성해 주어야 합니다.


1) 게임이 끝날 때까지 많게는 수 천 번의 캔디 생성이 있을 수 있기 때문에 캔디를 게임 시작과 동시에 적정량을 미리 생성했습니다.
2) 생성된 캔디는 캔디 리스트에 저장되어 비활성 상태로 대기하게 됩니다.
3) 캔디가 필요한 위치에 활성 상태로 나타나게 되며, 화면에서 사라진다면 다시 캔디 리스트에 비활성 상태로 대기하게 됩니다.


5. 구글 플레이 게임 서비스


퍼즐 게임의 특성상 점수의 기록이 매우 중요하기 때문에 구글 플레이 게임 서비스와 연동하여 랭킹 시스템을 추가했습니다.
또한 18가지의 업적을 추가하여 게임을 하면서 숨겨진 미션들을 완료할 수 있게 콘텐츠를 추가했습니다.


[C#] Raycast2D


어제 저녁부터 마우스 포지션에 있는 오브젝트가 레이에 맞지 않아서

유니티 레퍼런스, 구글링 등을 통해 Raycast2D에 대해 알아보았다.


정말 틀린 곳을 도무지 모르겠는데 자꾸만 오브젝트가 레이에 맞지 않더라..



일단 첫 줄의 Vector2 pos = Camera.main.ScreenToWorldPoint (Input.mousePosition);

화면상의 마우스 포인트를 월드 좌표로 바꾸어서 pos란 변수에 저장.


두 번째.

Ray2D 구조체를 생성해준다.

Ray2D의 첫 번째 변수는 레이가 만들어질 위치. 쉽게 말해 총구라 할 수 있다.

두 번째 변수는 레이가 어떤 방향으로 날아갈 것인가. 총구의 방향이라 할 수 있다.

여기까지 ok


세 번째.

RaycastHit2D가 달라는대로 변수를 넘겨준다.

1. 레이가 만들어질 위치 2. 레이가 날아갈 방향 3. 어디까지 날아갈 것인가(거리) 4. 레이어 마스크

앞서만든 Ray2D구조체의 첫 번째 변수 --> origin

두 번째, 방향을 가리키는 변수 --> direction

세 번째, 네 번째는 생략 가능

오키 여기까지도 문제없음


그런데.. 왜 오브젝트가 검출이 안되냐 이 말이지..

콜라이더도 다 붙여 놓았는데..


정말 이거 때문에 이 더운날 반나절 동안 혼자 씩씩대면서 열폭하던 중...

2D게임 만들면서 평면으로 보지 않고 있었네..?



+ Recent posts