2

こんにちは、ソリティアゲームを作っています。今、すべてのカードを 13 x 4 で画面に表示します。カードをドラッグできますが、どういうわけか上から下まで行全体が選択されています。ドラッグを左または右に移動すると、その隣のカードと行全体が選択されます。

私の質問: 他のカードをドラッグせずに 1 枚のカードを選択してドラッグするにはどうすればよいですか?

using UnityEngine;
using System.Collections;

public class SetupCards : MonoBehaviour 
{
    int numberOfCards = 52;
    int numberOfCardSorts = 4;
    public float verticalSize = 1.4f;

void OnGUI()
{
    int currentSort = 0;
    int cardNumber = 0;

    for (int i = 0; i < numberOfCards; ++i)
    {
        int numberOfCardsPerSort = numberOfCards / numberOfCardSorts;
        float cardSizeX = Screen.width / numberOfCardsPerSort;

            if (cardNumber == numberOfCardsPerSort)
            {
                ++currentSort;
               cardNumber = 0;
            }

            Vector2 cardSize = new Vector2(cardSizeX, cardSizeX * verticalSize);

            Rect rect = new Rect(
                cardSize.x * cardNumber,
                cardSize.y * currentSort,
                cardSize.x,
                cardSize.y);

                string texturePath = "Textures/cards/";

                switch (currentSort)
                {
                    case 0:
                    texturePath += "diamond/diamond_";
                    break;

                case 1:
                    texturePath += "clover/clover_";
                    break;

                case 2:
                    texturePath += "heart/heart_";
                    break;

                case 3:
                    texturePath += "spade/spade_";
                    break;
            }

            texturePath += cardNumber.ToString();

            Texture texture = Resources.Load(texturePath) as Texture;

            if (Input.GetMouseButton(0))
            {
                if (Input.mousePosition.x <= rect.x + rect.width &&
                    Input.mousePosition.x >= rect.x) 
                {                                        
                    if(-Input.mousePosition.y <= rect.y + rect.height &&
                        -Input.mousePosition.y >= rect.y) 
                        rect.x = Input.mousePosition.x;
                    {
                        rect.y = -Input.mousePosition.y + Screen.height;
                    }                    
                }
            }

            GUI.Label(rect, texture);

            ++cardNumber;

        }
    }
}
4

1 に答える 1

0

あなたの問題はここにあります:

        if (Input.GetMouseButton(0))
        {
            if (Input.mousePosition.x <= rect.x + rect.width &&
                Input.mousePosition.x >= rect.x) 
            {                                        
                if(-Input.mousePosition.y <= rect.y + rect.height &&
                    -Input.mousePosition.y >= rect.y) 
                    rect.x = Input.mousePosition.x;  // THIS LINE IS THE PROBLEM
                {
                    rect.y = -Input.mousePosition.y + Screen.height;
                }                    
            }
        }

何が起こっているかというと、ステートメントrect.x = Input.mousePosition.x;の直後に行が続き、条件付きで実行されます。ifインクルードされたコード ブロックは、外側のステートメントを通過するすべてのもの、つまりその垂直線内のすべてのカードを実行rect.y =します。 rectif

次のように、内側のブレースを 1 行上に移動する必要があると思われます。

        if (Input.GetMouseButton(0))
        {
            if (Input.mousePosition.x <= rect.x + rect.width &&
                Input.mousePosition.x >= rect.x) 
            {                                        
                if(-Input.mousePosition.y <= rect.y + rect.height &&
                    -Input.mousePosition.y >= rect.y) 
                {  // THIS BRACE IS MOVED UP
                    rect.x = Input.mousePosition.x;
                    rect.y = -Input.mousePosition.y + Screen.height;
                }                    
            }
        }
于 2012-11-16T11:08:03.653 に答える