Unity 게임 디자인 모드 (3) 원형 모드 (Prototype Pattern)

5541 단어 u3d 디자인 모드
원형 모델 은 말 그대로 대상 의 원형 복 제 를 통 해 만들어 진 새로운 대상 이다.원형 모델 은 게임 에서 매우 많이 활용 된다.괴물, 한 장의 지도 에 많은 괴물 이 있 습 니 다. 이 괴물 들 은 일반적으로 공통성 을 가지 고 있 습 니 다. 같은 괴물 은 같은 모델, 같은 공격 방식 등 을 가 질 수 있 습 니 다.서로 다른 유형의 괴물 이라도 공 격 력, 혈 액량 등 많은 공통점 을 가지 고 있다.이 괴물 들 은 바로 기본 괴물 을 부본 으로 복제 한 서브 물체 이다.예 를 들 어 한 장의 지도 에 야수, 좀 비, 인간 형 적 이 있다 면 우 리 는 이 괴물 들 을 몬스터 라 고 통칭 한다. 모든 괴물 의 형 태 는 각기 다 르 지만 모두 몬스터 가 부본 으로 복 제 된 것 이다.
        다음은 무기 생 성 기 를 예 로 들 면 어떤 게임 은 옵션 기능 을 가지 고 옵션 후의 무 기 는 원래 의 속성 이 변 하지 않 는 토대 에서 새로운 속성 을 추가 하 는데 이것 도 원형 모델 의 응용 이다.
    /// 
    ///           ,              ,  Clone     
    /// 
    public abstract class Sword
    {
        protected string Name;
        protected int Atk;
        protected int Speed;
        public Sword()
        {
            Name =_Name;
            Atk =_Atk;
            Speed =_Speed;
        }
        public abstract Sword Clone();
        public abstract void ShowInfo();
    }

우 리 는 먼저 추상 류 를 무기 의 부류 로 정의 한다. 추상 류 무 기 는 모든 무기 의 공 통 된 속성 을 가진다. 또한 추상 류 무 기 는 반드시 클론 의 추상 적 인 방법 을 가지 고 새로운 무 기 를 생 성하 고 다른 방법 은 수요 에 따라 스스로 확대 할 수 있다.
    /// 
    ///         ,           ,  Clone            
    /// 
    public class SacredSword : Sword
    {
        private int _heal;
        public int Heal
        {
            get { return _heal; }
            set { _heal = value; }
        }
        public override Sword Clone()
        {
            SacredSword sacredSword = new SacredSword();
            sacredSword.Heal = Random.Range(5, 20);
            return sacredSword;
        }
        public override void ShowInfo()
        {
            Debug.Log("   " + Name + ":" + "   :" + Atk + "     :" + Speed + "     :" + Heal + "  ");
        }
    }

그 다음 에 우 리 는 하위 무 기 를 정의 했다. 하위 무 기 는 기본 무 기 를 계승 하고 각종 속성 을 스스로 확대 할 수 있다. 또한 하위 무 기 는 클론 방법 을 보완 하고 수요 에 따라 새로운 무 기 를 생산 할 수 있다.
    /// 
    ///      ,     Clone       
    /// 
    /// 
    /// 
    public Sword SwordSpawner(Sword sword)
    {
        return sword.Clone();
    }

이 코드 는 클론 으로 되 돌아 가 는 방법 으로 생 성 된 새로운 무기 입 니 다.
전체 코드:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class Flyweight : MonoBehaviour
{
    private static string _Name;//      
    private static int _Atk;//       
    private static int _Speed;//        
    private SacredSword sacredSword;//    1
    private WickedSword wickedSword;//    2
    private List SwordList;//    
    /// 
    ///           ,              ,  Clone     
    /// 
    public abstract class Sword
    {
        protected string Name;
        protected int Atk;
        protected int Speed;
        public Sword()
        {
            Name =_Name;
            Atk =_Atk;
            Speed =_Speed;
        }
        public abstract Sword Clone();
        public abstract void ShowInfo();
    }
    /// 
    ///         ,           ,  Clone            
    /// 
    public class SacredSword : Sword
    {
        private int _heal;
        public int Heal
        {
            get { return _heal; }
            set { _heal = value; }
        }
        public override Sword Clone()
        {
            SacredSword sacredSword = new SacredSword();
            sacredSword.Heal = Random.Range(5, 20);
            return sacredSword;
        }
        public override void ShowInfo()
        {
            Debug.Log("   " + Name + ":" + "   :" + Atk + "     :" + Speed + "     :" + Heal + "  ");
        }
    }

    public class WickedSword : Sword
    {
        private int _suck;

        public int Suck
        {
            get { return _suck; }
            set { _suck = value; }
        }
        public override Sword Clone()
        {
            WickedSword wickedSword = new WickedSword();
            wickedSword.Suck = Random.Range(1, 6);
            return wickedSword;
        }
        public override void ShowInfo()
        {
            Debug.Log("   " + Name + ":" + "   :" + Atk + "     :" + Speed + "   :" +Suck+ "%");
        }
    }
    /// 
    ///      ,     Clone       
    /// 
    /// 
    /// 
    public Sword SwordSpawner(Sword sword)
    {
        return sword.Clone();
    }
    /// 
    ///         
    /// 
    /// 
    /// 
    /// 
    public void SetValue(string name,int atk,int speed)
    {
        _Name = name;
        _Atk = atk;
        _Speed = speed;
    }
    void Start()
    {
        SwordList = new List();//       
        sacredSword = new SacredSword();//     1
        wickedSword = new WickedSword();//     2
        SetValue("  ", 10, 5);        
    }
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            SwordList.Add(SwordSpawner(sacredSword));
        }
        if (Input.GetKeyDown(KeyCode.B))
        {
            SwordList.Add(SwordSpawner(wickedSword));
        }
        if (Input.GetKeyDown(KeyCode.Space))
        {
            foreach (Sword sword in SwordList)
            {
                sword.ShowInfo();
            }

            SwordList.Clear();
        }
    }
}

좋은 웹페이지 즐겨찾기