博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity3D - 设计模式 - 工厂模式
阅读量:6906 次
发布时间:2019-06-27

本文共 2446 字,大约阅读时间需要 8 分钟。

工厂模式:以食物生产为例

1. 一个生产食物的工厂(此项 需要建立两个类:食物基类<Food>,工厂类<Factory>)

2. 可以生产不同的食物(此项 建立食物的具体子类,均继承食物的基类)

3. 运行程序生成不同的食物(此项 建立程序运行的主类 继承鱼MonoBehaviour,创建工厂类变量、食物基类变量,然后再Start方法里给食物基类变量赋值<通过传入参数的不同 将父类指向一个子类>)

 

using System.Collections;using System.Collections.Generic;using UnityEngine;/// /// 测试工厂模式/// // 创建实物的基类public class Food{    public virtual void ShowMe ()    {        Debug.Log ("这是实物基类");    }}// 西红柿类public class TomatoFood:Food{    public override void ShowMe ()    {        // 掉父类方法        base.ShowMe ();        Debug.Log ("TomatoFood");    }}// 鸡蛋public class EggFood:Food{    public override void ShowMe ()    {        base.ShowMe ();        Debug.Log ("EggFood");    }}public class Factory{    public Food MakeFood (string name)    {        if (name == "egg") {            return new EggFood ();        } else if (name == "tomato") {            return new TomatoFood ();        }        return null;    }}public class Main : MonoBehaviour{    Factory factory = new Factory ();    Food food1;    Food food2;    public void Start ()    {        food1 = factory.MakeFood ("egg");        food1.ShowMe ();        food2 = factory.MakeFood ("tomato");        food2.ShowMe ();    }}

 以Resources加载游戏物体为例

using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;public class SpriteFactory : MonoBehaviour{    public Object[] allSprit;    private int allIndex = 0;    private Transform canvasTransform;    ///     /// 加载 Resources 文件夹下的资源    ///     void Start ()    {        canvasTransform = GameObject.Find ("Canvas").transform;        LoadSprite ("Number");    }    void Update ()    {        if (Input.GetKeyDown (KeyCode.A)) {            allIndex++;            GameObject tempObj = GetImage (allIndex);            tempObj.transform.parent = canvasTransform;            tempObj.transform.position = new Vector3 (allIndex * 50, 0, 0);        }    }    ///     /// 加载Resources文件夹下指定名称的资源    ///     /// 指定名称    public void LoadSprite (string name)    {        allSprit = Resources.LoadAll (name);    }    ///     /// 加载指定索引的资源,并把该资源显示出来    ///     /// 
返回一个新生成的物体,该物体显式刚刚加载的资源
/// 给出要加载资源的一个索引 public GameObject GetImage (int index) { GameObject tempObj = new GameObject ("tempObj"); Image tempImage = tempObj.AddComponent (); tempImage.sprite = allSprit [index] as Sprite; return tempObj; }}

 

转载于:https://www.cnblogs.com/kao-la-bao-bei/p/9162615.html

你可能感兴趣的文章
CentOS6.8下安装Docker
查看>>
JavaScript HTML Handlebars Template
查看>>
java.lang.NumberFormatException 错误及解决办法
查看>>
python:大量参数如何传递
查看>>
curl 跨域请求回来的json数据带有BOM 字符\ufeff,掉诡异的BOM \ufeff
查看>>
Javascript下的AJAX
查看>>
<c:out>标签中的escapeXML属性
查看>>
Ado.Net Helper
查看>>
OpenWrt Web界面修改及功能实现实例说明
查看>>
java内存溢出的解决思路
查看>>
hibernate(六)一对一映射
查看>>
map遍历
查看>>
android结合Jenkins使用V2签名
查看>>
栏目添加缩略图
查看>>
[BZOJ 1221][HNOI2001]软件开发(费用流)
查看>>
用户注册流程分析
查看>>
6.1Python数据处理篇之pandas学习系列(一)认识pandas
查看>>
搞小程序遇到的问题及解决方案(持续更新)
查看>>
jquery ui tabs
查看>>
个人作业(alpha)
查看>>