最近准备开一系列自己喜欢的游戏的技术剖析以及实现,没有任何对原著的恶意,只是想思考下成功的作品怎么实现的,如果有好游戏也可以推荐我玩下,前提是有意思的耐玩的游戏
首先这个独立游戏没有其他啥界面,难点基本上也在战斗这里月圆之夜,数值方面不做考虑,毕竟我不是策划。这里列一下游戏的难点
牌的生成策略和摆放规则
牌的生成是一个扇形的效果,并且会随着牌的打出或者增加自动重新布局。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
还没有评论,来说两句吧...