【问题标题】:Unity 3D - Matching Pairs (2D) GameUnity 3D - 配对(2D)游戏
【发布时间】:2016-06-22 20:44:09
【问题描述】:

我目前正在开发 Unity3D 游戏,您必须单击颜色对来匹配它们,然后它们就会消失。我正在使用 2D sprites 来执行此操作,但在通过鼠标单击两者时擦除这对的逻辑方面我正在苦苦挣扎。

单击黄色,然后再次单击黄色以使两者消失。 (直到板子被清除或着色。)

如果点击黄色,那么除了黄色之外的任何东西都不会做任何事情。

提前致谢。

下面是精灵的布局:

最好给每种颜色一个标签吗?

这就是我想要发生的事情:当游戏开始时,它会从 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);
    }
}

【问题讨论】:

  • 您好,如果您可以包含您当前的实现(到目前为止您尝试过的代码),并且可能会在其中添加有关您的内容的 cmets,这将对试图理解和解决您的问题的人们有所帮助认为逻辑应该是。然后,解释它如何无法实现您的目标(即不正确的行为)。
  • 我已经更新了我的问题@Serlite 谢谢!

标签: unity3d 2d unityscript


【解决方案1】:

如果您单击第一张或第二张卡片,您需要有两个变量来存储点击卡片的类型和布尔变量来存储信息(false 表示。然后在点击事件时,您需要检查几件事: 1. 需要检查您是点击第一张卡片还是第二张卡片。如果是第一张卡,检查布尔变量是否为假。如果是:将其更改为 true 并显示卡片。将卡片类型存储在 firsClicked 变量中。 2. 如果是第二次单击,您的布尔值检查应该为真。在这种情况下,您应该检查第二张卡的类型是否与第一张卡相同。如果为真 - 利润。如果为假,则将牌转回。这就是这里的所有逻辑。

编辑 好的,下面就一步步来。

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

    如果(firstCircle == null)
    {
    firstCircle = hit.collider.gameobject; // 这将存储第一个点击的圆圈以供以后比较
    }其他{
    firstCircle = null;
    if(firstCircle.tag == hit.collider.gameObject.tag)
    {
    //在这里你可以销毁两个对象或添加点或类似的东西
    销毁(firstCircle); 销毁(hit.collider.gameObject);
    }其他{
    // 这里你做你想做的当圈子不一样的时候 } }

请不要这只是伪代码,我无法测试它,但我希望你明白这背后的想法。一般需要先存储第一次点击后的第一个圆圈,与第二次点击后的圆圈进行比较。请记住,您必须检查用户是否没有两次单击同一个圆圈(我没有在此处包含此内容)

【讨论】:

  • 嗨!感谢您回复我,“存储点击卡片类型的变量”是什么意思
  • 嗯,我的意思是你需要比较你按下的卡片的类型或颜色。因此,在第一次单击时,您需要有某种变量来存储卡的类型。这取决于您正在编写的代码,但您可以使用字符串、枚举或 int...
  • 感谢您的反馈,虽然我不太明白您的意思 - 很抱歉让您感到痛苦,但您能写个例子吗?非常感谢
猜你喜欢
  • 2016-08-27
  • 1970-01-01
  • 1970-01-01
  • 2016-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多