전체 글 35

유니티 반복자 (Iterator)

정의컬렉션 구현 방법을 노출 시키지 않으면서 그 집합체 안에 들어있는 모든 항목에 접근할 방법을 제공하는 패턴내부 구조를 노출하지 않고 복합 객체의 원소를 순차적으로 접근 가능하게 하는 행위 패턴using UnityEngine;using System.Collections;using System.Collections.Generic;namespace _20240719{ // Iterator 인터페이스 public interface IIterator { bool HasNext(); T Next(); } // Iterable 인터페이스 public interface IIterable { IIterator GetIterator(); ..

유니티 전략 패턴 (Strategy)

유니티에서 전략 패턴(Strategy Pattern)은 특정한 알고리즘군을 정의하고 각각을 캡슐화하여 서로 교환 가능하도록 하는 패턴이다. 이 패턴을 사용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있어 유연성이 높아진다. 장점유연성: 알고리즘을 독립적으로 변경할 수 있어 확장성과 유지보수성이 높아진다.재사용성: 다양한 알고리즘을 동일한 인터페이스를 통해 사용할 수 있다.객체 간 결합도 감소: 전략 객체와 클라이언트 간의 결합도가 낮아져 객체들 간의 의존성이 줄어든다. 단점 클래스 증가: 많은 전략 클래스가 필요할 경우 클래스의 수가 증가할 수 있다.패턴 이해와 구현의 복잡성: 처음에는 이해하기 어려울 수 있으며, 잘못된 사용으로 인해 복잡성이 증가할 수 있다.using Sys..

유니티 중재자 (Mediator)

중재자(Mediator) 패턴은 객체들 사이의 상호작용을 캡슐화하여 객체간의 직접적인 통신을 방지하고, 중재자 객체를 통해 간접적으로 상호작용할 수 있게 하는 디자인 패턴이다. using UnityEngine;using System.Collections.Generic;// Mediator 인터페이스public interface IChatMediator{ void SendMessage(string message, ChatMember sender); void AddMember(ChatMember member);}// Concrete Mediatorpublic class ChatRoom : IChatMediator{ private List members = new List(); publi..

유니티 메멘토

메멘토 패턴은 객체의 상태를 저장하고 이를 나중에 복원할 수 있는 기능을 제공한다. 메멘토는 원조자, 메멘토, 관리자로 구성되어 있다. Originator (원조자): 현재 상태를 저장하고 복구할 수 있는 객체. 상태를 저장하고 복원하는 메서드를 가지고 있다.Memento (메멘토): 원조자 객체의 내부 상태를 저장하는 객체. 원조자의 내부 상태를 외부에 공개하지 않고, 원조자만이 접근할 수 있다.Caretaker (관리자): 메멘토 객체를 보관하고 관리하는 객체. 원조자의 상태를 저장하고 복원할 때 메멘토 객체를 사용한다.유니티에서 플레이어의 상태를 저장하고 복원하는 스크립트를 작성해보자.using UnityEngine;using System.Collections.Generic;// Memento 클래..

유니티 옵저버

옵저버 패턴은 주체 역할 오브젝트 하나, 관찰자 역할 오브젝트 여러개, 즉 객체 사이의 일대다 의존 관계를 정의하며, 한 객체의 상태 변화가 다른 객체들에게 자동으로 통지되도록 한다. 주로 이벤트 처리나 상태 변화를 감지하고 그에 따라 반응할 때 사용된다. 구성 요소Subject (주체): 상태가 변경될 때 옵저버들에게 알리는 역할을 한다. 주로 이벤트 발생자 역할을 하며, 옵저버가 등록되고 제거되는 메서드를 포함한다.Observer (옵저버): Subject의 상태 변화를 관찰하고 필요에 따라 특정 동작을 수행하는 객체. Subject에서 발생한 변화에 대해 업데이트를 받아 처리한다.using System.Collections.Generic;using UnityEngine;// 옵저버 인터페이스publ..

유니티 리플렉션 (Reflection)

유니티에서 리플렉션은 프로그램 실행중에 자신의 구조를 가져오거나 수정할 수 있는 기능이다. 컴파일 타임에 객체를 조작하는것이 아닌 프로그램 실행중에 정보를 얻을 수 있으며 이를 사용하여 동적 로딩, 일반화, 메소드 호출 등 다양한 작업을 수행할 수 있다. using System.Collections;using System.Collections.Generic;using System.Reflection;using Unity.VisualScripting;using UnityEngine;public class ReflectionExample : MonoBehaviour{ private int exampleInt = 10; public int exampleInt2 = 20; // Start is ..

개인 공부/C# 2024.07.19

Rider를 사용할때의 유니티 버그

유니티에서 영상 연출 효과를 위해 시네머신을 설치하고 가상 카메라를 생성하면 이러한 오류가 계속 떴다. 더블 클릭해서 들어가보면 유니티 내부 코드 버그가 발생하고 있는걸 확인할 수 있었다. 유니티 코드를 수정하기에는 좀 그래서 방법을 찾아보았다. 해결방법은 외부 스크립트 툴을 비쥬얼 스튜디오로 변경하니 해결되었다.Edit - Preference - External Tools여기서 Rider에서 Visual Studio로 변경해주니 에러가 해결되었다.왜 라이더는 안되고 비쥬얼 스튜디오만 되는지는 모르겠다...

NullReferenceException: UnityEditor.Graphs.Edge.WakeUp ()

유니티를 하다보면 꼭 한번쯤은 NullReferenceException 이 오류가 뜨게된다. 보통은 비어있는 곳을 참조하면 뜨는 오류인데 그럴 경우 오류를 더블 클릭하면 무슨 오브젝트에서 오류가 나는지 알려주고, 빈 참조가 발생하는 코드로 이동시켜 준다. 하지만 위에 사진과 같은 오류는 더블클릭해도 아무것도 뜨지않고 코드로 이동또한 시켜주지 않는다. 먼저 해결방법에 대해 말하자면 유니티를 재시작하면 해결된다. 사용자가 작성한 스크립트가 아닌 UnityEditor.Graphs, 즉 유니티 코드의 오류이다. 애니메이터를 사용하다보면 발생하는 오류라고 한다. 무시하고 진행해도 되지만 계속 빨간 글씨로 눈에 보이는게 거슬려서 찾아보니 재시작하면 해결된다는것을 알게 되었다.

유니티 FSM

FSM( Finite State Machine )이란 한정된 상태들과 그 상태 간의 전이를 정의하여 게임 오브젝트의 동작을 제어하는 패턴이다. 게임에서 오브젝트가 여러 상태를 가지고 있고, 각 상태에서는 특정 동작을 수행하거나 다른 상태로 전환할 수 있는 구조이다. 유니티에서는 Animator Controller를 생각하면 이해하기 쉽다. 한 State에 머무르며 행동을 하다 특정 조건을 만족하면 다른 State로 Transition을 하는 시스템이다. 플레이어가 있다고 가정을 해보자. 플레이어의 상태를 3가지로 구분할 수 있다.Idle : 아무것도 하지 않는 상태Move : 움직이는 상태Stun : 경직에 걸려 움직이지 못하는 상태  유니티에서 간단하게 FSM을 구현해보자. using System;us..