무기클래스 설계하기
인터페이스를 제공하는 이유는 재사용성 때문이다.
무기 클래스에 기본적인 무기 종류들을 넣고 각각의 무기 클래스에 세부적인 딜레이라던지 총알 갯수라던지 사거리라던지
유니티는 Depth가 얕다.
많은 빌드를 거쳐 만들어지는 파일인 만큼 복잡도가 매우 높기 때문에 메모리 해제가 잘 안되는 현상이 발생한다.
이런 문제가 있어, 유니티를 설계를 하거나 클래스를 만들 때, 상속이라는 개념을 거의 사용하지 않는다.
1~2단계 이상 상속이 발생할 경우 복잡도가 굉장히 높다고 보면 된다. (거의 사용하지 않는 개념)
싱글턴을 사용해서 인스턴스를 공유하고 있는 클래스는 사실상 메모리해제가 안된다고 보면 된다.
모노를 상속받아서 쓰는 클래스는 메모리해제가 잘 되는 편.
유니티가 왜 컴포넌트 방식을 권장하는지 알 수 있다.
하지만 그런 방식으로 만들면 큰 프로젝트에서 클래스마다 컴포넌트를 다 끼워맞춰야 한다.
따라서 대형프로젝트로 갈 수록 MonoBehaviour만 상속받아서 컴포넌트 방식으로 사용하는 경우는 드물다.
기본적으로 실무에서 뛰는 사람들은 C++도 같이 다루던 사람들이기 때문에 일반 클래스로 만들어서 상속받는
최소 1번은 모노를 무조건 상속받기 때문에 모노를 상속받는 객체 하나를 무조건 만들어야 한다.
이를 메인프레임이라고 한다. 일반적으로 메인 카메라에 붙인다. (메인카메라는 대부분 1번은 실행되기 때문)
Hierachy는 맨 위부터 시퀀스적으로 실행되기 때문에 메인카메라가 아니라면 맨 위에있는 GameObject에 메인프레임을 삽입하면 된다.
메인프레임 안에 싱글턴이 있고, 그를 게임매니저라 부른다.
게임매니저는 메시지를 받을 수 있는 구조로 되어있어야 한다.
클래스, 객체이름을 문자열로 받아서 핸들링하는 문법을 리플렉션(Reflection) 이라고 한다.
프로그램을 설계할 때는 항상 메모리에 대한 데이터 구조를 먼저 생각해야 한다.
기획자가 데이터 정의까지 해줘야 한다.
using JetBrains.Annotations;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using UnityEngine.Internal;
public class Weapon : MonoBehaviour
{
//Custom enum for weapon types
public enum WEAPON_TYPE {Punch = 0;, Gun = 1};
//Weapon type
public WEAPON_TYPE Type = WEAPON_TYPE.Punch;
//Damage this weapon causes
public float Damage = 0.0f;
//Range of weapon (linear distance outwards from camera) measured in world units
public float Range = 1.0f;
//Amount of ammo remaining (-1 = infinite)
public int Ammo = -1;
//Recovery delay
//Amount of time in seconds before weapon can be used again
public float RecoveryDelay = 0.0f;
//Has this weapon been collected?
public bool Collected = false;
//Is this weapon currently equipped on player
public bool IsEquipped = false;
//Can this weapon be fired
public bool CanFire = true;
//Next weapon in cycle
public Weapon NextWeapon = null;
}
Object -> Behaviour -> Component -> MonoBehaviour -> Weapon -> Gun / Punch
Unity - Scripting API: Object (unity3d.com)
Unity - Scripting API: Object
Success! Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable. Close
docs.unity3d.com
Object는 엔진 Core (최상단)에 위치한다.
Object 단계에서 상속받는 메소드와 연산자들이다.