카드 뒤집기 게임을 개발하면서 CallBack함수를 사용해야하는 일이 발생했다.CallBack함수가 사용되는 이유는, 처음에 게임을 시작했을 때 모든 카드를 보여준 다음 게임이 시작되도록 만들기 위해서이다. CallBack함수는 다른 함수를 매개변수로 받아 실행되는 함
평범한 카드찾기 게임은 다 만들었으나, 카드찾기게임에서 특수한 효과를 주고자 한다. 어떤 방식으로 구현할 수 있을 지 고민해본 내용이다.먼저, 구현할 특수 효과는 특정한 카드의 짝을 맞췄을 때 나머지 모든카드를 일정시간동안 볼 수 있게 해주는 효과이다.위의 효과를 구현
사람들과 협업을 할 때 GitHub를 사용하여 프로그램의 버젼을 관리하고 결과물을 합치기에 유용하다. 하지만, 유니티를 Git을 사용하여 협업을 할 때, 주의해야 하는 사항이 있다.유니티 버젼통합처음 협업을 시작할 때, 협업참가자들의 유니티 버젼을 하나로 통합해야할 필

오늘은 개발자들의 가장 필수적인 도구인 Git 사용법에 대해서 배웠다. Git 설치 구글에 git을 검색하면 쉽게 설치 할 수 있다. 링크 를 클릭하면 바로 갈 수 있다.GitHubDeskTop 설치 구글에 Github desktop을 검색하면 설치 할 수 있다.링크

.
VisualStudio에서 콘솔 기반으로 동작하는 TextRPG를 만들어 보았다. 오늘 모두 개발완료한 것은 아니지만, 내일 중으로 계획한 모든 기능을 구현할 수 있을 것으로 생각한다. 가장 처음 프로젝트를 시작할 때는 막막한 기분이였다. Scene과 View가 제공되
다형성을 위해서 존재하는 오버라이드와 오버로드를 프로젝트를 진행하며, 많이 사용하게 되었는데 이때 발생했던 문제상황, 문제해결시도, 해결과정, 느낀 점등을 작성하려한다.
C# 문자열 처리방법, GitHub 협업방법
객체지향프로그래밍SRP. OCP
유니티 생명주기에 대해서
유니티 단축키 모음
프로그래머스 Lv. 1 대충 만든 자판, 유니티 생명주기에 따른 메소드 활용법
프로그래머스 Lv 1. 유연 근무제

트러블슈팅
오늘은 팀 프로젝트 중 발생한 트러블 슈팅을 TIL로 적어볼까 한다.
Player 캐릭터가 점프키를 아주 짧게 누르거나, 지형이 끝나는 곳에서 점프를 시도할 시 캐릭터가 의도했던 높이만큼 점프를 하지 못하는 버그Player에서부터 땅과의 수직벡터 방향으로 RayCast 메서드로 Ray를 발사하여 Player가 땅에 닿았는 지를 체크한다.
오늘의 이야기는 유니티 관련 꿀팁 강의를 듣고 내가 잘 모르거나 잘 사용하지않았던 기능들을 정리해 보았다.꽤나 자세하게 검색해야 나온다. 컴포넌트를 검색할 수 있다.Cube 1의 값을 Cube2로 옮기고 싶다! inspector창을 2개로 늘리고 갈라준다. 인스펙터 창
유니티 꿀팁 모음
8\. LayerMask를 스크립트상에서 적지않고, public 혹은 SerializeField로 만들면, 에디터에서 쉽게 설정할 수 있다.
싱글톤이란 무엇이고, 어떻게 구성되는가??싱글톤을 사용하는 경우싱글톤은 유니티(유니티가 아니더라도)내에서 단 하나의 오브젝트로 존재할 필요가 있는 오브젝트에 적용할 수 있는 디자인 패턴이다. 예를들어, 게임의 핵심 로직을 조작하는 메서드가 들어있는 GameManager
문제출처 https://www.acmicpc.net/problem/25192알고리즘 입문방 오픈 채팅방에서는 새로운 분들이 입장을 할 때마다 곰곰티콘을 사용해 인사를 한다. 이를 본 문자열 킬러 임스는 채팅방의 기록을 수집해 그 중 곰곰티콘이 사용된 횟수를 구
내가 이번 프로젝트에서 맡은 역할은 자원오브젝트의 생성과 관리이다. 서바이벌 게임에서는 다양한 자원을 캐거나 수집하여 기술테크를 올리거나, 더 좋은 건축물이나 아이템을 만들 수 있다. 서바이벌 게임에서 빠질 수 없는 요소이다. 먼저, 자원을 캘 오브젝트를 만든 뒤 해
3D 랜덤 자원배치 기능
코딩문제풀이
유니티 커스텀 에디터전제 ) Editor폴더안에 스크립트가 존재해야한다.이는 유니티의 예약폴더시스템인데, Resouces폴더와 같은 느낌이다.MonoBehaviour를 Editor로 수정2.클래스의 위에 CustomEditor(typeof('Class이름')) 즉, 커
숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요.예를 들어, t="3141592"이고 p="
Cinemachine

타임라인은 시간의 흐름으로 진행되며, 따로 우선순위를 정하지 않아도 버추얼 카메라의 live순서를 직관적으로 정할 수 있다. 또한, 애니메이션 트랙을 추가하고 애니메이터 컨트롤러가 추가되어있는 게임오브젝트를 할당하면 게임오브젝트의 애니메이션 클립을 타임라인의 흐름에 따
플레이어의 공격이 턴제 RPG에서 원거리/근거리에 따라 다르게 구현되어야 한다.예를들어, 근거리 캐릭터는 상대의 캐릭터에 근접하여 공격을 하여야 하고 원거리 캐릭터는 투사체를 상대에게 맞추었을 때 데미지가 들어가야 한다. 어떤 식으로 구현하여야 할까??PlayerUni
IL2CPP : 유니티는 유저코드인 C - 외부에 노출되는 유저코드도 C++이 되므로 전반적인 성능향상에 도움을 준다.C++의 장점 : 메모리 관리를 직접함으로써 메모리 누수 / GC로 인한 성능하락을 막을 수 있다.C++의 단점 : 메모리 관리를 사용자가 직접하기 때
턴제 RPG에서 사용할 스킬데이터를 SO에 저장하고, 이를 실제 게임 내에서 스킬로 만들어 사용하여야 한다. 스킬에 필요한 데이터들을 SO로 정의하고 스킬을 사용했을 때 실제로 적용되는 로직을 만들어야 한다. 스킬을 사용하는데 필요한 데이터들을 생각해보자.효과 효

확률적으로 적이 스킬을 사용하거나 타겟을 설정할 때, 이 WeightedSelector클래스를 사용하려고 한다. WeightedSelector클래스의 역할은 크게 3가지이다.해당 클래스에는 리스트에 엔트리들과 각각의 엔트리들에 확률밀도함수의 X값의 범위를 가진다.사용
오늘은 스킬 연출 설계를 조금 더 구조적으로 정리할 수 있는 방법에 대해 고민했다.기존에는 스킬 사용 시 VFX, 애니메이션, 데미지 로직 등을 스크립트에서 순차적으로 호출해서 처리했는데, 이 방식은 디자인 변경에 유연하지 못하고 유지보수가 어렵다는 문제가 있었다.그래

스킬 연출스킬 연출은 지난 시간에 TimeLine을 활용하여 만들기로 계획했다.그렇다면, 실제로 이를 사용하려면 어떻게 해야할까우선 SkillEventSceneManager를 만들려고 한다. 이 SkillEventSceneManager는 유닛이 자신의 턴에서 스킬을 사
객체란 무엇인가요? 클래스와 어떤 연관이 있나요?객체란 클래스를 통해 만들어집니다. 클래스는 사용자가 객체를 만들어 놓을 틀을 미리 사전에 정의를 해놓고, 필요할 때 객체를 만들어 사용합니다. 클래스는 필요에 따라 필드와 메서드들이 다르게 정의되어 프로그램에서 각자 단

ManiMind 게임에서 적들이 사용할 스킬과 타겟을 플레이어가 행동을 하기 전에 알려줘야 할필요성이 생겼다. 이전에는 적의 턴이 시작될 때 행동과 타겟선택 로직을 돌았지만, 이제부터는 배틀 턴이 시작되기 전에 해당 로직을 돌아야 할 필요가 생긴 것이다.타겟 선택 로직

Unity 생명주기(Unity Life Cycle)에 대해서 설명해주세요.과거 TIL 주제로 유니티 생명주기에 관해 작성한 적이 있었다. 유니티 생명주기 TIL해당 포스트를 참고하여 답변해보도록 하겠다.유니티 생명주기는 유니티에서 Monobehavior클래스를 상속받아
사용 경험과 연결해서 말하라이론, 개념 설명만 나열하지 말 것"이걸 제가 프로젝트에서 이렇게 써봤습니다" 로 자연스럽게 연결개선 예시:“Object Pool을 공부하다가 직접 이펙트 시스템에 적용해봤는데요, 풀링으로 메모리 사용량이 줄어드는 걸 유니티 메모리 프로파일러
문제상황스킬에 사용되는 VFX마다 프리펩으로 만들어서 스킬데이터와 연결해주는 형태로 만들지를 고민했다. 각각의 프리펩은 스킬 효과마다 로컬포지션을 조정해놓음으로써 스킬이펙트가 발생할 위치와 회전, 크기를 조절할 수 있다.해결방법 스킬에 사용되는 VFX마다 프리펩을 만들
VFX가 재생되는 메서드와 VFX가 재생될 타이밍의 메서드와 연결하고 싶은데 어떻게 해야할까? 우선 내가 시도해 본 방법은 PoolableVFX라는 클래스에 Action을 매개변수로 받는 메서드를 만들었다. 받은 액션에 SFX가 Play되는 메서드를 연결하려고 했다.
자릿수 구하기 문제자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.N의 범위 : 100,000,000 이하의 자연수일의 자리를

지난 번에 시네머신의 인스펙터에 있는 변수들을 주제로 글을 작성한 적이 있다.이번에는 그 변수들을 스크립트 상에서 다뤄야 할 일이 생겼고, 스크립트 상에서 이를 다루는 것은 또다른 문제라는 생각이 들었기에 이번에 새롭게 포스트를 작성하게 되었다.시네머신 변수설명 포스팅

시네머신 브레인의 블렌딩을 조절하면 카메라사이의 전환 시간, 전환 속도등을 조절할 수 있다.여기서 조절하는 속도를 커스텀하는 방법은 알고 있었다.디폴트 블랜드에서 커스텀을 선택하고, 오른쪽의 빈칸을 누르면 쉽게 블렌딩 속도를 조절할 수 있다.위와 같이 그래프를 조절하면
오늘도 면접예상질문들을 정리하는 시간을 가져보았다.객체지향 프로그래밍의 속성 중 하나인 다형성과 이를 활용한 설계의 장점에 대해 설명해주세요. 다형성은 같은 타입(기반 클래스나 인터페이스)으로 서로 다른 구현체를 처리할 수 있게 해주는 개념이다. 예를 들어, IEnem

타임라인을 만든다! 첫 번째는, TrackOffset이다. 트랙이 재생될 애니메이터의 위치의 offset을 어떻게 잡을 것인가? 를 설정해주는 부분이다. TrackOffset은 크게 두 가지로 나뉜다. 하나는 Apply Scene Offsets은 씬에서의 위치를
이전 포스트다만 현재시점에서 위의 포스트에서 잘못된 점들이 몇 가지 있어서 수정하려한다.이전 포스트에서는 버추얼 카메라의 움직임과 이펙트가 발생할 오브젝트의 애니메이션트랙을 Apply Transform Offsets으로 두어야 한다고 생각했다. 이는 Recorded O

머리가 큰 캐릭터의 경우에는 보통의 휴머노이드 애니메이션을 사용하면 손이 머리와 충돌해서 파묻히는 문제가 발생했다. 전체적으로 팔다리가 짧고, 머리가 크기때문에 이 문제는 더더욱 부각된다.이 문제를 해결하기 위해서 애니메이션 리깅을 사용했다. 참고자료는 아래의 유니티

메테오 컷씬 창찌르기 모션창휘두르기 모션

저번 포스트를 통해서 애니메이션을 고쳐서 사용하기 위해서 리깅작업을 진행하고 애니메이션을 수정하였다.문제는 오늘 스킬을 모두 만든 다음에 타임라인으로 만들었더니 실제 적용에서 문제가 발생하였다. 문제발생 에러코드System.InvalidOperationException

문제는 T포즈를 복구해도 문제는 계속해서 발생하였고, 문제의 원인을 찾을 수 없었다.결국 오늘 문제의 원인은 알아냈으나 해결방법을 찾지는 못했다.스킬의 VFX를 발생시켜주는 위치를 정하는 데이터에서 만약, Cast시점에서 Attacker의 Parent로 VFX를 달아주

오디오 매니저를 만들려고 하기때문이다!오디오 매니저와 어드레서블이 무슨상관인가?우리가 만들고 있는 게임 ManiMind는 게임내에서 다양한 효과음을 가진다. 이전까지는 소규모게임만 만들었기 때문에 오디오매니저에서 모든 사운드이펙트 클립을 가지고 있었어도 큰 상관이 없었
항상 로드해야 하는 SFX는 항상 로드SFX는 여러 사운드가 '동시에' 들릴 수 있음씬이 바뀌면 기존에 로드해놨던 사운드를 릴리즈 해주고 새로운 사운드를 로드다른 부분에서 쉽게 SFX를 사용할 수 있을 것오디오매니저오디오 매니저에서는 사운드 조절기능을 BGM과 SFX를
오디오 매니저에서는 크게 달라진 점은 없었다. 다만 예외처리문을 Debug.Error로 로그를 찍어내서 팀원분께서 에러로 착각하시길래 Debug.Warnig으로 로그를 출력하였다.여기서는 바뀐 부분이 꽤 많다. 먼저, 클립이름으로 오디오매니저의 딕셔너리 키값을 넘겨주었
유니티 가비지컬렉터 가비지 컬렉터란? 사용자가 런타임중에 할당한 메모리를 자동으로 반환해주는 프로세스이다. 가비지 컬렉터의 장점, 단점 장점 생산성 가비지 컬렉터를 사용하는 대표적인 언어는 C#, 자바, 파이썬 등이 있는데 이 언어들의 장점은 생산성이 높다는 것

에셋을 임포트했을 때 에셋들이 핑크셋으로 나오는 문제 (셰이더가 잘못 매핑되어있는 문제)window메뉴 클릭Rendering에서 RenderPipeline Converter선택Material Upgrade체크 후 Initialize Converters와 Initial
두 달 동안 좋은 팀원분들을 만나 즐겁게 개발했던 기간이였다. 처음해보는 유니티의 기능들을 많이 사용해보면서 많은 것을 배우고 느꼈기에 좋은 경험이였다.우선, 지금까지의 개발과정을 포트폴리오로 만들고 꾸준히 코테준비도 하고 취업을 노려볼 것 같다. 다만 이정도 포트폴리
오늘은 데이터 드리븐을 사용하기 위한 파서툴을 만들어보고자 한다.파싱툴은 외부프로그램을 직접 코딩하여 만드는것으로 아는데 대표적으로는 윈폼(winform), HTML웹기반 파싱툴을 만들어 쓴다고한다. 유니티 에디터 내부에 파싱툴을 만들면 구글 시트데이터와 같이 데이터파
오늘은 ManiMind게임의 모바일빌드의 최적화에 대해서 다뤄보려고 한다.현업에서 일하고 계신 분의 피드백을 받아서 생각지도 못한 최적화방법을 여럿 알게되었다.우선, 우리 조에서 자체적으로 실행한 최적화 방법들을 먼저 소개하겠다.GPT에서 뽑은 이미지들이 많다보니 스프
ManiMind게임에서 StunVFX의 위치가 몬스터유닛의 크기에 따라서 잘못 출력되는 오류를 해결하려했다.초기에는 먼저 VFXData에 VFXBodyType이라는 Enum을 추가해서, Enum에 따라서 VFX가 출력되는 위치를 바꿔주려했다.해당방법은 꽤나 유효했으나

Stack을 사용