2016-03-08 138 views
0

我目前正在Unity3D上制作游戏,您必须单击颜色对才能匹配它们,然后消失。我正在使用2D精灵来做到这一点,但当我们通过鼠标点击鼠标时,我正在努力消除这个对。Unity 3D - 匹配对(2D)游戏

点击黄色,然后再次点击黄色,使两者都消失。 (直到板被清除或颜色。)

如果点击黄色,黄色以外的任何东西都不会做任何事情。

在此先感谢。

这里是精灵的布局看起来像:

Game Screenshot

难道是最好给每一个颜色的标签?

这就是我想要发生的事情:当游戏开始时,它从6个数组中选取3种颜色,然后随机将它们(每种颜色2种)放在屏幕上。然后你必须点击颜色,例如绿色(它会突出显示),然后点击其他绿色,它们都会消失。如果你想先点击绿色然后点击黄色,游戏就会结束。

这是我目前已经实现了代码:

// [...] 

    if (Input.GetMouseButtonDown(0)) 
    { 
     CastRay(); 
    }  
} 

function CastRay() { 
    var ray: Ray = Camera.main.ScreenPointToRay(Input.mousePosition); 

    var hit: RaycastHit2D = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero); 

    if(hit.collider != null) 
    { 
     // Number is the amount of objects on the screen at one time.(6) 
     number --; 

     //Test to see if a mouse click interacts with the 2D Sprite.(Then destroys it) 
     Debug.Log ("Target Position: " + hit.collider.gameObject.transform.position + gameObject.tag); 

     Destroy(hit.collider.gameObject); 

    } 


    // This when the number hits 0 the level restarts (To check random elements) 

    if (number == 0) 
    { 
     Application.LoadLevel (0); 
    } 
} 
+0

嗨,这将有助于人们试图理解和解决你的问题,如果你可以包括你目前的实现(到目前为止您已经尝试过的代码),并且可能会添加关于您认为逻辑应该是什么的评论。然后,解释它如何不能达到你的目标(即不正确的行为)。 – Serlite

+0

我已更新我的问题@Serlite谢谢! – taiomi

回答

0

你需要有两个变量存储的点击数和布尔变量来存储,如果你点击第一或第二卡信息(类型false for。然后点击事件你需要检查一些东西: 1.需要检查你是否点击第一张或第二张牌,如果它是第一张牌,检查布尔变量是否为假如果是的话:改变如果它是第二次点击你的检查布尔应该是真的在这种情况下,你应该检查是否secon的类型d卡与第一张卡相同。如果属实 - 利润。如果为false,请将卡翻回来。这就是所有的逻辑。

编辑 好的,这里是一步一步的。

  1. 您需要有一个GameObject变量来存储在第一次点击中选择的圆。可以说private GameObject firstCircle = null;。把它放在你的点击方法之外,这样每次点击都不会初始化。
  2. 您的每个圆形对象都必须有一些存储其颜色的字段。我不知道你是如何设置它们的,我想这有一个标签?我猜他们有像“绿色”,“红色”等标签?
  3. 在你的点击事件中,你必须有if-else。类似的东西(伪代码仅):

    如果(firstCircle == NULL)
    {
    firstCircle = hit.collider.gameobject; //这将存储第一个被点击的圆以备以后比较
    } else {
    firstCircle = null;
    if(firstCircle.tag == hit.collider.gameObject。标签)
    {
    //在这里你可以销毁这两个对象或添加点或类似
    Destroy(firstCircle); Destroy(hit.collider.gameObject);
    }其他{
    //在这里做你想做什么时,圆圈是不一样的 }}

普莱舍不,这只是伪代码,我无法测试,但我希望你能这背后的想法。一般来说,您需要将第一个圆圈后面的第一个圆圈存储起来,以便在第二次点击后将其与圆圈进行比较。请记住,你必须检查用户是否不点击同一圆圈两次(我没有在这里包括这个)

+0

嗨!感谢您回复我,你是什么意思“变量存储点击卡的类型” – taiomi

+0

嗯,我的意思是,你需要比较你按下的卡的类型或颜色。所以在第一次点击时,你需要有一些变量来存储卡的类型。这取决于你正在编写的代码,但你可以使用字符串,枚举或int ... –

+0

感谢您的反馈意见,但我不是很明白你的意思 - 抱歉是一个痛苦,但你可以写一个例?非常感谢 – taiomi