분류 전체보기
-
TIL_77(Coroutine)TIL 2023. 11. 22. 20:52
23.11.22. 77차 오늘은 기술면접시간에 코루틴에 대해 공부했다. Coroutine이란 Co+routine 2개가 합쳐진 단어로 함께 동작하며 규칙이 있는 일의 순서를 뜻한다. 유니티에선 함수를 특정시간동안 딜레이를 준 후 실행하고 싶을 때 유용하게 사용된다. 이번 프로젝트를 진행하면서 이전 스테이지를 완료하지 못한채 다음 스테이지로 진입하려 했을 때 '이전 스테이지를 먼저 클리어해주세요'라는 팝업창을 2초동안 뜨고 사라지도록 하고싶어서 코루틴을 활용하여 WaitForSecond를 사용하여 팝업창이 2초뒤에 다시 사라지도록 구현하였다. private IEnumerator CantSelectStageUI() { cantSelectStageUI.SetActive(true); yield return ne..
-
TIL_76(InputSystem)TIL 2023. 11. 21. 21:03
23.11.21. 76차 오늘은 각 스테이지와 스테이지선택씬에서 ESC키를 누르면 게임이 일시정지가 되며 팝업창이 뜨는 기능을 추가했다. 게임이 일시정지 되는 기능은 간단하게 Time.timeScale = 0; 을 통해 구현하였다. 팝업창을 종료하게 되면 다시 timeScale을 1로 바꿔줌으로써 게임이 다시 진행되도록 하였다. ESC는 기존의 플레이어의 InputSystem에서 추가하여 넣었는데 넣고나니 기존의 KeyDown 코드는 쓸모가 없어져서 일단은 주석처리를 해놓았다. 현재 일시정지창에서 게임으로 돌아가기, 스테이지 선택창으로 이동, 게임 종료 버튼을 넣어놓았는데 게임종료 버튼은 제대로 동작하지 않아 내일 다시 확인해봐야할 것 같다.
-
TIL_75(Time.deltaTime)TIL 2023. 11. 20. 21:12
23.11.20. 75차 오늘은 기술면접 시간에 Time.deltaTime에 대해 공부했다. 유니티에서 Update() 함수는 매 프레임마다 호출하여 해당 코드를 실행하게 한다. 하지만 유저들이 사용하는 기기의 성능에 따라 fps가 달라 같은 1초라도 호출하는 횟수가 달라지기 때문에 Time.deltaTime을 사용해서 다른 성능의 기기라도 같은 시간안에 같은 호출 횟수를 가지게 함으로써 같은 시간을 잴 수 있도록 한다. 이후 일정 시간을 입력하고 해당 시간이 0이 될때 특정 기능을 하도록 하는 방법으로 타이머를 구현 할 수 있다. Time.deltaTime이란 1초를 현재의 프레임으로 나눈 값으로, 프레임이 느려지거나 빨라질 때마다 조금씩 값이 변한다. 이로써 사용자들의 기기의 성능(fps)이 달라도 ..
-
TIL_74(Update())TIL 2023. 11. 17. 21:19
23.11.17. 74차 오늘은 기술면접 시간에 Update()함수에 관한 공부를 했다. Update는 Update(), FixedUpdate(), LateUpdate() 이렇게 3가지 종류가 있다. Update()는 스크립트가 enabled상태일 때, 매 프레임마다 호출된다. 일반적으로 가장 빈번하게 사용되는 함수이며, 물리 효과가 적용되지 않은 오브젝트의 움직임이나 단순한 타이머, 키 입력을 받을 때 사용된다. FixedUpdate()는 프레임을 기반으로 호출되는 Update 와 달리 Fixed Timestep에 설정된 값에 따라 일정한 간격으로 호출된다. 물리 효과가 적용된(Rigidbody) 오브젝트를 조정할 때 사용된다. Update는 불규칙한 호출임으로 물리엔진 충돌검사 등이 제대로 안될 수 ..
-
TIL_73(Unity의 주요 메서드)TIL 2023. 11. 16. 20:51
23.11.16. 73차 오늘은 기술면접 시간에 Unity의 주요 메서드들의 기능에 대해 공부했다. 주요 메서드로는 Awake, Start, Update, FixedUpdate, OnBecameVisible 및 OnBecameInvisible, OnEnable및 OnDisable, OncollisionEnter 및 OnTriggerEnter, OnDestroy 등이 있고 이들은 적힌 순서대로 기능한다. Awake()는 게임 오브젝트가 생성될 때 한 번만 호출된다. 초기화 작업을 할 때 쓰이며 다른 컴퍼넌트에 의존하지 않는 초기화에 사용된다. Start()는 첫 번째 프레임이 시작되기 전에 한 번만 호출된다. Awake()와 같이 초기화 작업을 할 때 쓰이지만, 다른 오브젝트와의 상호작용이 필요한 경우에 ..
-
TIL_72(코드리뷰)TIL 2023. 11. 15. 21:00
23.11.15. 72차 오늘은 중간발표의 피드백에 이어 담당 튜터님의 코드리뷰가 있었다. 우리 팀은 코루틴을 사용할때 StartCoroutin("함수명"); 위 처럼 사용을 했는데 이렇게 사용하게 된다면 함수명이 바뀌었을때 해당 기능이 발동하지 않지만 console을 통해 error로 알려주지 않기 때문에 해당 방법 보다는 StartCoroutin(함수명()); 의 방식으로 바꾸는 걸 추천해 주셨다. 그 밖에도 폴더의 이름 사이에 공백이 들어가면 안된다는 것과, 안쓰는 update등의 함수들을 삭제 해줘야 하는 것, 비 활성화된 using들 또한 단축키를 통해 한번에 삭제 해주는 것 까지 알려주셨다. 아무래도 작업 기간이 길어 코드의 양이 많아지면서 이런 기본적인것들을 더욱 중요시 여겨야 할 것 같다.
-
TIL_71(배열)TIL 2023. 11. 14. 20:54
23.11.14. 71차 오늘은 어제의 피드백을 받아 지적을 받았던 함수를 수정하였다. 게임매니저를 scene에 만들어놓고 시작했던 기존과는 다르게 동적 생성을 통해 지금은 게임매니저가 보이지는 않지만 작동을 하는 방식으로 구현하였다. public class GameManager { public int[] curStage = new int[4] { 0, 1, 2, 3 }; public int _curStage; public bool isSpawn; private static GameManager _instance; private GameManager() { } public static GameManager Instance { get { if (_instance == null) { _instance = n..