unity 卡牌聚拢算法
2024-10-19 21:34:46
前言
笔者在做项目时遇到了一个要聚拢手牌,像三国杀里的手牌聚拢的效果
大概效果图:
代码
public Dictionary<int, int> level_index ;//全部牌数据,卡牌id-卡牌阶级
//objects是需要洗的牌数
public void Xipai(GameObject[] objects)
{ float readonly position1=-2.28f;
float readonly position2=-3.5f;
float readonly allLength=4.9f;
//float readonly rotation=1f; //旋转间隔系数
int temp;
int counta = objects.Length;
foreach(GameObject t in kapai)
{
if(!objects.Contains(t)){
t.SetActive(false);
}
}
for(int i=0;i<counta;i++)
{
temp = i + 1;
if (!objects[i].activeSelf) objects[i].SetActive(true);
//距离聚拢
//4.9 -0.19
objects[i].transform.position = new Vector3(position2 + allLength / (counta + 1f) * (temp - 1f) + (temp - 1f) * 1f, position1, 0f);
//旋转成扇形
float t = (counta % 2f == 1f ? 1f : 0f);//奇偶判断器
float t1 = counta - t;//奇变偶
float t2 = t1 / 2;//取中间值
if (t == 1f && temp == t2 + 1)
{
objects[i].transform.localEulerAngles = new Vector3(0f, 0f, 0f);
}
else
{
objects[i].transform.localEulerAngles = new Vector3(0f, 0f, (temp <= t2 ? 90f : 0f) - 180f / (counta + 1f) * (temp - (temp > t2 ? t2 + t : 0f)) + (temp <= t2 ? -1f : 1f) * (level_index.Count - counta) * temp * rotation);
}
}
}
最新文章
- ios基础篇(二十三)—— 定时器NSTimer与图片的自动切换
- MP3播放器团队项目
- STM32 控制红外线收发
- Brackets(区间dp)
- ES 父子文档查询
- MongoDB服务器启动异常 1067
- EF 命令
- 关于Action返回结果类型的事儿(下)
- Python中def的用法
- 怎样学习使用libiconv库
- dnsmasq服务的安装与配置
- uwsgi常用配置
- Django+Vue打造购物网站(十)
- Saiku根据入参日期查询出对应的数据(二十)
- Web测试和App测试有什么区别
- Mining Station on the Sea HDU - 2448(费用流 || 最短路 &;&; hc)
- Codeforces 706C - Hard problem - [DP]
- 记录tiny6410 jlink 命令行调试linux-2.6.38内核
- oracl数据库中的substr()函数的用法
- [整理]JS中的状态机