Шаблон прототип

Tulenber 10 July, 2020 ⸱ Beginner ⸱ 2 min ⸱ 2019.4.2f1 ⸱

Продолжаем цикл о шаблонах и поговорим о не самом популярном в Unity среде - Прототипе.

Теория

Целью шаблона “Прототип” является создание новых объектов посредством клонирования уже существующего. Обычно это становится возможным при помощи предоставления интерфейса самим клонируемым объектом. Основная проблема этого процесса заключается в том, что клонирование извне затруднительно из-за неочевидности механизма копирования зависимых объектов или отсутствия доступа к внутренним скрытым полям. Но если сосредоточиться на названии “Прототип”, то становится очевидным, что использование префабов для создания новых объекта является не чем иным, как применением этого шаблона, так как Unity предоставляет нам возможность клонировать в том числе и внутренние поля. =)

Больше теории можно почерпнуть в этой статье или этой главе книги Роберта Нистрома.

Реализация

Основой этого шаблона в .Net является интерфейс ICloneable, который состоит из описания одного метода object Clone();.

Для примера приведём упрощённую реализацию Skeleton, отнаследованного от класса Monster, который, в свою очередь, отнаследован от MonoBehaviour. Теперь имея одного скелета, мы можем собрать свою армию нежити. =)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System;
using UnityEngine;

public class Skeleton : Monster, ICloneable
{
    //...

    // Start is called before the first frame update
    void Start()
    {
        //...
    }

    // Update is called once per frame
    void Update()
    {
        //...
    }

    public object Clone()
    {
        // Тут могла бы быть сложная логика по копированию скелета
        return Instantiate(this);
    }
}

Заключение

Это очень небольшая статья целью которой было обратить ваше внимание на взаимосвязь между паттерном и одним из основных подходов при работе с Unity. Пока! =)



Privacy policyCookie policyTerms of service
Tulenber 2020