일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- skybox
- 유한상태머신
- Generic
- ObjectPool
- inputsystem
- 효과음
- 메서드
- 장애물달리기
- 스파르타내일배움캠프
- 인터페이스
- 배열
- 스택
- delegate
- UI
- 유니티
- 프로그래머스
- LINQ
- 람다식
- FSM
- c#
- invokec#events
- 자료구조
- InputManager
- soundmanager
- 직렬화
- 코루틴
- script
- 비선형자료구조
- BGM
- unity
- Today
- Total
목록c# (33)
Unity 개발일지
[코루틴이란?]코루틴을 사용하면 작업을 다수의 프레임에 분산할 수 있습니다. Unity에서 코루틴은 실행을 일시 정지하고 제어를 Unity에 반환하지만 중단한 부분에서 다음 프레임을 계속할 수 있는 메서드입니다. 대부분의 경우 메서드를 호출하면 실행을 완료한 뒤 호출한 메서드에 제어와 선택적 반환 값을 반환합니다. 즉, 메서드 내에서 발생한 모든 행동은 단일 프레임 업데이트 내에서 발생해야 합니다.코루틴은 스레드가 아니라는 점을 명심해야합니다. 코루틴의 동기 작업은 여전히 메인 스레드에서 실행됩니다.(유니티는 단일스레드이다.) [그래서 코루틴을 사용하면?]코드 내에서 구문 실행 도중에 처리를 대기시키거나, 순차처리에 함수를 병렬로 동시에 처리하도록 구현할 수 있다.예를 들면 캐릭터가 중독되어 체력이 ..
유니티화면에서 등록해줄 GameObject인 prefab을 선언합니다.List를 이용해 pool을 생성합니다.poolSize는 300으로 설정했습니다. for문을 이용하여 poolSize만큼 prefab을 Initiate하고, 비활성화한 후 pool에 등록합니다. GameObject를 반환하는 Get함수를 만들어주었습니다.foreach문을 이용 List pool에접근해서 변수 Gameobject obj에 할당하고,obj가 Hierachy창에 없으면 obj를 활성화하고, obj를 반환(출력)합니다. Release함수는 Gameobject obj를 변수로 받으며 obj를 비활성화해줍니다. Get함수화 Set함수를 이용하여 풀에서 가져다쓰고 반납하기를 하면 됩니다.[foreach문]foreach 문은 C#에..
이번 글에서는 디자인 패턴의 종류 중 하나인 싱글톤 패턴에 대해 알아보자. 싱글톤 패턴이란?특정 클래스의 인스턴스가 애플리케이션 내에서 하나만 존재하도록 보장하는 패턴으로,어디에서나 접근가능한 객체를 생성해서 편하게 접근하기 위해 사용한다.(심판처럼 게임의 흐름을 관리하는 객체라고 생각하면 쉽다!) 싱글톤 패턴을 사용하게되면 객체의 인스턴스는 오직 1개만 생성되게 되는데이를 구현하는 방법은 여러가지가 있지만,객체를 미리 생성해두고 가져오는 가장 단순하고 안전한 방법으로 예시를 작성해보겠다. 먼저 정적필드로 QuestManager를 new QuestManager로 인스턴스를 생성한다. QuestManager 인스턴스가 없다면 FindObjectType 메서드를 이용하여 찾아 instance에 넣어준다...
오늘은 캐릭터 스텟 시스템을 만들어보자 [AttackSO.cs] ScriptableObject는 클래스 인스턴스와는 별도로 대량의 데이터를 저장하는 데 사용할 수 있는 데이터 컨테이너입니다. ScriptableObject의 주요 사용 사례 중 하나는 값의 사본이 생성되는 것을 방지하여 프로젝트의 메모리 사용을 줄이는 고, 연결된 MonoBehaviour 스크립트에 변경되지 않는 데이터를 저장하는 프리펩이 있는 프로젝트의 경우 유용하다. 원거리공격을 따로 빼서 만들어준경우 AttackSO를 만들어주었다면 Project창에서 AttckSO를 만들 수 있다. AttackSO 스크립트에 넣은 값들을 조정할 수 있다. AttackSO를 연결해줘야하니 Controller에 Event등록을 해주자! Scr..
유니티로 플레이어의 이동을 구현하는 방법은 다양하다.오늘은 그중에서도 New InputManager로 구현을 해보았다. New InputManager란 무엇인가?우선 기존의 InputManager (구 InputManager)로 플레이어의 이동을 구현해보았다.[SerializeField] 는 private로 선언된 변수를 Inspector창에서 접근할 수 있게 해주는 함수이다.Inspector 창의 InputManager 스크립트에서 접근자가 private속성인 speed를 설정할 수 있다. 기존 Update문에서 GetComponent를 사용하여 Rigidbody2D에 접근을 하였는데 매 프레임마다 가져올 필요가 없이Start문에서 Rigidbody2D에서 접근하여 코드를 변경하였다. 매번 달라져야..
[초기 제시문] for문으로 배열을 돌면서 height 보다 큰 값의 개수를 구하는 문제이다.배열의 크기를 구할 때는 array.Length를 쓰고, if문으로 aswer의 값을 늘려 return 해주면 된다. [답안] [참고할 만한 답안]using문으로 System.Linq;를 선언하여 람다식을 이용하였다.array.Count로 answer에 바로 값을 대입하였고Count안에 람다식으로 x > height 로 바로 대입하였다. [초기 제시문]배열을 오름차순으로 나열 후 중앙값을 구하는 문제이다.array의 길이는 홀수이고, int형이므로 array.Length / 2 를 해주면 중간값을 구할 수 있다. [답안] [참고할 만한 답안]using문으로 Linq를 선언한 후 Orderby와 람다식을 이용하..
간단하게 프로그래머스 문제를 푼 것으로 하루를 마무리하려고 한다. [초기 제시문]우선 answer을 배열로 선언하였고, new int 안에 numbers.Length로 answer 배열을 초기화해주면 되겠다.그리고 for문으로 i 가 numbers.Length 까지 numbers[i]의 값에 2배를 곱해서 answer[i]에 넣어주면 된다. [답안] [초기 제시문]for문으로 array의 Length까지 array[i]와 n이 같다면 answer에 1씩 더해주면 되는 문제이다. [답안]
진행하기 전에 데이터 직렬화(Serialization), 역직렬화(Deserialization)는 무엇이고 왜 필요한지 알아보자. 직렬화 ( Serialization ) 란?메모리를 디스크에 저장하거나 네트워크 통신에 사용하기 위한 형식으로 변환하는 것 역직렬화 ( Deserialization ) 란?디스크에 저장한 데이터를 읽거나, 네트워크 통신으로 받은 데이터를 메모리에 쓸 수 있도록 다시 변환하는 것 직렬화는 왜 필요한가?메모리에 대해 이해하기 위해서는 힙 영역과 스택영역에 대한 기본적인 지식이 있어야한다. 1. 값 형식 데이터(Value Type) 우리가 흔히 선언해서 사용하는 int, string, char 등 값 형식의 데이터들은 스택에 메모리가 쌓이고 직접 접근이 가능하다. 2. 참조 형식..