设计模式-1、工厂模式
1、不关心 生产过程
作用:用于 new 一些 新的对象
【1】生产 金币
【2】野怪
实战
FactoryBase.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class FactoryBase
{
public Sprite[] allSprites;
public Transform parents;
/// <summary>
/// 构造函数
/// </summary>
public FactoryBase()
{
Initiate();
}
/// <summary>
/// 加载资源
/// </summary>
public void Initiate()
{
allSprites = Resources.LoadAll<Sprite>("MultiSprite");//加载Resources/MultiSprite路径下的所有资源
parents = GameObject.FindGameObjectWithTag("MainCanvas").transform;//通过tag找到Canvas(GameObject)
}
/// <summary>
/// 动态创建 image
/// </summary>
/// <returns></returns>
public GameObject CreateImage(int index,Vector3 pos)
{
index %= allSprites.Length;
//在内存中 创建 GameObject
GameObject obj = new GameObject();//实例化obj对象
obj.transform.SetParent(parents, false);//默认以世界坐标添加节点
obj.transform.localPosition = pos;
//为obj动态加载Image组件
Image tmpImage = obj.AddComponent<Image>();
tmpImage.sprite = allSprites[index];
return obj;
}
}
CreateByFactory.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CreateByFactory : MonoBehaviour
{
FactoryBase factoryBase;
int tempCount = 0;
// Start is called before the first frame update
void Start()
{
factoryBase = new FactoryBase();//实例化FactoryBase
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
//点击键盘空格生效
tempCount++;
factoryBase.CreateImage(tempCount, Vector3.one * 50 * tempCount);
}
}
}