前言
游戏需要实现一个点击输入图片的需求,输入12个后进行判断,如果和答案顺序不符合就清空重新输入。游戏效果如图所示。
对象池的应用主要是因为Unity实例和销毁游戏对象非常消耗性能,所以把需要经常实例销毁的游戏对象隐藏存起来,而不是直接销毁,然后在需要使用的时候优先从池子里把脏数据(隐藏后未经处理的游戏对象)清洗使用,如果池子里不够再创建新的游戏对象。
代码接收点击事件的类
using UnityEngine;
using UnityEngine.EventSystems;
public enum InputType
{
Dian,
Xian
}
public class PeidianshiInput : MonoBehaviour,IPointerClickHandler
{
public InputType type;
public void OnPointerClick(PointerEventData eventData)
{
PeidianshiInputManager.instance.Show(type);
}
}
对象池类
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class PeidianshiInputManager : MonoBehaviour
{
public static PeidianshiInputManager instance;
private bool isGameOver;
private int length = 0;//记录输入的长度
public Transform parent;
public Image dian, xian;//生成的两种对象
public float dis = 14;//生成对象的间隔距离
private const int inputCount = 12;
private Image i;//临时保存image
//两种类型的数据
private int dianPoolCount;
private List dianPool = new List();
private int xianPoolCount;
private List xianPool = new List();
private List answerList = new List();
private List rightAnswerList = new List();
void Start()
{
if (instance == null)
instance = this;
//初始化答案
rightAnswerList.Add(InputType.Xian);
rightAnswerList.Add(InputType.Xian);
rightAnswerList.Add(InputType.Dian);
rightAnswerList.Add(InputType.Dian);
rightAnswerList.Add(InputType.Dian);
rightAnswerList.Add(InputType.Dian);
rightAnswerList.Add(InputType.Xian);
rightAnswerList.Add(InputType.Xian);
rightAnswerList.Add(InputType.Xian);
rightAnswerList.Add(InputType.Xian);
rightAnswerList.Add(InputType.Dian);
rightAnswerList.Add(InputType.Dian);
}
///
/// 对象创建和储存
///
///
public void Show(InputType type)
{
if (isGameOver)
return;
if(length == 0)
{
switch (type)
{
case InputType.Dian:
if(dianPoolCount > 0)
{
RefresPoolGO(type);
}
else
{
i = Instantiate(dian, parent);
i.rectTransform.localPosition = new Vector3(-131, 63, 0);
dianPool.Add(i);
}
break;
case InputType.Xian:
if (xianPoolCount > 0)
{
RefresPoolGO(type);
}
else
{
i = Instantiate(xian, parent);
i.rectTransform.localPosition = new Vector3(-131, 63, 0);
xianPool.Add(i);
}
break;
}
answerList.Add(type);
++length;
return;
}
if (length 0)
{
RefresPoolGO(type);
}
else
{
i = Instantiate(dian, parent);
i.rectTransform.localPosition = new Vector3(-131 + length * dis, 63, 0);
dianPool.Add(i);
}
break;
case InputType.Xian:
if (xianPoolCount > 0)
{
RefresPoolGO(type);
}
else
{
i = Instantiate(xian, parent);
i.rectTransform.localPosition = new Vector3(-131 + length * dis, 63, 0);
xianPool.Add(i);
}
break;
}
answerList.Add(type);
++length;
if(length == inputCount)
{
Check();
}
}
}
///
/// 核对答案
///
private void Check()
{
for (int i = 0; i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?