开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

蛮牛译馆

关注:566

当前位置:游戏蛮牛 技术专区 蛮牛译馆

查看: 3737|回复: 19

[外文翻译] 在Unity中快速制作一个幸运转盘

[复制链接]  [移动端链接]
排名
21513
昨日变化
27

21

主题

106

帖子

346

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
156801
好友
2
蛮牛币
571
威望
0
注册时间
2016-7-15
在线时间
171 小时
最后登录
2017-9-21
发表于 2017-5-15 14:39:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
本帖最后由 204有个大坑 于 2017-5-15 14:39 编辑

7098how-to-make-a-wheel-of-fortune-in-unity-the-easiest-way.jpg


目标
这篇文章会教你在游戏中怎样实现一个幸运转盘。

步骤1:简单介绍幸运转盘
我想你已经知道什么是幸运转盘了吧。如果你喜欢玩Candy Crush(糖果大爆险),那你应该旋转了无数次的Daily Booster Wheel日常辅助轮?自旋和赢得8球池也很受玩家的欢迎。或者你可能在一些电视游戏中看到过,玩家通过旋转轮盘获取奖品或者任务来赢取奖品。
你想要在游戏中也有一个类似的轮盘吗?如果是,那你算是来着了!非常简单,但是你可能会发现几件事情会比较棘手而且感到困惑。不用担心,我会尽量让它简单,让我们开始吧!

步骤2:建立场景
2.1建立轮盘
· 将轮盘放在场景中,确认轮盘的每一份比例相等。
· 在边缘添加小的circle collider (你需要创建一个空的GameObject来储存 collider)然后将它设置为轮盘的子类。
· 现在,为保持Hierarchy的整洁,你需要创建另外一个空的GameObject作为碰撞物体的父物体。

2.2 箭头的设置
· 我用一个简单的方块代表箭头;当然你可以用其他你喜欢的物体。
· 添加BoxCollider2D和 HingeJoint2D组件到箭头物体中。

如果你之前没有遇到过HingeJoint组件,它工作原理就像我们用门和窗一样。
花些时间研究HingeJoint属性来获取你想要的结果。
你也可以访问Unity官网文档获取更多详细内容:
https://docs.unity3d.com/Manual/class-HingeJoint.html
场景建立完毕,现在应该是这样的:
scene-setup2.png

步骤三 代码敲起来
这一次,我们关心的只有一个脚本。(这是件好事,是不?)
[AppleScript] 纯文本查看 复制代码
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class SpinWheel : MonoBehaviour
{
        public List<int> prize;
        public List<AnimationCurve> animationCurves;
        
        private bool spinning;        
        private float anglePerItem;        
        private int randomTime;
        private int itemNumber;
        
        void Start(){
                spinning = false;
                anglePerItem = 360/prize.Count;                
        }
        
        void  Update ()
        {
                if (Input.GetKeyDown (KeyCode.Space) && !spinning) {
                
                        randomTime = Random.Range (1, 4);
                        itemNumber = Random.Range (0, prize.Count);
                        float maxAngle = 360 * randomTime + (itemNumber * anglePerItem);
                        
                        StartCoroutine (SpinTheWheel (5 * randomTime, maxAngle));
                }
        }
        
        IEnumerator SpinTheWheel (float time, float maxAngle)
        {
                spinning = true;
                
                float timer = 0.0f;                
                float startAngle = transform.eulerAngles.z;                
                maxAngle = maxAngle - startAngle;
                
                int animationCurveNumber = Random.Range (0, animationCurves.Count);
                Debug.Log ("Animation Curve No. : " + animationCurveNumber);
                
                while (timer < time) {
                //to calculate rotation
                        float angle = maxAngle * animationCurves [animationCurveNumber].Evaluate (timer / time) ;
                        transform.eulerAngles = new Vector3 (0.0f, 0.0f, angle + startAngle);
                        timer += Time.deltaTime;
                        yield return 0;
                }
                
                transform.eulerAngles = new Vector3 (0.0f, 0.0f, maxAngle + startAngle);
                spinning = false;
                        
                Debug.Log ("Prize: " + prize [itemNumber]);//use prize[itemNumnber] as per requirement
        }        
}

注意:
一个在开始解释代码之前,先将代码赋到轮盘上才能看到代码执行效果。这样会更容易理解。
正如代码所示,我使用了 Animation Curves来控制轮盘的转动。你也可以在这些曲线中设置一大堆的形状来获取各种不同的曲线。(一定要先把代码挂在物体上,不然你真的可能会蒙圈)
Animation Curves一般长这样:
animation-curve.png

在属性界面里点击这里,就可以弹出动画曲线框了
animationcurves.png
别忘了设置“奖品”列表的长度。

现在,转到Update函数中:
·  它包含了两个随机数和一个异步调用:SpeenTheWheel();
·  itemNumber 设置当轮盘停止时,在箭头下的item。
·  maxAngle (或者finalAngle) 指示最终的角度。
【是的,在滚动轮盘之前,我们已经知道结果, 但是别担心,对于玩家来说还是个秘密】
接下来看看SpinWheel()函数的异步:
·  一开始,starAngle 和 maxAngle被初始化。
·  随后,一个随机的Animation Curve被选中。
然后是While循环:
·  循环体计算的是轮盘的旋转角度(绕Z轴)。
·   Animation Curve的Evaluate()根据传入的时间返回一个值。

轮盘滚动的逻辑就是这样了。
总结
现在,由你决定该怎么使用在最后获得的ItemNumber上的“奖品”(其实,我们一开始就知道了:-D)。现在你终于明白了我们为什么从来都拿不到“大奖”或者“头奖”了吧!!现在点击运行,转动轮盘看看你能赢得什么(别骗自己:p)。很简单吧?如果有疑问,写下评论,我会回复(就像斯瓦辛格说过的)。
我的另一个非常不错的教程,看http://www.theappguruz.com/category/unity
想获取游戏开发的idea?还等什么?现在就联系我们,让idea瞬间活起来。我司在印度被称为最好的 游戏开发公司,有之一。
免费源码下载地址https://codeload.github.com/tejas123/how-to-make-a-wheel-of-fortune-in-unity-the-easiest-way/zip/master
原文作者:Viju Dudiya
原文连接:http://www.theappguruz.com/blog/how-to-make-a-wheel-of-fortune-in-unity-the-easiest-way

扫描下方二维码关注游戏蛮牛官方微信~每日都有精选干货与你分享哟~

本文由蛮牛译馆倾情奉献,翻译:204有个大坑,如果问题请及时联系,除合作社区及合作媒体外,禁止转载。
155547iluo7umxezrb2ekr.png

本帖被以下淘专辑推荐:


回复

使用道具 举报

4四处流浪
494/500
排名
5213
昨日变化
5

6

主题

74

帖子

494

积分

Rank: 4

UID
138444
好友
0
蛮牛币
124
威望
0
注册时间
2016-3-5
在线时间
212 小时
最后登录
2017-8-27
发表于 2017-5-15 17:43:36 | 显示全部楼层
学习了,谢谢楼主分享

回复 支持 反对

使用道具 举报

5熟悉之中
535/1000
排名
4085
昨日变化
1

4

主题

73

帖子

535

积分

Rank: 5Rank: 5

UID
116481
好友
0
蛮牛币
819
威望
0
注册时间
2015-8-3
在线时间
188 小时
最后登录
2017-9-26
发表于 2017-5-16 09:17:53 | 显示全部楼层
在Unity中快速制作一个幸运转盘

回复 支持 反对

使用道具 举报

4四处流浪
393/500
排名
8885
昨日变化
11

0

主题

217

帖子

393

积分

Rank: 4

UID
1292
好友
1
蛮牛币
389
威望
30
注册时间
2013-7-31
在线时间
84 小时
最后登录
2017-8-18

社区QQ达人

发表于 2017-5-16 09:38:01 | 显示全部楼层
都是这样,开始转的时候所有的命运都已经确定。。。

回复 支持 反对

使用道具 举报

排名
21513
昨日变化
27

21

主题

106

帖子

346

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
156801
好友
2
蛮牛币
571
威望
0
注册时间
2016-7-15
在线时间
171 小时
最后登录
2017-9-21
 楼主| 发表于 2017-5-16 09:53:59 | 显示全部楼层
intime3000 发表于 2017-5-16 09:38
都是这样,开始转的时候所有的命运都已经确定。。。

同一个世界,同一个转盘。

回复 支持 反对

使用道具 举报

7日久生情
1775/5000
排名
17062
昨日变化
20

2

主题

1495

帖子

1775

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
185807
好友
0
蛮牛币
2365
威望
0
注册时间
2016-11-22
在线时间
254 小时
最后登录
2017-9-26
发表于 2017-5-16 10:03:34 | 显示全部楼层
赞,学习了,谢谢分享

回复 支持 反对

使用道具 举报

排名
51131
昨日变化
561

0

主题

3

帖子

14

积分

Rank: 1

UID
176445
好友
0
蛮牛币
23
威望
0
注册时间
2016-10-18
在线时间
10 小时
最后登录
2017-8-18
发表于 2017-5-16 14:22:41 | 显示全部楼层
先评论再看

回复

使用道具 举报

排名
31673
昨日变化
33

0

主题

19

帖子

36

积分

Rank: 1

UID
221801
好友
0
蛮牛币
31
威望
0
注册时间
2017-5-12
在线时间
11 小时
最后登录
2017-9-18
发表于 2017-5-16 16:16:32 | 显示全部楼层
人艰不拆

回复

使用道具 举报

5熟悉之中
552/1000
排名
3362
昨日变化
1

2

主题

81

帖子

552

积分

Rank: 5Rank: 5

UID
158341
好友
0
蛮牛币
1064
威望
0
注册时间
2016-7-28
在线时间
136 小时
最后登录
2017-9-24
发表于 2017-5-16 22:29:35 | 显示全部楼层
脚本部分是空的啊

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1296/1500
排名
2135
昨日变化
10

0

主题

322

帖子

1296

积分

Rank: 6Rank: 6Rank: 6

UID
128537
好友
0
蛮牛币
2037
威望
0
注册时间
2015-11-11
在线时间
460 小时
最后登录
2017-9-26
发表于 2017-5-17 16:14:06 | 显示全部楼层

回复

使用道具 举报

5熟悉之中
541/1000
排名
5172
昨日变化
36

0

主题

205

帖子

541

积分

Rank: 5Rank: 5

UID
122160
好友
0
蛮牛币
1055
威望
0
注册时间
2015-9-10
在线时间
130 小时
最后登录
2017-9-26
发表于 2017-5-17 17:02:54 | 显示全部楼层
感谢分享
[发帖际遇]: Vincher 乐于助人,奖励 3 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

排名
51131
昨日变化
561

0

主题

1

帖子

5

积分

Rank: 1

UID
196750
好友
0
蛮牛币
13
威望
0
注册时间
2016-12-28
在线时间
2 小时
最后登录
2017-5-17
发表于 2017-5-17 18:28:19 | 显示全部楼层
回头试试

回复

使用道具 举报

排名
17062
昨日变化
20

0

主题

24

帖子

57

积分

Rank: 2Rank: 2

UID
219049
好友
0
蛮牛币
124
威望
0
注册时间
2017-4-23
在线时间
11 小时
最后登录
2017-6-8
发表于 2017-6-2 21:26:37 | 显示全部楼层

留言赚点积分

回复

使用道具 举报

7日久生情
1970/5000
排名
992
昨日变化
1

3

主题

406

帖子

1970

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
46577
好友
1
蛮牛币
2383
威望
0
注册时间
2014-9-24
在线时间
695 小时
最后登录
2017-9-21
发表于 2017-6-6 09:54:06 | 显示全部楼层
为什么这篇内容好像看过

回复 支持 反对

使用道具 举报

4四处流浪
337/500
排名
6865
昨日变化
5

0

主题

97

帖子

337

积分

Rank: 4

UID
128573
好友
0
蛮牛币
306
威望
0
注册时间
2015-11-11
在线时间
103 小时
最后登录
2017-9-21
QQ
发表于 2017-6-7 10:15:05 | 显示全部楼层
66666666666666666666666

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表