[UNITY] 92

옵저버 패턴 (Observer Pattern)

성장하고 싶은 나는 샤워하거나 씻을때 유튜브 Unity korea 에서 제공하는 디자인패턴에 관한 TIP들을 보는데, 옵저버 패턴이란 내용이 나와서 블로그에 정리해보기로 했다. 옵저버 패턴이란 ?한 객체의 상태가 변경될때, 이를 의존하는 다른 객체들에게 자동으로 알림을 보내는 패턴입니다.(게임개발에서는 이벤트 시스템 혹은 UI업데이트에 주로 사용됩니다.) 한번 예시코드를 작성해 보도록 하겠습니다. 코드의 흐름을 이렇게 이해하면 쉽게 이해할 수 있습니다. 이벤트를 등록 > 이벤트를 구독(메서드) > 이벤트를 발생 > 이벤트를  구독하는 메서드를 호출 public class Player : MonoBehaviour{ // 이벤트를 등록 public static event Action OnHealt..

[UNITY]/TIL: UNITY 2024.10.13

[Unity] Object Pool (오브젝트풀)

가장 최근 들었던 강의에서 슈팅게임을 만들면서 오브젝트 풀을 이용하여 화살을 사용했었는데, 과제도 다 한 김에 오브젝트 풀을 공부하던중 정리해놓으면 좋을 것 같아 또 작성하게 되었다. Object Pool"Pool"에서 준비된 상태로 대기 중인 초기화된 오브젝트 세트를 사용오브젝트가 필요할때 새로 인스턴스화 하는것이 아닌, "Pool"에서 오브젝트를 활성화 하여 사용사용이 끝나면 Destory가 아닌 비활성화 후 "Pool"에 반환주로 로딩화면 등에서 미리 생성절대로 SetParent를 해서는 안됨 !! (성능적인 이슈 발생)  아래는 예제코드로 예제코드에 주석을 달아가며 정리해보도록 하겠음여기서 사용된것은 Unity에서 제공하는 ObjectPool API를 활용한 방식 using UnityEngine;..

[UNITY]/TIL: UNITY 2024.10.11

[Unity] 간단한 NPC 대화 구현하기

오늘은 유니티에서 가까운 거리에 있는 NPC와의 대화를 구현해보았다. 어제는 휴일이었는데 어제 달렸더니 오늘 개인프로젝트가 도전과제까지 모두 완료돼서 주말에 로아를 할수있게됐다 시작해보자  우선 TextMeshPro를 사용하고있어서 TextMeshProUGUI 자료형을 사용하는 경우가 있는데, 이부분은 일반 text 사용시 Text로 바꿔서 사용해주시길 바랍니다. 첫번째로 할 일은 상호작용 버튼을 만드는 것입니다. Text를 만들어서 "G를 눌러 상호작용" 같은 글을 적은 뒤 표시하고 싶은 위치에 놔두고 SetActive를 False로 바꿔주세요 그리고 아래의 스크립트를 작성합니다. 대부분의 설명을 주석에 적어두었습니다. using System;using System.Collections;using Sy..

[UNITY]/TIL: UNITY 2024.10.10

[C#] AI에게 배우는 C#

오늘부터 챗 GPT에게 C#문제를 내달라고 하고 풀어볼 예정이다. 우선 5가지 문제를 내달라고 했다.계속 프로젝트가 진행중이라 바쁘지만, 최대한 여유가 있을때 마다 C#공부를 병행하려고 한다. 검색하지않고 온전히 머릿속에 있는것만으로 풀려고 하니 정말 막막했고, 많은 도전을 했지만 하나도 제대로 풀어내지 못했다. 하지만 이런 과정을 거친 후 풀이를 보게된다면 기억에 오래 남을것이다. 이걸 보는사람이 있고, 공부중이라면 함께 풀어보고 풀이를 보며 공부하는것을 추천한다. 문제 1: 기본적인 문자열 처리문제: 사용자로부터 문자열을 입력받아, 그 문자열이 회문(앞뒤가 같은 문자열)인지 확인하는 프로그램을 작성하세요. 대소문자는 무시합니다. 예를 들어, "Radar"는 회문입니다.문제 2: 배열과 반복문문제: 정..

[UNITY]/TIL: UNITY 2024.10.08

[Unity] New Input System 구현하기

지난시간에는 Input Manager로 캐릭터의 움직임을 구현했었는데, 이번 강의에서는 Input System을 이용해서 캐릭터의 움직임을 구현 했었다.해당 내용을 두고두고 사용할것같아 블로그에 적어두기로 했다. 캐릭터를 움직이는 부분만 구현해보도록 하겠다. 우선 Unity에서 Window > Package Manager > Unity Register > Input System > Install 을눌러 설치해준다. 그리고 Assets 폴더에 Input 폴더를 만들어주고 우클릭하여 Create > Input Action 을 눌러 만들어주고 원하는 이름으로 수정한다. 그리고 더블클릭하여 열어준 뒤 No Control Schemes 를 눌러 Add Control Scheme 클릭이름을 수정해주고 +버튼을 눌러..

[UNITY]/TIL: UNITY 2024.10.07

[Unity] 캐릭터 움직임 구현하기 (InputManager)

InputManager을 이용한 캐릭터 움직임 구현하기 입니다. 해당 내용은 요즘엔 잘 사용하진 않지만 알아두면 좋기에 저장해둘 겸 작성하게 되었습니다. 유니티에서 움직임을 만들어 줄 오브젝트를 하나 만들으신 후 InputManager 스크립트도 만들어주세요 스크립트에 해당 내용을 작성해줍니다. using System.Collections;using System.Collections.Generic;using UnityEngine;public class InputManager : MonoBehaviour{ [SerializeField] private float speed;// 인스펙터창에서 수정가능하게 함 Rigidbody2D rb; // Rigidbody2D 형식의 rb라는 변수를 선언 ..

[UNITY]/TIL: UNITY 2024.10.06

[Unity] 스크립트 라이프 사이클

오늘부터는 다시 Unity강의를 듣는다.. 드디어..! 강의를 듣던중 메모해두면 좋을 내용이 있어 잠깐 TIL을 작성하게 되었다 스크립트 라이프 사이클Monobehaviour 를 상속받는 클래스들은 유니티 이벤트 함수를 활용할 수 있다.게임오브젝트의 생명 주기 동안 호출되는 특정한 메서드들의 순서와 타이밍 많이 사용되는 메서드들의 순서를 정리하자면 아래와 같다. Awake > OnEnable > Start > FixedUpdate > OnTriggerXX > OnCollisionXX > Update > LateUpdate > OnDisable > Ondestroy > OnApplicationQuit 끝!

[UNITY]/TIL: UNITY 2024.10.06

[C#]깊은 참조와 얕은 참조에 관하여

팀프로젝트 발표중 튜터님께서 어떤 코드를 보고 깊은 참조와 얕은 참조에 대해 이해하고 사용한 부분이 인상적이라고 하셨는데, 해당 부분은 잘 모르는 부분이라 메모해두었다가 공부를 하게 되었다.  우선 해당 내용은 객체 복사 방식과관련된 개념이다. 우선 얕은참조는 객체의 주소값을 복사해서 사용하는 방식이다.그러니까 데이터를 담는곳이 같은곳이라는 뜻이다.원본이 A 복사본이 B 라는 가정에하에A가 바뀌면 B가 바뀌고 B가 바뀌면 A가 바뀐다. 아래의 예제코드를 보면 이해가 쉽다. public class Person{ public string Name { get; set; } public int Age { get; set; }}class Program{ static void Main() { ..

[UNITY]/TIL: UNITY 2024.10.04

[C#] Json을 use한 data save를 use한 class를 save하기

오늘부터 중간중간 알고있는 영어단어를 섞어 쓰도록 하겠다왜냐면 검색을 해보면 여기저기 영어가 너무많아서 영어와 친해지는 시간이 필요할것 같아서이다.이번에도 역시나 TeamProject 에서 필요해서 make 하게 된 code 이다. 우선 우리는 Player 라는 class에 Player의 모든 변수를 넣어두고 Player를 singleton pattern을 구현하여전역적으로 management 하고 save을 하거나 load할때에도 해당 instance를 save하고 load온다. 그리고 Json을 이용한SaveLoadSystem에 대해선 자세하게 설명하지 않고 pass 하겠습니다.Why ? . 다른 글에 해당 방법을 이용하는 방법에 대해 설명이 되어있음 우선 singleton pattern을 사용할 P..

[UNITY]/TIL: UNITY 2024.10.02

[C#] PlayerTime 계산하기~

TextRpg만들기 팀 프로젝트를 진행중인데, 이제 슬슬 큰 기능들은 다 잡혔고디테일한 부분들을 챙기고 있는데 오전에 샤워를 하다가 플레이타임이 넣고싶어서 조금 찾아봤다.  우선 TimeSpan이라는 문자열을 이용해서 최종 플레이타임 계산을 하려고 한다. 게임 데이터를 저장할 Class에 아래의 코드를 추가해주고 public TimeSpan PlayTime { get; set; } = TimeSpan.Zero; 게임을 시작하면 스톱워치를 켜준다 !using System.Diagnostics; // 스톱워치 사용을 위한 네임스페이스static Stopwatch stopwatch = new Stopwatch(); // 스톱워치를 객체로 가져오고stopwatch.Start(); // 스톱워치시작 시작하는부분에..

[UNITY]/TIL: UNITY 2024.10.02