前往
大廳
主題

Unity遊戲研究-卡牌遊戲(3)-手牌放大判斷區

冰峰Will | 2021-10-28 14:07:33 | 巴幣 2 | 人氣 817

玩卡牌遊戲一定少不了多張手牌時,
該怎麼精準的選到卡牌呢?

我利用UI Image中的 Raycast Padding,
來進行判斷範圍的調整,
請注意 因為我不知道有什麼更快的方法,
所以我全部用計算的方式去運作。
2021/10/28-最後偷工減料再用一個圖層其實比較簡單、又快速。

卡片觸發區
首先兩張牌重疊的地方(如下圖)
需要變為不可觸發的狀態,
這是有關放大後觸發的問題。

因為間距不同會導致重疊大小的不一樣
所以我修改了一下位置調整的地方。
    /// <summary>
    /// 位置調整
    /// </summary>
    private void PositionAdjustment(){
        cardPosition  = new List<Vector2>();

        // 控制在一定寬度內
        _width = cardWidth + maxSpacing;
        if(ownCards.Count > maxCard){
            _width = _width / (1f + (ownCards.Count - maxCard) / (maxCard - 1));
        }

        //是否為奇數
        float odd  = 1f;
        if(ownCards.Count % 2 == 1){
            odd = 0;
        }
        
        //最左邊的位置
        float x = -((_width * (int)(ownCards.Count / 2))) + _width / 2 * odd;
        float z = 4f / (maxCard - 1f) * (ownCards.Count - 1f);
        z = z > 4f? 4f: z;

        for (int i = 0; i < ownCards.Count; i++)
        {
            if(ownCards.Count > maxCard && i < ownCards.Count - 1)
                ownCards[i].GetComponent<Image>().raycastPadding =new Vector4(0,0, cardWidth - _width, 0);


            float z1 = ((float)ownCards.Count - 1f);
            z1 = z1 == 0 ? 1 : z1;
            cardLocation[i].transform.rotation = Quaternion.Euler(0f, 0f, z - (z * 2f) / z1  * i);

            cardPosition.Add(new Vector2(x + _width * i, transform.position.y));
            
        }
        
    }
稍微有小改動一些變數,
但主要是這一行
if(ownCards.Count > maxCard && i < ownCards.Count - 1)
                ownCards[i].GetComponent<Image>().raycastPadding =new Vector4(0,0, cardWidth - _width, 0);
maxCard 代表最大手牌:手牌超過間距就會縮小,也就代表開始重疊。
i < ownCards.Count - 1 這會讓最後一張牌的觸發區域不保持卡牌大小。
(因為最後一張沒被任何卡片覆蓋)

放大時的範圍
我原本是想利用放大的比例差之類的去算,(如下圖)
但最後發現只要只到邊界他就會一直不斷地縮放,

今天改良了一下,
我又新增了一個圖層,
如上圖,
最底下的卡片只是圖片,不包含判斷區域,
而中間的那個卡片不會跟著圖片放大,
並且保持在原位,
也就是說判斷區域不變,
(注意記得把最底下圖片的RaycastTarget關掉,
不然會擋到判斷區域)

害我之前用運算的算了老半天,
結果還全都打掉重練


雖然有兩個功能感覺不大的圖層,
但先能達到效果,
再想怎麼優化嗎~
如果大家有啥建議的也可以推薦個。

現在大概長這樣

之後玩了一款遊戲,
感覺他的卡牌效果也蠻不錯的,

時常覺得我是不是太注重細節了,
導致我一直想修改功能,
光抽個卡就花了好久阿~

下次可能就會有戰鬥系統了吧~
應該吧~
不確定....

順便宣傳DC群
這裡包含了繪畫創作、BOT娛樂、遊戲討論、影像分享、程式交流等內容。

創作回應

樂小呈
我會試試看把特定牌放大的時候推開其他牌,避免遮擋,直接用 UI 的 IPointerEnter 檢測游標會輕鬆很多
2021-10-28 14:13:45

更多創作