[Unity Color Matching Game

问题描述 投票:-1回答:1

我已经在论坛和Google上搜索了类似的游戏,但我找不到确切的位置。

我正在制作一个益智游戏。如果节点(水平杆)的颜色相同,则用户可以获取点数。

[当它们在相同方向上时,它表示颜色匹配,但是在生成的节点中,每当我旋转摇杆时它也表示相同。

你可以看看吗?告诉我如何解决。另外,如果您对此匹配有更好的想法,也将不胜感激。

same direction --------- enter image description here

void Update()
{


    if (Input.GetMouseButtonDown(0))
    {

        clickTime = Time.time;
        rayhit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero, Mathf.Infinity, selectableObjLayerMask);
    }
    else if (Input.GetMouseButtonUp(0))
    {
        if (rayhit)
        {
            if (Time.time - clickTime < .2f)
            {
                Node node = rayhit.transform.GetComponent<Node>();
                if (node != null)
                {
                    for (int i = 0; i < node.sticks.Count; i++)
                    {
                        Vector3 newAngles = new Vector3(0, 0, (node.sticks[i].transform.localEulerAngles.z - 45));
                        newAngles.z = newAngles.z < 0 ? newAngles.z + 180 : newAngles.z;
                        newAngles.z = newAngles.z >180 ? newAngles.z - 180 : newAngles.z;
                        node.sticks[i].transform.localEulerAngles = newAngles;

                        node.sticks[i].degree = (int)newAngles.z;

// ********这里是色彩匹配*******

                        if (node.transform.parent.name=="Node1" && node.sticks[i].degree == 90)
                        {
                            colorMatch[1] = node.sticks[i].color;
                            Debug.Log("COLOR 1___"+ colorMatch[1]);
                            //Debug.Log(colorMatch1);

                        }
                        if (node.transform.parent.name == "Node2" && node.sticks[i].degree == 90)
                        {
                            colorMatch[2] = node.sticks[i].color;
                            Debug.Log("COLOR 2___" + colorMatch[2]);

                        }
                        if (node.transform.parent.name == "Node3" && node.sticks[i].degree == 90)
                        {
                            colorMatch[3] = node.sticks[i].color;
                            Debug.Log("COLOR 3___" + colorMatch[3]);
                            //if (colorMatch[1] == colorMatch[2] && colorMatch[2] == colorMatch[3])
                            //{
                            //    Debug.Log("COLORS MATCHED : " + colorMatch[1]);
                            //}
                        }

                        if (colorMatch[1]==colorMatch[2] && colorMatch[2]==colorMatch[3])
                        {
                            Debug.Log("COLOR MATCHED");
                        }
                    }

                }
            }
            else 
            {
                Node currNode = rayhit.transform.GetComponent<Node>();
                if(currNode.isMoved == false)
                {
                    smallestId = 0;
                    smallestDistance = 999;
                    for (int i = 0; i < nodes.Length; i++)
                    {

                        float distance = Vector2.Distance(rayhit.transform.position, nodes[i].transform.position);
                        if (smallestDistance > distance)
                        {
                            smallestDistance = distance;
                            smallestId = i;
                        }

                    }

                    rayhit.transform.position = nodes[smallestId].transform.position;
                    if (rayhit.transform.parent != nodes[smallestId].transform)
                    { 
                        if (nodes[smallestId].transform.childCount > 0 && nodes[smallestId].transform != rayhit.transform.parent)
                        {
                            if (currNode != null)
                            {
                                for (int i = 0; i < currNode.sticks.Count; i++)
                                {
                                    nodes[smallestId].transform.GetChild(0).GetComponent<Node>().sticks.Add(currNode.sticks[i]);
                                    currNode.sticks[i].transform.SetParent(nodes[smallestId].transform.GetChild(0));
                                }
                                Destroy(rayhit.transform.gameObject);
                            }
                        }
                        else
                        {
                            if (currNode != null)
                            {
                                currNode.isMoved = true;
                            }
                            rayhit.transform.SetParent(nodes[smallestId].transform);
                        }
                    }

                }

            }               

        }
        rayhit = new RaycastHit2D();

    }
    else if (Input.GetMouseButton(0))
    {
        if(rayhit.transform != null)
        {
            Node currNode = rayhit.transform.GetComponent<Node>();
            if(currNode != null)
                if (currNode.isMoved == false)
                {
                    if (Time.time - clickTime >= 0.2f)
                    {
                        Vector2 newPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
                        rayhit.transform.position = newPos;
                    }
                }
        }


    }
}
c# unity3d matching
1个回答
0
投票
if (node.transform.parent.name=="Node1" && node.sticks[i].degree == 90)
                        {
                            colorMatch[1] = node.sticks[i].color;
                            Debug.Log("COLOR 1___"+ colorMatch[1]);
                            //Debug.Log(colorMatch1);

                        }
                        if (node.transform.parent.name == "Node2" && node.sticks[i].degree == 90)
                        {
                            colorMatch[2] = node.sticks[i].color;
                            Debug.Log("COLOR 2___" + colorMatch[2]);

                        }
                        if (node.transform.parent.name == "Node3" && node.sticks[i].degree == 90)
                        {
                            colorMatch[3] = node.sticks[i].color;
                            Debug.Log("COLOR 3___" + colorMatch[3]);
                            if (colorMatch[1] == colorMatch[2] && colorMatch[2] == colorMatch[3])
                            {
                                Debug.Log("COLORS MATCHED : " + colorMatch[1]);

                            }

                        }

这里是工作代码。但是我如何销毁匹配的木棍?

© www.soinside.com 2019 - 2024. All rights reserved.