분류 전체보기
-
24년 5월 25일 TIL공부 기록 2024. 5. 25. 20:58
싱글턴. 게임에서 한 개만 만들라는 게 아니다. 어떠한 클래스의 한 개의 '객체'만을 만들어서 사용 하는 것이다. 이걸 이제야 이해 했다..! 클래스를 싱글턴 패턴으로 만들었는데 여러개의 객체를 생성 하면 컴퓨터가 데이터를 찾기 힘들다. 그게 이 소룡이였다. 싱글턴인 클래스가 여러개인건 상관이 없다. 속이 후련하군. 작성 방법public static GameManager Instance; 라는 코드로 static인 클래스형을 선언 하고 Awake에서 초기화를 해준다. private void Awake() { if (Instance != null) Destroy(gameObject); Instance = this; } 객체는 하나만 있어야 하니까 Instance가 null이 아닐 ..
-
TopDown Shooting Game / Animation 기능 만들기게임 개발기록 2024. 5. 25. 15:39
움직이거나 공격 하고 맞을 때 Animation 기능이 나오게 해보자. 먼저 Animation을 작업 할 때 우리는 SetBool(" Run", true) 이런 식으로 사용 해서 특정 애니메이션이 작동 되게 했었다. 하지만 여기서 사용 되는 문자열 자체가 비용이 크고 연산이 느리기에 효율적이라고 보기 어렵다. 그래서 StringToHash 를 사용해서 해시값으로 변경을 한 후에 사용을 하는 것이 좋다. Animator 작업 할 때 자주 사용 된다. StringToHash란 문자열을 해쉬값(Hash Value)으로 바꿔주는 함수다. 이 함수는 문자열을 입력으로 받아 고정된 길이의 고유한 해시 값을 출력한다. 그로 인해 데이터가 겹칠 일이 없어서 거의 충돌이 일어나지 않는다. 똑같은 해쉬값이 나온다는 걸 충..
-
-
-
TopDownShooting Game / 오브젝트풀을 이용한 화살 만들기게임 개발기록 2024. 5. 24. 08:43
화살 같은 오브젝트는 생성과 파괴를 반복 한다. 이것은 각각 Instantiate(생성), Destroy(파괴)를 사용해 하게 되는데 이 함수들은 매우 큰비용을 사용 하게 된다. 그러므로 화살을 쏠 때마다 이 기능들을 사용하게 되면 프로그래밍에 있어서 비효율적으로 할 수밖에 없게 된다. 그래서 만들어진 게 ObjectPool이라고 할 수가 있다. (투터님은 Instantiate라는 함수를 보고 끔직하다. 라고 표현 하셨다.) 이 오브젝트 풀은 화살 같은 생성과 파괴를 반복 하는 것에 대해서 미리 지정해둔 갯수를 만들어내고 화살을 쏠 때 만들어 둔 거를 쏘고 다시 돌려받는 형식이다. 그리고 이러한 방식으로 말고도 쏠 때 만들고, 부족하면 만들고 등등 다른 방식으로도 사용이 가능하다. 그리고 만약 천 개..
-
24년 5월 23일 TIL공부 기록 2024. 5. 23. 10:23
as가 가능한 이유, 상속 이유와 비슷. as는 형변환. ( 자료형변환들이랑 같은 거) AttackSO형으로 객체를 만들었으면 자식클래스도 담을 수 있음. 그렇기에 as가 가능함. 형 변환이 실패 하면 null이 뜨기 때문에 if (rangedAttackSO == null) return; 같은 null 체크를 해주는 게 필요함. as는 형변환, AttackSO 형을 RangedAttackSO로 바꾸는 것임. 변수에 값이 RangedAttackSO면 형변환 해도 가능. RangedAttackSO가 아니라 일반 AttackSO면 형변환 시 값을 넣을 수 없음. as말고도 일반적인 방법으로 형변환을 할 수가 있음. 일반적인 캐스트 연산자 ()와 달리, 예외를 던지지 않아 안전하게 형 변환 결과를 검사할 ..
-
TopDown Shooting Game / 화살 쏘기 기능 만들기게임 개발기록 2024. 5. 22. 14:55
마우스 클릭 하면 화살이 나가게 해준다. 마우스 버튼을 누르면 화살이 생성이 되고, 그 화살은 클릭 된 방향으로 나아간다. 먼저 OnFire를 만들어 주자. 우린 bool 자료형을 하나 만들고 버튼이 클릭 돼있으면 true가 되게 하고 공격쿨타임이 아닐 때 화살이 생성 되게 해준다. public void OnFire(InputValue value) { IsAttacking = value.isPressed; } 이렇게 코드를 작성 해주면 마우스가 눌리고 있거나 눌렸을 때 IsAttacking 변수가 true가 된다. 변수는 TopDownController에 선언 돼있음. 그리고 TopDownController 에서 화살을 생성 하는 코드를 작성 한다. pri..
-
24년 5월 22일 TIL공부 기록 2024. 5. 22. 13:02
[System.Serializable] 클래스와 구조체, 열거형을 직렬화 해주는 기능이다. SO는 참조형으로 new를 통해 새로 객체를 만들어도 SO가 담겨 있는 클래스는 같은 SO를 참조를 해서 의도치 않은 데이터 변경이 일어날 수 있다. Instantiate를 통해서 새로 만들어주고 SO를 바꿔주는 작업을 해줘서 이러한 부분을 보완 해줘야 한다. Corutine 병렬 처리 해주게 보이게끔 할 수 있는 기능이다. 실행에 처리와 처리 사이에 대기시간을 넣을 수 있다. 코루틴의 yield return은 일반적인 return이 아니라 중단느낌이다. 코루틴 중에 중단이 됐을 때 기다렸다가 다시 코루틴이 되는 게 아니라 다음 처리로 넘어가게 된다. 이걸 활용을 해서 코루틴 2개나 여러 개를 동시에 사용을..