전체 글 77

유니티 - 애니메이터창에서 실시간 전환이 안보일 때

유니티에서 게임씬을 돌리면 애니메이터에선 실시간으로 어떤 애니메이션이 수행되고 있는지, 애니메이션이 어떤 식으로 변하는지 트렌지션 과정을 보여준다. 흐름을 파악하기 쉽다.  프로젝트 할 때 팀장 분께서 만드신 애니메이터의 동작흐름을 확인하고자 실행을 해봤는데위와 같이 게임씬을 시작해도 아무런 변화가 없어 당혹스러운 상황이 생겼다. 이럴 땐 어찌하면 되냐.. 너무나도 간단하게 해당 애니메이터가 달려있는 오브젝트를 하이레키 창에서 클릭해주면 된다.참고로 자식에 애니메이터가 달려있더라도 부모가 아닌 자식을 눌러줘야 실시간 전환이 보인다. 즉 여기선 Aj@Idle 객체를 클릭해야 실시간 전환이 보이게 된다. Animation 창에서도 그랬는데 적용이 되어 있는 오브젝트를 선택해주는 것이 애니메이션에선 중요한 것..

유니티 2024.06.14

유니티 - 사운드 컨트롤

AudioClip 사운드 파일(데이터)을 담당하는 컴포넌트 타입 AudioSource AudioClip을 연결하여 재생할 수 있도록 하는 컴포넌트볼륨 조절, 반복 재생등의 설정이 있다. AudioListener 오디오를 듣는 역할을 해 얘가 없으면 아예 소리가 안들리며 일반적으로 메인 카메라에 달려있다.하나만 존재해야한다. SoundManager.cs 게임 매니저 자식으로 SoundManager 오브젝트를 추가하고 아래의 SoundManager 스크립트를 부착한다. Stop과 같이 항상 뭔가를 실행한다하면 한 번 껐다 켜는 것이 도움이 된다. 코루틴서도 습관을 들이자 사운드의 피치를 조절하면 피치가 높을 수록 고음의 소리가 나게 되는데 이런 것을 활용해 한가지 소리로 다양한 소리를 만들 수 있다.또한 같..

카테고리 없음 2024.06.13

유니티 - 파티클 시스템

파티클 시스템 파티클 하나하나도 게임 오브젝트라 할 수 있는 데 양이 많기 때문에 이것을 체계적이고 효율적으로 관리하는 시스템이라 할 수 있다. 주요시스템으론  emitter(발사체)particles(파티클)animator(애니메이터)renderer(렌더러) 등으로 이루어져있다. 주요모듈 Main 모듈  파티클 시스템 컴포넌트를 보면 바로 나오는 메인 모듈이다.딜레이, 생명주기, 속도, 회전 등 기본적인 값을 설정할 수 있다. Prewarm은 Looping이 켜져있을 때만 사용하는 것으로 오브젝트 풀과 같이 그냥 모든 파티클을 미리 생성해둬 초기화하는 것이다. 미리 생성해뒀기에 파티클 시스템 시작 시 초기화 작업이 필요가 없게되어 파티클 초기 실행 속도가 빨라질 것이다. 다만 처음 로딩 시간이 길어질 수..

카테고리 없음 2024.06.12

이번 프로젝트 KPT

Keep토론, 특히 팀장님께서 회의를 적극적으로 주최해주셔서 좋았다. 회의를 통한 의논은 다음 프로젝트에서도 자주 해야겠음을 느꼈다. Problem어려운 내용을 공부하려다 선회해 다소 늦게 작업을 시작했고 쉬운 방법을 시도했음에도 버그가해결되지 않은채 발표를 진행함너무 합치는 과정이 늦게 진행됐다. 내가 늦어진 탓이 큰 것 같다. Try방법은 쉬운 거로 먼저 구현하고 어려운 구현을 도전해보자나혼자 하는 프로젝트가 아니기에 팀원들을 더 생각하자

카테고리 없음 2024.06.11

유니티 - 부모 넘기기

오늘은 프로젝트로 인해 간략하게 안것에 대해서만 서술한다. transform.parent.gameObject로 접근하면 부모 오브젝트를 넘길 수가 있다. 오브젝트 풀링 사용시 간단하게 일단 class로 선언해둬 여러 타입의 객체를 받을 수 있도록 가져오고 그 class의 정보에는 풀링 사이즈와 tag 프리펩 정보를 담아둔다. 그리고 딕셔너리에 키를 tag로 설정하고 큐를 하나씩 넣어줘 클래스당 큐를 보유할 수 있도록하는 것이다. 그리고 생성시엔 dequeue를 하고 바로 enqueue를 해준다. 다만 이렇게 한다면 dequeue 한 것이 필요 없어진 상황에서도 setActive되는 상황도 있어 필요없을 때 setActive 를 false로 해주는 작업도 필요해보이며 이번 과제서 구현을 했다.

카테고리 없음 2024.06.10

유니티 - JsonUtility로 Queue 저장하기

게임을 할 때 최근 기록을 10개를 저장하고자 할 때 10개가 꽉차면 가장 먼저 있던 데이터가 빠져나가야한다. 이를 위해선 Queue(큐)가 가장 적절한 구조라 할 수 있다. 하지만 문제는 JsonUtility에선 Queue 가 저장이 안된다. 그렇다면 어찌해야하는가? 유니티 상에서는 큐로 데이터를 관리하다가 Json으로 직렬화하기 전에 List로 바꾸고List를 직렬화 후에 파일로 로컬에 저장을 한다. 일단 큐에 저장할 때 10개의 기록이 다 차있다면 맨 앞의 원소를 빼는 Dequeue를 하고 새로운 데이터를 Enqueue를 해야한다.  그것이 위의 코드이다. 조건에 맞게 큐에 원소를 저장할 수 있는 함수를 넣어두고 큐 -> 리스트 간단하다 ToList() 함수를 이용하면된다. 리스트로 만들면 이를 직..

유니티 2024.06.07

유니티 - 메타(.meta) 파일의 guid

메타 파일도 다른 유니티 파일과 같이 직렬화되어 저장되어 있고 유니티에서 쓰일 땐 역직렬화되어 쓰일 것이다. 중요한 것은 guid이다. guid(Globally Unique Id)는 고유 번호로 Player.cs의 메타파일은 Player.cs의 guid 번호를 저장하고 있다.주민등록번호 같은 것으로 유니크한 고유의 번호이다. 만일 Player 스크립트가 쓰인다하면 guid를 통해 스크립트 파일을 추적한다. 고로 메타 파일을 github에 업로드를 안하게 되면 사람마다 guid가 달라져 누구는 오브젝트에 Player 스크립트가 붙어있고 누구는 안붙어 있고 그럴 수가 있으니 메타 파일을 빼먹지 말도록 하자

카테고리 없음 2024.06.05

유니티 - 직렬화와 역질렬화 (총편집)

지난 번에 짤막하게 다뤄봤으나 프로젝트를 위해선 제이슨 공부가 더 필요하기에 좀 더 자세히 다뤄보고자 한다. 코드를 작성 시에 값들은 메모리에 흩어져서 산재하고 있는데 흩어져있는 메모리 상의 존재하는 값들을 뽑아서 정리해서 나열하는 것을 직렬화라한다. 과거엔 바이트배열로 만드는 것을 의미했으나 시간이 갈수록 더 넓은 범위로 직렬화를 쓰면서 바이트 배열만 해당되는 것은 아니다. 반대로 정리해둔 값들을 가지고 다시 프로그램이 시작될 때 메모리에 적절한 값을 집어넣어 세팅하는 것을 역직렬화라 한다. 직렬화 흩어져있는 메모리 상의 존재하는 값들을 뽑아서 정리해서 나열하는 것 역직렬화 직렬화된 값들을 가지고 다시 프로그램이 시작될 때 메모리에 적절한 값을 집어넣어 세팅하는 것 단순히 말하자면 정보는 나열하는 것이..

유니티 2024.06.04

유니티 - lerp와 slerp

lerp나 slerp나 결국 보간법이라 두 점을 잇는 방법을 얘기하는 것인데 lerp, slerp 둘다 인자의 의미는 같다. lerp(From, To, Rate)로 From은 출발지, To는 목적지로 생각하면 되고 Rate는 비율로 생각하면 된다. 비율은 [0, 1] 사이의 수로 나타내며 0이 0%, 1이 100%로 0.1은 10%, 0.5는 50%로 이해하면 된다. 그래서 0.4(40%)의 비율은  무엇을 의미하는걸까?lerp(A, B, 0.4f) 를 살펴보자 A를 출발점, B를 도착점으로 봤을때 40퍼센트까지 왔다는 것을 의미한다. (즉 도착까지 60퍼가 남은 거다) lerp의 경우 선형보간이기 때문에 위와 같이 직선으로 출발점, 도착점을 잇고 비율에 따라 위치를 정해주면 된다. 반면 slerp은 구..

유니티 2024.06.03

TIL - 잘못알고 있던 프로퍼티

프로퍼티에 대해 완전히 잘못생각하고 글을 기술했었다. 프로퍼티 != 변수 라는 사실이다. 프로퍼티는 프로퍼티지 변수가 아니다.  나는 프로퍼티를 변수로만 생각했는데 프로퍼티는 그냥 프로퍼티다. 쉽게 생각하면 실제 변수(필드)는 생략되어있는거지 실제론 존재한다는 것이다. 그리고 또한 만일 get이나 set에 추가적인 로직을 통해 변수를 만들고 싶다하면 이는 프로퍼티만으론 힘들다.  private static CharacterManager _instance; public static CharacterManager Instance { get { if (_instance == null) { _instanc..

카테고리 없음 2024.05.31