Unity 建造者模式(实例详解)

这篇具有很好参考价值的文章主要介绍了Unity 建造者模式(实例详解)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

说明

在Unity中,建造者模式(Builder Pattern)是一种创建型设计模式,它通过分离对象构建过程的复杂性,允许您以更灵活和可扩展的方式创建不同变体的对象。这种模式尤其适用于需要构造具有多个可选或必须组件的对象,并且希望客户端代码无需了解内部构造细节的情况下。

以下是Unity中使用建造者模式的三个实例:

实例1:构建游戏角色

假设我们正在开发一个角色扮演游戏,游戏角色由多种部件组成,如身体、头部、装备、技能等。我们可以为游戏角色创建一个Builder类来逐个添加这些部分:

// 角色接口
public interface ICharacterBuilder
{
    void SetBody(BodyPart body);
    void SetHead(HeadPart head);
    void SetEquipment(Equipment equipment);
    void SetSkills(List<Skill> skills);

    // 构建完整角色的方法
    Character Build();
}

// 具体的建造者实现
public class PlayerCharacterBuilder : ICharacterBuilder
{
    private BodyPart _body;
    private HeadPart _head;
    private Equipment _equipment;
    private List<Skill> _skills;

    public void SetBody(BodyPart body) => _body = body;
    public void SetHead(HeadPart head) => _head = head;
    public void SetEquipment(Equipment equipment) => _equipment = equipment;
    public void SetSkills(List<Skill> skills) => _skills = skills;

    public Character Build()
    {
        return new Character(_body, _head, _equipment, _skills);
    }
}

// 客户端代码调用
var builder = new PlayerCharacterBuilder();
builder.SetBody(someBody);
builder.SetHead(someHead);
builder.SetEquipment(someEquipment);
builder.SetSkills(characterSkills);
var player = builder.Build();

实例2:构建游戏场景

在Unity中,构建复杂的场景也是一个可以利用建造者模式的过程。例如,一个SceneBuilder类可以用来逐步地添加游戏对象、灯光、摄像机和其他组件到场景中:

// 场景构建器接口
public interface ISceneBuilder
{
    void AddGameObject(GameObject go);
    void SetMainCamera(Camera camera);
    void AddLight(Light light);
    Scene BuildScene();
}

// 具体场景构建器实现
public class LevelOneSceneBuilder : ISceneBuilder
{
    private List<GameObject> _gameObjects = new List<GameObject>();
    private Camera _mainCamera;
    private List<Light> _lights = new List<Light>();

    public void AddGameObject(GameObject go) => _gameObjects.Add(go);
    public void SetMainCamera(Camera camera) => _mainCamera = camera;
    public void AddLight(Light light) => _lights.Add(light);

    public Scene BuildScene()
    {
        var scene = new Scene(); // Unity 不直接支持这样创建场景,此处仅做示意
        foreach (var go in _gameObjects)
            SceneManager.MoveGameObjectToScene(go, scene);
        _mainCamera.gameObject.SetActive(true); // 设置主摄像机
        foreach (var light in _lights)
            SceneManager.MoveGameObjectToScene(light.gameObject, scene);
        return scene; // 返回构建完成的场景(实际应用中会有所不同)
    }
}

// 使用示例
var levelBuilder = new LevelOneSceneBuilder();
levelBuilder.AddGameObject(playerGO);
levelBuilder.AddGameObject-enemyGO);
levelBuilder.SetMainCamera(mainCam);
levelBuilder.AddLight(sceneLight);
var scene = levelBuilder.BuildScene();

实例3:构建UI界面

在Unity UI系统中,构建用户界面可能涉及到很多不同的元素,如面板、按钮、文本标签等。通过Builder Pattern,可以简化这个过程:

// UI构建器接口
public interface IUIMenuBuilder
{
    void AddButton(string text, Action onClick);
    void AddLabel(string labelText);
    void AddSlider(float min, float max, float value);
    UnityEngine.UI.Canvas BuildCanvas();
}

// 具体UI构建器实现
public class MainMenuBuilder : IUIMenuBuilder
{
    private CanvasGroup canvasGroup;
    private RectTransform container;
    private List<UnityEngine.UI.Button> buttons = new List<UnityEngine.UI.Button>();
    private List<UnityEngine.UI.Text> labels = new List<UnityEngine.UI.Text>();
    private List<UnityEngine.UI.Slider> sliders = new List<UnityEngine.UI.Slider>();

    public MainMenuBuilder(Canvas canvas)
    {
        canvasGroup = canvas.GetComponent<CanvasGroup>();
        container = new GameObject("Menu Container").AddComponent<RectTransform>();
        container.SetParent(canvas.transform);
    }

    public void AddButton(string text, Action onClick)
    {
        var button = Instantiate(buttonPrefab, container);
        button.GetComponentInChildren<Text>().text = text;
        button.onClick.AddListener(() => onClick());
        buttons.Add(button);
    }

    public void AddLabel(string labelText)
    {
        var label = Instantiate(labelPrefab, container);
        label.text = labelText;
        labels.Add(label);
    }

    public void AddSlider(float min, float max, float value)
    {
        var slider = Instantiate(sliderPrefab, container);
        slider.minValue = min;
        slider.maxValue = max;
        slider.value = value;
        sliders.Add(slider);
    }

    public UnityEngine.UI.Canvas BuildCanvas()
    {
        return canvasGroup.canvas;
    }
}

// 使用示例
var menuBuilder = new MainMenuBuilder(mainCanvas);
menuBuilder.AddButton("Start Game", StartGame);
menuBuilder.AddLabel("Welcome to the game!");
menuBuilder.AddSlider(0f, 100f, 50f);
var builtCanvas = menuBuilder.BuildCanvas();

请注意,以上示例中的Build方法返回的是构建的产品,在Unity中可能是具体的Unity Object或者是一个逻辑结构,实际操作时要根据Unity API的特点进行调整。

python推荐学习汇总连接:
50个开发必备的Python经典脚本(1-10)

50个开发必备的Python经典脚本(11-20)

50个开发必备的Python经典脚本(21-30)

50个开发必备的Python经典脚本(31-40)

50个开发必备的Python经典脚本(41-50)
————————————————

​最后我们放松一下眼睛
Unity 建造者模式(实例详解),unity C#设计模式详解,unity,建造者模式,游戏引擎,c#文章来源地址https://www.toymoban.com/news/detail-818685.html

到了这里,关于Unity 建造者模式(实例详解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java设计模式之建造者模式详解(Builder Pattern)

    在日常的开发工作中,我们常常需要创建一些复杂的对象。这些对象可能包含许多不同的属性,并且这些属性的初始化过程可能相当复杂。在这种情况下,建造者模式是一种非常有用的设计模式,因为它允许我们分步骤地创建复杂的对象。 概念和原理: 建造者模式(Builder

    2024年02月09日
    浏览(45)
  • 设计模式之解释器模式详解及实例

    1、解释器设计模式概述: 解释器模式(Interpreter Pattern)是一种设计模式,它主要用于描述如何构建一个解释器以解释特定的语言或表达式。该模式定义了一个文法表示和解释器的类结构,用于解释符合该文法规则的语句。解释器模式通常用于实现编程语言解释器、自定义脚

    2024年02月12日
    浏览(50)
  • Unity设计模式——原型模式

            原型模式 (Prototype)用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式其实就是 从一个对象再创建另外一个可定制的对象 ,而且不需知道任何创建的细节 。 原型类 Prototype:  ConcretePrototypel类,具体原型 客户端: 由于克隆实在太

    2024年02月07日
    浏览(42)
  • Unity设计模式之工厂模式

    一、什么是工厂模式 工厂模式是一种创建型设计模式,它提供了一种封装对象创建的方式,将对象的创建过程与使用过程分离,使得代码更加灵活、可扩展和可维护。在Unity中,工厂模式常用于创建和管理游戏对象。 对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习

    2024年02月14日
    浏览(40)
  • Unity实现设计模式——状态模式

    状态模式最核心的设计思路就是将对象的状态抽象出一个接口,然后根据它的不同状态封装其行为,这样就可以实现状态和行为的绑定,最终实现对象和状态的有效解耦。 在实际开发中一般用到FSM有限状态机的实现,GF框架中的FSM和流程控制就是基于这个原理实现的。 状态

    2024年02月08日
    浏览(34)
  • Unity设计模式之观察者模式

      在平常玩游戏的时候会遇到这种情况,以简单的Rpg举例。 勇者击杀了怪物,怪物死了,勇者摆出胜利姿势,系统提示怪物死亡 。如果按照一般逻辑可能会在怪物死亡的方法中去获取Player、Dialog,这样看上去其实也不太难。但如果需要去关联的事件很多,就需要在类中去获

    2024年02月06日
    浏览(33)
  • Unity设计模式之单例模式

    单例模式(Singleton)是设计模式中很常见的一种设计模式,目的是为了让一个类在程序运行期间有且仅有一个实例,且方便全局访问。 1、私有的构造函数。 2、含有一个该类的静态私有对象。 3、静态的公有函数或属性,方便用户创建或者获取它本身的静态私有对象。 当项目

    2023年04月09日
    浏览(71)
  • Unity实现设计模式——解释器模式

    解释器模式(Interpreter Pattern)是一种按照规定语法进行解析的模式,现实项目中用得较少。 给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。 下面用一个例子演示:将罗马文字转换为十进制的格式 解释器基类 千位数

    2024年02月07日
    浏览(51)
  • 设计模式-建造者模式

    在前面几篇文章中,已经讲解了单例模式、工厂方法模式、抽象工厂模式,创建型还剩下一个比较重要的模式-建造者模式。在理解该模式之前,我还是希望重申设计模式的初衷,即 为解决一些问题而提供的优良方案 。学习设计模式遗忘其初衷,注定无法理解其真正的深刻内

    2024年02月15日
    浏览(44)
  • 设计模式——建造者模式

    建造者模式(Builder Pattern)是一种创建型设计模式,它允许通过分步骤来构建复杂对象。该模式的核心原理是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表现形式。 在建造者模式中,通常有以下角色: 抽象建造者(Builder): 定义了创建产品

    2024年01月16日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包