游戏规则:制作对对碰游戏,在4X4地图上随机生成8对不同(形状)的物体,第一次点击被选中的物体会变红色,第二次点击相同物体,则两个物体共同消失,第二次点击是不同物体则第一个物体变回原来的颜色,再次点击则类似第一次点击效果。
创建游戏对象Plane,并将位置设置为(3,-0.5,2.6),将此代码挂载到游戏对象上
using System.Collections.Generic;
using UnityEngine;
public class DuiDuiPeng : MonoBehaviour {
public List<Vector3> listpos; //存放物体出现的指点位置
public List<GameObject> listgo; //存放创建物体
public List<GameObject> listdes = new List<GameObject>(); //存放选中物体
private GameObject go1; //创建出的物体
private GameObject go2;
void Start () {
Createpos();
Create();
Position();
}
#region 创建物体,并随机赋值位置
void Createpos()
{
//初始化,位置列表
for (int i = 0; i <= 6; i += 2)
{
for (int j = 0; j <= 6; j += 2)
{
listpos.Add(new Vector3(i, 0, j));
}
}
}
void Create()
{
for (int i = 0; i < 8; i++) //生成不同位置的两个相同物体
{
int atype = Random.Range(0, 4); //随机出现物体类型
go1 = GameObject.CreatePrimitive((PrimitiveType)atype); //创建物体
go2 = GameObject.CreatePrimitive((PrimitiveType)atype);
go1.AddComponent<DestroyMouse>(); //给生成物体guazDestoryMouse代码
go2.AddComponent<DestroyMouse>();
listgo.Add(go1);
listgo.Add(go2); //将生成物体存入列表
go1.name = go2.name = "" + (PrimitiveType)atype + i;//指定生成物体名称一致
}
}
void Position()
{
for (int i = 0; i < 16; i++)
{
int a = Random.Range(0, listpos.Count); //从0~list2的长度中随机生成索引值
listgo[i].transform.position = listpos[a]; //将得到的随机位置赋值给游戏对象
listpos.Remove(listpos[a]);//移除已经生成物体的位置
}
}
#endregion
}
//然后再创建如下代码即可(注意代码中名称不能打错,和上示代码对应)
public class DestroyMouse : MonoBehaviour {
DuiDuiPeng ex; //获取实例,用于获取listdes;
MeshRenderer mr;
MeshRenderer mr2;
// Use this for initialization
void Start()
{
mr = this.gameObject.GetComponent<MeshRenderer>(); //获取组件
ex = GameObject.Find("Plane").GetComponent<DuiDuiPeng>();
}
void OnMouseDown()
{
mr.material.color = Color.red; //点击后的颜色为设置为红色
ex.listdes.Add(this.gameObject);
if (ex.listdes.Count == 2)
{
if (ex.listdes[0].name == ex.listdes[1].name)
{
Destroy(ex.listdes[0], 0.3f); //0.3秒后销毁物体
Destroy(ex.listdes[1], 0.3f);
ex.listdes.Clear(); //保险起见,清空集合
}
else //如果两次点击的不是相同的物体
{
mr.material.color = Color.white; //将当前物体变成默认颜色,白色
mr2 = ex.listdes[0].GetComponent<MeshRenderer>();
mr2.material.color = Color.white; //之前选中的物体变回原来颜色
ex.listdes.Clear();
}
}
}
}