最近准备开一系列自己喜欢的游戏的技术剖析以及实现,没有任何对原著的恶意,只是想思考下成功的作品怎么实现的,如果有好游戏也可以推荐我玩下,前提是有意思的耐玩的游戏

首先这个独立游戏没有其他啥界面,难点基本上也在战斗这里月圆之夜,数值方面不做考虑,毕竟我不是策划。这里列一下游戏的难点

牌的生成策略和摆放规则

牌的生成是一个扇形的效果,并且会随着牌的打出或者增加自动重新布局。unity 给我们提供了一个叫球形插值的功能,所以我们利用起来后,这个功能就几句话的节奏。这里我们以原点作为参考

效果:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class TestCommand : MonoBeh *** iour {
    public int count;
    //扇形的起点和结束点,决定了开口大小
    Vector3 start = new Vector3(-3, 1, 0); 
    Vector3 end = new Vector3(3, 1, 0);
    private void OnDrawGizmos()
    {
        for (int i = 1; i < count; i++)
        {
            Gizmos.color = Color.red;
            float lerpVaule = (float)1f / count;
             //弧形插值
            Vector3 offset = Vector3.Slerp(start, end, i * lerpVaule);
            Gizmos.DrawLine(Vector3.zero, offset);
        }
    }
}

牌的选取和拖动效果

卡牌的选取放大,移动我这里就不写了,现成的,插件各种, 很容易就搞定了,这里只需要注意坐标转换即可。

UGUI 坐标和屏幕坐标的转换Unity也很贴心的给我们做了工具,这里你可以去自己转换一下也可以直接用我这里的转

        public void OnDrag(PointerEventData eventData)
        {
            Vector2 uipos = Vector2.one;
            RectTransformUtility.ScreenPointToLocalPointInRectangle(
                canvas.transform as RectTransform, 
                Input.mousePosition, 
                canvas.worldCamera, 
                out uipos);
            rt.pivot.Set(0f, 0f);
            rt.anchoredPosition = uipos;
            rt.eulerAngles = Vector3.zero;
            rt.localScale = new Vector3(0.5f, 0.5f, 1);
        }

目前游戏的技术上的难点就在这里啦,后面一篇补一个表现上的难点。

对球形插值不是很了解的,可以参考下这篇文章

未经允许不得转载! 作者:admin,转载或复制请以超链接形式并注明出处天心神途传奇手游发布网

原文地址:《游戏剖析与实现 之 《月圆之夜》》发布于:2023-12-28

发表评论

表情:
验证码
评论列表 (暂无评论,46人围观)

还没有评论,来说两句吧...