유니티 C# 코드 컨벤션
Unity/Study2024. 6. 15. 18:31유니티 C# 코드 컨벤션

코드 컨벤션한 프로젝트에서 여러 명이서 같이 작업을 할 때 준수해야 하는 명확한 규칙 또는 지침 세트를 제공하는 가이드이다.코드 컨벤션 규칙을 준수하면 서로 작업한 코딩을 읽고, 관리하는 유지보수에 매우 용이하다.회사의 프로젝트의 코드 컨벤션은 약간의 차이가 있긴 하지만, MSDN에서 제공하는 일반적인 C# 규칙을 따르는 게 기본이다. .NET 코딩 규칙 - C#C#에서 일반적으로 사용되는 코딩 규칙에 관해 알아봅니다. 코딩 규칙은 코드를 일관되게 표시하고 코드 복사, 변경 및 유지 관리를 용이하게 합니다. 이 문서에는 문서 리포지토리 코딩 지침도learn.microsoft.com이 문서는 부트 캠프를 진행하면서 팀원들과 유니티를 사용하면서 정한 코드 컨벤션을 정리한 문서이므로, 이 코드 컨벤션이 무조건..

Update 사용 없이 Coroutine으로 게임 진행 구현
Unity/Study2024. 6. 14. 19:15Update 사용 없이 Coroutine으로 게임 진행 구현

기술 소개유니티를 Monobehaviour 클래스에 생명주기(Life Cycle) 중에 가장 많이 쓰이는 Update 클래스가 존재한다.Update 클래스는 프레임 당 한번 호출되는 클래스로 프레임 업데이트를 위한 주요 작업 함수이다.해당 클래스를 잘 제어하지 못하고 Update 클래스에 의존만 한다면 프레임 드롭같이 최적화 문제가 발생할 수도 있다.그래서 P.P.R 프로젝트에서 전반적인 게임 플레이를 Update 사용 없이 Coroutine으로 진행 루틴을 만들려고 한다.기술 설명YieldCache.cs : 코루틴 최적화/// Boxing 발생하지 않게 해주며, 의도치 않게 가비지가 생성되는 것을 방지class FloatComparer : IEqualityComparer{ bool IEqualit..

유니티 실시간 딜레이 계산
Unity/Study2024. 1. 24. 21:38유니티 실시간 딜레이 계산

구현 소개유니티 에디터 플레이 모드가 아니더라도 저장된 데이터로 실시간 딜레이 구현하기기능 구현DateTimeDateTime timerStart = DateTime.Now;DateTime timerEnd = timerStart.Add(new TimeSpan(0, 10, 0));DateTime.Now를 통해 현재 시간을 확보 TimeSpan으로 10초의 딜레이 생성Delay Coroutinewhile (true){ if (totalSecondsLeft > 1) { if (totalSecondsLeft >= 60) { TimeSpan ts = TimeSpan.FromSeconds(totalSecondsLeft); timeCheckTe..

유니티 로그라이크 방 타입에 맞는 오브젝트 생성
Unity/Study2023. 12. 21. 21:08유니티 로그라이크 방 타입에 맞는 오브젝트 생성

로그라이크 방 오브젝트 생성방이 생성될 때 해당 방 타입에 맞는 오브젝트 생성 [아이템, 장애물, 적]기능 구현RoomBlueprint.cs[CreateAssetMenu(fileName = "RoomBlueprint", menuName = "Blueprint/Room")]public class RoomBlueprint : ScriptableObject{ [SerializeField] private Sprite floor; [SerializeField] private bool isReward; [Header("Object Position")] [SerializeField] private Vector2 rewardPosition; [SerializeField] private Lis..

유니티 로그라이크 다음 방으로 이동
Unity/Study2023. 12. 19. 00:42유니티 로그라이크 다음 방으로 이동

기능 구현MoveToDesignativeRoom/// /// 방에 진입할 시, 좌표 설정 및 문 활성화 체크/// /// 들어간 방향/// 카메라 움직임 딜레이private IEnumerator MoveToDesignativeRoom(Vector2Int MoveDirection){ int x = _currentRoom.Coordinate.x + MoveDirection.y; int y = _currentRoom.Coordinate.y + MoveDirection.x; _currentRoom = _roomArray[x, y]; _currentRoom.OpenActivatedDoor(); Main.Game.Player.transform.position += new Vector3(M..

유니티 로그라이크 문으로 방 연결하기
Unity/Study2023. 12. 18. 17:48유니티 로그라이크 문으로 방 연결하기

📌 연결된 문 생성 📄 Dungeon.cs private void CreateDungeon(){ // 방 생성을 위한 좌표 리스트 List alternativeRoomList = new(); List hasBeenRemoveRoomList = new(); // 특수 방 리스트 List specialRoomList = new(); ... ... ... LinkDoors(); // 방 문이 1개인 경우 => 특수 방으로 추가 foreach (Room room in _roomArray) { if (room != null && room.ActiveDoorCount == 1 && room != currentRoom) {..

유니티 로그라이크 방 생성
Unity/Study2023. 12. 15. 20:50유니티 로그라이크 방 생성

기능 구현GameScene.cspublic class GameScene : MonoBehaviour{ #region Field [SerializeField] private int roomAmount; private Room _roomPrefab; private Room[,] _roomArray = new Room[20, 20]; #endregion #region Init private void Start() { Main.Resource.Initialize(); // #1. 방 생성 _roomPrefab = Main.Resource.GetObject("Room").GetComponent(); CreateLevel(..

유니티 Json 데이터 관리
Unity/Study2023. 12. 12. 21:11유니티 Json 데이터 관리

기능 소개유니티에는 여러 데이터 저장 방식 중, Json으로 데이터를 저장하는 기능을 구현하도록 한다기능 구현DataManager.cspublic class DataManager{ public Dictionary Items = new(); public void Initialize() { Items = LoadJson("ItemData").MakeData(); } private TLoader LoadJson(string path) where TLoader : ILoadData { TextAsset textAsset = Main.Resource.Load(path); return JsonConvert.DeserializeObject(text..

유니티 Stat Modifier
Unity/Study2023. 12. 11. 21:14유니티 Stat Modifier

기능 소개단순 Stat 값을 더하고 빼는게 아닌 Stat Modifier를 통한 관리더티플래그(Dirty Flag) 디자인 패턴 사용기능 구현StatModifierpublic enum StatModType{ Flat, PercentAdd, PercentMult,}public class StatModifier{ public readonly float Value; public readonly StatModType Type; public readonly int Order; public readonly object Source; public StatModifier(float value, StatModType type, int order, object source) ..

유니티 Manager System
Unity/Study2023. 12. 5. 20:19유니티 Manager System

기능 소개플레이어 정보를 관리하기 위해 Manager System 구축Managers를 통해 각 담당 매니저를 인스턴스 하는 클래스 구현 [제너릭 싱글톤]기능 구현제너릭 싱글톤public abstract class SingletonBehaviour : MonoBehaviour where T : SingletonBehaviour{ private static T instance = null; public static T Instance { get { return instance; } } protected virtual void Awake() { if (instance != null) { Debug.LogError(string.Format("허..

image