UnityでCommandパターンを使用する

2020年7月29日  2020年10月3日 
デザインパターンの中のCommandパターンを勉強しました。
このCommandパターンは結構使える場面が多そうです。
これを機会にデザインパターンを全部勉強し直そうかな。

UnityでCommandパターンを使用する

まずはCommandのインターフェースを定義します。

public interface ICommand
{
    void Execute();
    void Undo();
}

Commandのインターフェースを実装します。
今回は色を変更する処理を追加しました。
using UnityEngine;

public class PaintCommand : ICommand
{
    private GameObject target;
    private Color color;
    private Color preColor;


    public PaintCommand(GameObject go, Color color)
    {
        this.target = go;
        this.color = color;
    }

    public void Execute()
    {
        this.preColor = this.target.GetComponent<Renderer>().material.color;
        this.target.GetComponent<Renderer>().material.color = this.color;
    }

    public void Undo()
    {
        this.target.GetComponent<Renderer>().material.color = this.preColor;
    }
}

Commandは下記のように呼び出します。
処理を登録していけば簡単にやり直しも実装することができます。

using System.Collections.Generic;
using UnityEngine;

public class Sample : MonoBehaviour
{
    [SerializeField] private GameObject target;
    private Stack<ICommand> commandList = new Stack<ICommand>();

    public void ClickPlay()
    {
        Color newColor = new Color(Random.Range(0.0f, 1.0f),
                                   Random.Range(0.0f, 1.0f),
                                   Random.Range(0.0f, 1.0f));
        ICommand command = new PaintCommand(target, newColor);
        command.Execute();
        this.commandList.Push(command);
    }

    public void ClickUndo()
    {
        if (this.commandList.Count != 0)
        {
            ICommand command = this.commandList.Pop();
            command.Undo();
        }
    }
}

パズルゲームとかに使いやすそうですね。
機会があったら使ってみたいです。

環境

Windows 10 Pro
Unity 2019.4

ー記事をシェアするー
B!
タグ

コメント

このブログを検索

自己紹介

自分の写真
yayao
Unityを使って、モバイルゲームを作っています。
人気の投稿