일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스택
- InputManager
- 유한상태머신
- 코루틴
- delegate
- BGM
- 유니티
- 스파르타내일배움캠프
- inputsystem
- ObjectPool
- 메서드
- 인터페이스
- script
- FSM
- 자료구조
- c#
- 배열
- 장애물달리기
- unity
- 효과음
- UI
- invokec#events
- soundmanager
- 프로그래머스
- 람다식
- 직렬화
- LINQ
- skybox
- Generic
- 비선형자료구조
- Today
- Total
목록분류 전체보기 (65)
Unity 개발일지
이번 글에서는 디자인 패턴의 종류 중 하나인 싱글톤 패턴에 대해 알아보자. 싱글톤 패턴이란?특정 클래스의 인스턴스가 애플리케이션 내에서 하나만 존재하도록 보장하는 패턴으로,어디에서나 접근가능한 객체를 생성해서 편하게 접근하기 위해 사용한다.(심판처럼 게임의 흐름을 관리하는 객체라고 생각하면 쉽다!) 싱글톤 패턴을 사용하게되면 객체의 인스턴스는 오직 1개만 생성되게 되는데이를 구현하는 방법은 여러가지가 있지만,객체를 미리 생성해두고 가져오는 가장 단순하고 안전한 방법으로 예시를 작성해보겠다. 먼저 정적필드로 QuestManager를 new QuestManager로 인스턴스를 생성한다. QuestManager 인스턴스가 없다면 FindObjectType 메서드를 이용하여 찾아 instance에 넣어준다...
오늘은 캐릭터 스텟 시스템을 만들어보자 [AttackSO.cs] ScriptableObject는 클래스 인스턴스와는 별도로 대량의 데이터를 저장하는 데 사용할 수 있는 데이터 컨테이너입니다. ScriptableObject의 주요 사용 사례 중 하나는 값의 사본이 생성되는 것을 방지하여 프로젝트의 메모리 사용을 줄이는 고, 연결된 MonoBehaviour 스크립트에 변경되지 않는 데이터를 저장하는 프리펩이 있는 프로젝트의 경우 유용하다. 원거리공격을 따로 빼서 만들어준경우 AttackSO를 만들어주었다면 Project창에서 AttckSO를 만들 수 있다. AttackSO 스크립트에 넣은 값들을 조정할 수 있다. AttackSO를 연결해줘야하니 Controller에 Event등록을 해주자! Scr..
UI로 원하는 캐릭터 선택창을 만들자.Image와 Button UI로 간단하게 만들었다. OpenCharacterUIBtn 스크립트에는 말그대로 창이 열리고 닫히는 기능만 작성했다.SelectCharacterBtn 오브젝트와 SelectBtn 오브젝트에 각각 컴포넌트로 등록하고 OnClick을 설정하였다. SelecCharacterBtn도 간단히 Player의 자식 오브젝트에 SpriteRenderer를 넣어 구분하고SetActive를 이용해 켜고 꺼주었다. 이 과정에서 한가지 문제가 발생한다.바로 Animator가 처음 생성한 플레이어에만 적용되고 나머지 플레이어에는 적용되지 않는것! 그래서 PlayerAnimationConvert라는 스크립트를 만들어 Player1과 Player2의 컴포넌트로..
우선 UI를 이용해 Image와 Button UI로 LoginScene을 하나 만들어주었다.참고로 UI는 Canvas에서 위에있는 쪽이 먼저 생성되어 아래쪽에 깔리게된다.플레이어 이름을 입력하는 칸은 InputField(TMP)이다. InputField를 만들게 되면 InputField와 자식오브젝트로 TextArea에 Placeholder, Text가 생성된다.InputField에는 OnEndEdit(String)부분만 나중에 Script작성 후 손봐줄 예정이고,Placeholder는 아무것도 입력하지 않았을 시 Default Message를 입력할 수 있다.Text는 플레이어의 입력을 받아 출력해준다. Button을 이용할 것이기 때문에 SrartBtn 스크립트를 만들어주었고,TMP_InputFi..
카메라를 플레이어의 자식으로 종속시키면 추후 문제발생 시 수정사항이 많기 때문에카메라에 스크립트를 하나 붙여서 플레이어를 따라다니도록 만들었다. player의 Transform을 가져왔고,추후 사용할 Lerp함수에서 카메라가 쫒아오는 속도를 조절할 변수 smooth를 정의했다.(낮을수록 천천히 따라옴) player의 Transform은gameManager가 생성 될 때 초기화 할 예정 (mainCamera.player = player.transform;) 플레이어 위치가 변경된 후 카메라 위치를 변경되게 하기 위해 Update가 아닌 FixedUpdate로 호출하였다. Vector3 targetPos에 player의 position을 넣어주었고선형보간(Linear Interpolation)을 수행하는 L..
유니티로 플레이어의 이동을 구현하는 방법은 다양하다.오늘은 그중에서도 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씩 더해주면 되는 문제이다. [답안]