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();
}
}
}