본문 바로가기

분류 전체보기

(50)
MetaShopEditor
비동기 예시 using UnityEngine; using System.Threading.Tasks; public class TaskTest : MonoBehaviour { void Start() { Test(); } public async Task FetchDataAsync() { // 비동기 작업 시뮬레이션을 위해 1초 대기 await Task.Delay(5000); // 비동기 작업 결과 반환 return "데이터 결과"; } private void Test() { PerformAsyncOperation(); } public async void PerformAsyncOperation() { A(); B(); C(); // 비동기 함수 호출 string result = await FetchDataAsync(); D..
웹소켓,TCP,패킷 -웹소켓 웹소켓은 TCP 기반의 양방향 통신 프로토콜로, 서버와 클라이언트 간의 실시간 양방향 통신을 제공합니다. HTTP와 마찬가지로 웹 브라우저에서 사용되며, 웹소켓 연결을 위한 별도의 포트 번호(일반적으로 80 또는 443)를 사용합니다. 웹소켓은 다음과 같은 특징을 가지고 있습니다. 웹소켓은 상태유지(Stateful) 프로토콜입니다. 클라이언트와 서버 간의 연결을 유지하면서 양방향 통신을 수행할 수 있습니다. 따라서 HTTP와 달리 클라이언트와 서버 간의 상태 정보를 유지하고, 언제든지 통신을 시작하거나 중지할 수 있습니다. 웹소켓은 텍스트와 이진 데이터를 모두 전송할 수 있습니다. HTTP와 달리, 웹소켓은 텍스트와 이진 데이터를 모두 전송할 수 있습니다. 이를 통해 클라이언트와 서버 간의 다양..
클래스, 객체, 인스턴스 클래스(Class)는 객체(Object)를 만들기 위한 일종의 설계도입니다. 즉, 클래스는 객체를 만들기 위한 필드(속성)와 메서드(기능) 등의 특성을 정의하고, 이를 바탕으로 객체를 생성할 수 있도록 합니다. 객체(Object)는 이러한 클래스를 기반으로 실제로 만들어진 것으로, 메모리상에 할당된 실체를 의미합니다. 객체는 클래스를 통해 만들어지는 실체로, 여러 개의 객체를 만들 수 있습니다. 인스턴스(Instance)는 객체를 생성한 후, 이를 사용할 수 있도록 메모리에 할당한 상태를 의미합니다. 즉, 클래스를 기반으로 만들어진 객체가 실제로 메모리에 할당되어 사용 가능한 상태가 되었다면, 이를 해당 클래스의 인스턴스라고 합니다. 간단하게 예를 들면, 붕어빵틀은 클래스이고, 붕어빵은 객체입니다. 이후..
프로그램 패러다임 객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 프로그램을 객체라는 개별적인 단위로 분해하고, 이 객체들 간의 상호작용을 통해 프로그램을 구현하는 프로그래밍 패러다임입니다. 쉽게 예를 들자면, 슈퍼마켓에서 물건을 살 때, 물건의 이름, 가격, 수량 등의 정보를 담고 있는 제품 카트를 생각해볼 수 있습니다. 이 카트는 제품의 정보를 캡슐화하고 있으며, 제품 카트는 구매자가 물건을 추가하거나 제거하거나 결제할 수 있는 메서드를 가지고 있습니다. 객체 지향 프로그래밍에서는 이러한 객체를 모델링하고, 객체 간의 관계를 나타내는 클래스를 정의합니다. 이렇게 객체를 모델링하면, 코드의 가독성, 재사용성, 유지보수성이 향상되며, 프로그램의 확장성도 좋아집니다. 예를 들어, 슈퍼마켓..
단일 책임원칙(Single-responsibility principle) 단일 책임원칙(Single-responsibility principle)은 객체 지향 프로그래밍에서 중요한 디자인 원칙 중 하나입니다. 이 원칙은 하나의 클래스는 하나의 책임(Responsibility)만을 가져야 한다는 것을 의미합니다. 클래스는 하나의 책임만을 가지며, 그 책임을 완전히 수행해야 합니다. 이를테면, 게임에서 플레이어(Player) 클래스는 게임 내에서 플레이어와 관련된 기능만을 담당해야 하며, 다른 역할을 수행하지 않아야 합니다. 예를 들어, 플레이어 클래스가 게임 내 오디오(Audio) 관련 기능까지 담당한다면, 이는 단일 책임 원칙을 위반하는 것입니다. 이 경우, Audio 클래스를 만들어서 플레이어 클래스에서 Audio 클래스를 사용하도록 분리하는 것이 좋습니다. 이러한 원칙을 ..
어트리뷰트(Attribute) 어트리뷰트(Attribute)는 코드에 메타데이터를 추가하는 방법입니다. 메타데이터란, 프로그램의 구조, 컴포넌트, 함수 등과 같은 정보를 뜻합니다. 어트리뷰트는 이러한 메타데이터를 지정하는 역할을 하며, 이 정보를 기반으로 컴파일러나 런타임 시스템에서 특별한 작업을 수행할 수 있습니다. 예를 들어, [Serializable] 어트리뷰트는 C#에서 사용되며, 클래스나 구조체가 직렬화(Serialization) 가능한 형태로 변환되도록 합니다. 직렬화란, 객체의 상태를 저장하거나 전송하기 위해 객체를 바이트 스트림 형태로 변환하는 것을 말합니다. [RequireComponent] 어트리뷰트는 Unity에서 사용되며, MonoBehaviour 클래스를 상속하는 스크립트의 경우 해당 스크립트가 사용될 때 필요..
Unity 디자인 패턴 https://blog.unity.com/games/level-up-your-code-with-game-programming-patterns
유니티(Unity) Netcode Relay 주의할 점 1.자신의 플레이어 오브젝트에 붙어 있는 스크립트만 작동되는 것이아닌 모든 플레이어 오브젝트의 스크립트는 전부 작동한다. 자신의 입장에서는 타 플레이어의 프리팹 또한 자신의 씬 안에 있는 오브젝트 중 하나 이기 때문이다. 쉽게 말해, 모든 것이 로컬에서 돌아갈 때와 같다. 다만 서버를 통해 다른 플레이어의 데이터 값이 로컬 오브젝트에 입혀지게 된다. 예를 들어, 내 기준에서 다른 플레이어를 때린다고해도 이 때린 데이터를 상대방에게 공유하지 않는 이상 그 플레이어는 전혀 영향을 받지 않는다. 2. 기본적으로 호스트 위치 기준으로 플레이어가 spawn된다. 씬 이동시 주의할 것. 웬만하면 특별한 경우를 제외하고는 씬을 바뀌는 방식이 아닌 포지션 값만을 바꾸는 것을 추천한다. 엄청 애먹는다. 물론 씬 이동이 ..
유니티(Unity) 플레이어 벽 뚫림 방지 해당 스크립트는 벽 오브젝트에 넣는다. 일반적으로 플레이어 속도가 빠를 때 뚫고 지나가버리는 현상이 나타나므로 벽에 부딪쳤을 때, 플레이어 속도를 제어하는 방식으로 뚫림현상을 막는다. using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerStop_Wall : MonoBehaviour { private int trigger = 0; void OnCollisionEnter(Collision other) { Debug.Log("콜리전enter 작동중"); if(trigger == 0) { if (other.collider.CompareTag("Player")) { other.transfor..