Unity 3D - 配对 (2D) 游戏
Unity 3D - Matching Pairs (2D) Game
我目前正在 Unity3D 中开发一款游戏,您必须点击颜色对来匹配它们,然后它们就会消失。我正在使用 2D 精灵来执行此操作,但我在通过鼠标单击两者时擦除对的逻辑方面苦苦挣扎。
单击黄色,然后再次单击黄色使两者都消失。 (直到棋盘被清除或着色。)
如果单击黄色,则黄色以外的任何内容都不会执行任何操作。
提前致谢。
精灵的布局如下所示:
最好给每种颜色一个标签吗?
这是我想要发生的事情:当游戏开始时,它从 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);
}
}
如果您点击的是第一张或第二张卡片,您需要有两个变量来存储被点击卡片的类型和用于存储信息的布尔变量(对于 为 false。然后在点击事件中您需要检查几项内容:
1. 需要检查您点击的是第一张还是第二张卡片。如果是第一张牌,检查布尔变量是否为假。如果是:将其更改为 true 并出示卡片。将卡片类型存储在 firsClicked 变量中。
2. 如果是第二次单击,您对布尔值的检查应该为真。在这种情况下,您应该检查第二张卡的类型是否与第一张卡相同。如果为真 - 利润。如果是假的,把牌翻回去。这就是所有逻辑。
编辑
好了,就到这里吧。
- 您需要有一个 GameObject 变量来存储在第一次点击时选择的圆圈。让我们说
private GameObject firstCircle = null;
。将它放在您的点击方法之外,这样它就不会在每次点击时都被初始化。
- 您的每个圆形对象都必须有一些字段来存储它们的颜色。我不知道你是如何设置它们的,我猜是有一个标签?我猜他们有 "green"、"red" 之类的标签?
在你的点击事件中你必须有 if-else。类似的东西(仅限伪代码):
if(firstCircle == null)
{
firstCircle = hit.collider.gameobject; // 这将存储第一个点击的圆圈以供以后比较
}否则{
firstCircle = null;
如果(firstCircle.tag == hit.collider.gameObject.tag)
{
//在这里你可以销毁两个对象或添加点或类似的东西
销毁(第一圈);
销毁(hit.collider.gameObject);
}否则{
// 当圆圈不一样时,你可以做你想做的事
}
}
请注意,这只是伪代码,我无法对其进行测试,但我希望你能理解这背后的想法。通常您需要存储第一次点击后的第一个圆圈,以便与第二次点击后的圆圈进行比较。请记住,你必须检查用户是否没有点击同一个圆圈两次(我没有在这里包括这个)
我目前正在 Unity3D 中开发一款游戏,您必须点击颜色对来匹配它们,然后它们就会消失。我正在使用 2D 精灵来执行此操作,但我在通过鼠标单击两者时擦除对的逻辑方面苦苦挣扎。
单击黄色,然后再次单击黄色使两者都消失。 (直到棋盘被清除或着色。)
如果单击黄色,则黄色以外的任何内容都不会执行任何操作。
提前致谢。
精灵的布局如下所示:
最好给每种颜色一个标签吗?
这是我想要发生的事情:当游戏开始时,它从 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);
}
}
如果您点击的是第一张或第二张卡片,您需要有两个变量来存储被点击卡片的类型和用于存储信息的布尔变量(对于 为 false。然后在点击事件中您需要检查几项内容: 1. 需要检查您点击的是第一张还是第二张卡片。如果是第一张牌,检查布尔变量是否为假。如果是:将其更改为 true 并出示卡片。将卡片类型存储在 firsClicked 变量中。 2. 如果是第二次单击,您对布尔值的检查应该为真。在这种情况下,您应该检查第二张卡的类型是否与第一张卡相同。如果为真 - 利润。如果是假的,把牌翻回去。这就是所有逻辑。
编辑 好了,就到这里吧。
- 您需要有一个 GameObject 变量来存储在第一次点击时选择的圆圈。让我们说
private GameObject firstCircle = null;
。将它放在您的点击方法之外,这样它就不会在每次点击时都被初始化。 - 您的每个圆形对象都必须有一些字段来存储它们的颜色。我不知道你是如何设置它们的,我猜是有一个标签?我猜他们有 "green"、"red" 之类的标签?
在你的点击事件中你必须有 if-else。类似的东西(仅限伪代码):
if(firstCircle == null)
{
firstCircle = hit.collider.gameobject; // 这将存储第一个点击的圆圈以供以后比较
}否则{
firstCircle = null;
如果(firstCircle.tag == hit.collider.gameObject.tag)
{
//在这里你可以销毁两个对象或添加点或类似的东西
销毁(第一圈); 销毁(hit.collider.gameObject);
}否则{
// 当圆圈不一样时,你可以做你想做的事 } }
请注意,这只是伪代码,我无法对其进行测试,但我希望你能理解这背后的想法。通常您需要存储第一次点击后的第一个圆圈,以便与第二次点击后的圆圈进行比较。请记住,你必须检查用户是否没有点击同一个圆圈两次(我没有在这里包括这个)