游戏剖析与实现 之 《月圆之夜》

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

这里写图片描述

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

牌的生成策略和摆放规则

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

效果:这里写图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TestCommand : MonoBehaviour {
    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);
        }
    }

}
牌的选取和拖动效果

卡牌的选取放大,移动我这里就不写了,现成的DoTween,ITween插件各种DoMove,DoScale 很容易就搞定了,这里只需要注意坐标转换即可。
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);
        }

目前游戏的技术上的难点就在这里啦,后面一篇补一个表现上的难点。
对球形插值不是很了解的,可以参考下这篇文章

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值