본문 바로가기

728x90

Unity

(38)
[Unity] 오브젝트 생성과 파괴는 뭐야? 게임을 제작함에 있어 오브젝트의 생성과 파괴는 메모리와 관련하여 중요한 부분입니다. 유니티에서는 생성과 파괴에 대한 함수를 미리 정의해주는데 제공해주는 함수는 다음과 같습니다. 오브젝트 생성 함수: Instantiate() 오브젝트 파괴 함수: Destroy() 우선, 오브젝트 생성 함수에 대해 알아보겠습니다. 아래의 코드에서 확인할 수 있듯이 Instantiate는 2개의 오버로드 함수를 가지고 있습니다. 하나는 생성 오브젝트만 입력하는 것 다른 하나는 생성 오브젝트와 생성 위치, 생성할 때의 회전 값을 입력으로 받습니다. 각각의 함수 기능은 다음과 같습니다. 편의상 코드의 순서에 맞게 첫 번째, 두 번째로 표현하겠습니다. 첫 번째 함수는 생성 오브젝트만을 입력받으므로 나머지 생성 위치나 회전 값은 프..
[Unity] ScriptableObject 가 뭐야? 유니티에서 "ScriptableObject는 클래스 인스턴스와는 별도로 대량의 데이터를 저장하는 데 사용할 수 있는 데이터 컨테이너입니다."라고 설명합니다. 제 경험에서 ScriptableObject 는 결말이나 도감의 정보를 저장할 때 사용하면 좋을 것 같다고 생각합니다. 아래의 코드는 프로젝트를 하면서 바이러스의 정보와 이미지를 가지고 있는 도감을 만들 때 사용했던 코드입니다. 이렇게 하면 하나의 도감을 하나의 오브젝트로 저장하여 관리할 수 있어 편리함을 느꼈습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [CreateAssetMenu(fileName = "New Virus", menuName = "VirusData/Sources")] public ..
[Unity] 유니티에서 Enum 변수를 사용하는 법 Enum은 열거형 변수로 상태를 표시할 때 자주 사용합니다. 아래 코드처럼 namespace로 선언해서 설정해주고 필요한 상태들을 만들어줍니다. 1 2 3 4 namespace EnumManager { public enum States { None, Menu1, Menu2, MenuImage, NextScene}; } 저는 심리 분석 프로젝트를 진행하면서 사용했어서 보이는 것처럼 Menu1, Menu2, MenuImage, NextScene과 같은 상태들을 설정했습니다. 1 2 3 4 5 if(listSay[sayId][sayActionIndex].state == EnumManager.States.NextScene) { ScreenManager.instance.NextScene(1f); return; }..
[Unity] GetCurrentAnimatorStateInfo로 애니메이션 상태 체크하기 Animator의 GetCurrentAnimatorStateInfo 함수를 통해서 현재 진행되고 있는 애니메이션의 상태를 체크할 수 있습니다. 1 2 3 4 5 6 if (!PlayerMovement.instance.anim.GetCurrentAnimatorStateInfo(0).IsName("Idle")) { PlayerMovement.instance.anim.SetBool("Attack", false); PlayerMovement.instance.anim.SetBool("Walk", false); PlayerMovement.instance.anim.SetBool("Idle", true); } 위의 코드의 조건문은 PlayerMovement의 애니메이터에 현재 진행되고 있는 애니메이션의 이름이 Idle..
[Unity] 공중에 있는 땅 통과 후 착지 구현 공중에 있는 땅을 캐릭터가 점프하여 뚫고 올라가는 것을 어떻게 구현할 것인가? 일 질문을 받자마자 내가 생각한 방법은 일단 4개의 레이어를 사용한다. (Player, PlayerJump, Wall, Ground) Player - 플레이어의 초기 상태 레이어이다. PlayerJump - 플레이어가 점프 중인 상태의 레이어이다. Wall - 공중에 있는 땅 레이어이다. Ground - 플레이어가 착지할 수 있는 땅 레이어이다. 먼저 [Project Settings > Physics 2D]에 들어가서 Wall와 Ground가 PlayerJump와 물리적 상호작용을 하지 못하게 한다. 그리고 공중에 있는 땅을 위의 그림처럼 설정해준다. 구현 방법은 Wall 스크립트를 만들어 만약에 플레이어가 Wall과 충돌하게..
[Unity] Video Player 페이드 인, 페이드 아웃 효과 만들기 (2) (1)에서 페이드 인, 페이드 아웃을 구현하였으니 이번에는 적용을 시켜보겠습니다. 1 2 3 4 5 6 7 8 9 10 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class PageManager : MonoBehaviour { int number; AsyncOperation asyncOperation; number - 씬 번호를 저장할 변수입니다. asyncOperation - 비동기 장면 전환을 위한 변수입니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 void Awake() { numb..
[Unity] Video Player 페이드 인, 페이드 아웃 효과 만들기 (1) 씬 전환 간에 VideoPlayer의 targetCameraAlpha값을 조정해서 페이드 인, 페이드 아웃 효과를 만들어보겠습니다. 1 2 3 4 5 6 7 8 9 10 11 12 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Video; public class VideoManager : MonoBehaviour { VideoPlayer videoPlayer; public bool isChanged; public VideoClip[] videoClips; int indexNumber; videoPlayer - VideoPlayer를 저장할 변수입니다. isChanged - 씬 전..
[Unity] 코루틴이 뭐야? 문제 생성 직후부터 총 8초에 걸쳐 서서히 나타났다가 서서히 없어지는 것을 반복하는 적이 있다고 할 때 어떻게 적을 구현할 것인가? 해결 방법과 코루틴 설명 Update 함수를 사용하여 매프레임에 걸쳐 적의 SpriteRenderer를 통해서 알파값을 조정해주는 방법으로 해결할 수 있습니다. 위의 방법 매프레임마다 구현된 함수를 호출해야하므로 시스템 과부하를 초래할 수 있습니다. FadeIn(적이 나타나는 함수), FadeOut(적이 사라지는 함수)를 만들어 Invoke 함수를 통해서 FadeIn-FadeOut-FadeIn-FadeOut을 계속하여 도는 구조로 만들어 해결할 수 있습니다. 위의 방법은 Invoke 함수에 주기도 설정해주어야하고, Invoke 함수는 함수에 인자를 전달할 수도 없기 때문에 ..

728x90