Card Animation

Yumin·2025년 1월 27일
0

Unity

목록 보기
4/18

최근에 여러 가지 프로젝트에 참여하고 있는데 몸이 4개였으면 좋았을걸~ 이라고 생각합니다.
그러면 모두 자신에게 맡길 수 있잖아요.!

아무튼.. 2025년 1월 24일부터 담당하고 있는 한 게임에 관한 설명입니다.
처음 카드의 경우는 고라니님의 HearthStone의 카드 배분 시스템에 관한 내용을 참고하였고
그 이후에는 Slay the Spire의 카드 선택시 다른 카드들이 좀 밀려나는 점을 참고하였습니다.

좀 더 수정할 부분이 있겠지만 대체로 만족스러운 애니메이션이 나온 것 같습니다.
현재 새롭게 담당하는 프로젝트엔 제가 못써본 기능들을 전부 배우면서 써볼 생각입니다.
물론 한정된 기간이 있긴 하지만 한정된 기간내에 효율적인 방안을 생각해 봐야 할 것 같네요.

最近、いくつかのプロジェクトに参加していて、「体が4つあったらなぁ~」と思うことがあります。
そうすれば、全部自分で任せられるのに!

さて…2025年1月24日から担当しているゲームについて説明します。
最初のカードについては、HearthStoneのカード配布システムを参考にしました。
その後、Slay the Spireのカード選択時に他のカードが少し押し出される仕組みを参考にしています。

まだ修正する部分はあるかもしれませんが、全体的には満足のいくアニメーションができたと思います。
現在、新たに担当しているプロジェクトでは、自分がまだ使ったことのない機能をすべて学びながら試してみるつもりです。
もちろん、限られた期間はありますが、その中で効率的な方法を考えないといけないですね。

Sample Code

        for (int i = 0; i < objCount; i++) {
            var targetPos = Vector3.Lerp(leftTr.position, rightTr.position, objLerps[i]);
            var targetRot = Utils.QI;
            if (objCount >= 4) {
                float curve = Mathf.Sqrt(Mathf.Pow(height, 2) - Mathf.Pow(objLerps[i] - 0.5f, 2));
                curve = height >= 0 ? curve : -curve;
                targetPos.y += curve;
                targetRot = Quaternion.Slerp(leftTr.rotation, rightTr.rotation, objLerps[i]);
            }

            results.Add(new PRS(targetPos, targetRot, scale));
        }
    void EnlargeCard(bool isEnlarge, CardView card) {
        DOTween.Kill(card.transform);
        if (isEnlarge) {
            Vector3 enlargePos = new Vector3(card.originPRS.pos.x, -4.8f, -10f);
            card.MoveTransform(new PRS(enlargePos, Utils.QI, Vector3.one * 2.5f), true, 0.5f);
            AdjustOtherCards(card, true);
        } else {
            card.MoveTransform(card.originPRS, true, 0.3f);
            AdjustOtherCards(card, false);
        }

        card.GetComponent<Order>().SetMostFrontOrder(isEnlarge);
    }
    void AdjustOtherCards(CardView centerCard, bool isEnlarge) {
        float offset = 3.0f; // Adjust this value to control how much other cards move
        for (int i = 0; i < myCards.Count; i++) {
            if (myCards[i] == centerCard) continue;

            Vector3 newPos = myCards[i].originPRS.pos;
            if (isEnlarge) {
                if (myCards[i].originPRS.pos.x < centerCard.originPRS.pos.x) {
                    newPos.x -= offset;
                } else {
                    newPos.x += offset;
                }
            }

            myCards[i].MoveTransform(new PRS(newPos, myCards[i].originPRS.rot, myCards[i].originPRS.scale), true, 0.5f);
        }
    }
profile
クリエイティブを楽しむ開発者

0개의 댓글