unity中实现 幸运转轮
来源:互联网 发布:差评师数据设置 编辑:程序博客网 时间:2024/04/29 22:17
孙广东 2016.7.10
http://blog.csdn.net/u010019717
原文链接:http://www.theappguruz.com/blog/how-to-make-a-wheel-of-fortune-in-unity-the-easiest-way
项目源代码 地址: http://download.csdn.net/detail/u010019717/9575524
目标 在本期博客中,我们谈一下怎样在游戏中实轮盘赌的选转轮/幸运轮。
假设您已经知道何谓幸运轮咯。
如果你喜欢玩CandyCrush游戏,你应该无数次旋转过那个DailyBooster Wheel了。
而8 Ball Pool中的Spin & Win在游戏玩家之中也已经是耳熟能详了吧(really?)
要么你可能看过一些电视真人秀娱乐节目,人们旋转幸运轮来赢得奖励或者选择任务以赢取奖品的?
想在自己的游戏中来一个类似的幸运轮吗?
如果回答,是!那小主您就来对地方啦。
实现很简单,但你会发现有一两处颇具迷惑性,处理自然也需要些技巧哦。
表担心,我会用尽量简单的方法让你轻松学习。那么,开始吧…
1. 场景设置转轮:
- 在场景视图中设置幸运轮,确保幸运轮的每个部分大小一致。
- 在幸运轮边缘建立圆形的小碰撞器(需要建立另一个空的GameObjects来存放碰撞器)并将它们作为幸运轮的子游戏物体。
- 保持层级视图整洁,建立一个空GameObject作为碰撞器们的父物体。
http://blog.csdn.net/u010019717
箭头:
- 我就简单用黑色立方体来代表箭头,你可以按照自己的想法来。
- 为箭头添加一个BoxCollider2D和一个HingeJoint2D组件。
如果以前没用过HingeJoint2D组件,它的工作方式就像门、窗的折叶、铰链一样。
想得到你期望的效果,得花点心思在铰链组件的属性设置上哦。
你也可以参看Unity的官方参考文档
- https://docs.unity3d.com/Manual/class-HingeJoint.html
至此,完成场景的设置。效果如下图所示:
http://blog.csdn.net/u010019717
1. 编码
这次我们只需要完成一个脚本文件即可(这是好事,对吧?)
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 rotationfloat 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}}
注意
开始讲解代码前,你可以将代码与你的幸运轮GameObject关联,运行查看下游戏的效果,这样讲解起来更容易理解一些。
从代码中可以看出,我使用Animation Curves来控制轮子转动,你可以设置 不同的曲线类型以实现不同的转轮运动效果。
动画曲线如下所示:
为了访问曲线,在检视器inspector窗口中点击Curve
另外,不要忘记为奖励列表设置合适的大小。现在看下Update()方法:
- 包括2个随机数和一个协程SpeenTheWheel()
- itemNumber设置在转轮停止转动时在指针下的项
- maxAngle(或者finalAngle)表示幸运轮在结束前最终旋转的角度
【是的!在幸运轮转动前我们就知道结果啦,但是表担心,玩玩家就可以啦,原谅偶的翻译吧。】
现在看看协程SpinTheWheel():
- 在第一个timer处,初始化startAngle 和maxAngle
- 之后随机选择一个幸运轮旋转的动画曲线
其中的While循环:
- 内循环计算幸运轮z轴方向上的旋转角度。
- 此处动画曲线的Evaluate()函数返回了给定时间下曲线上的值。
至此,幸运轮旋转的实现逻辑解释结束。
现在,可以随意最后落在itemNumber的(我们一开始就知道的结果;)奖励。
现在,你也了解了为嘛永远也不要期待所谓的“大奖”或“头注”了吧!!
现在可以点击Play,旋转轮盘,赌赌自己的运气(别作弊哦)。
- unity中实现 幸运转轮
- Unity幸运转轮 实现
- Unity实现幸运大转盘
- 状态栏上的转轮实现
- Phaser教程翻译-制作一个幸运大转轮
- 5、实现幸运抽奖
- JAVA中幸运抽奖
- unity中实现断点续传功能
- 在Unity中实现TreeView
- unity中跳跃的实现
- 在Unity中实现有限状态机
- 在Unity中实现有限状态机
- Unity中Avatar换装实现
- Unity中实现UI跟随
- Unity中实现一个状态机
- Unity中实现摇杆功能
- 在Unity中实现有限状态机
- UIPickerView选择控件实现选择轮播效果(转轮效果)
- 最大流,二分法,拆点法(士兵移动 uva 12264)
- 第十一次课总结及作业
- 5个数据科学相关的Python库
- java 集合中自定义对象的几种排序方法
- C 语言 指针和数组的结合
- unity中实现 幸运转轮
- 【慢速学数据结构】集合(并查集)篇
- hdu 1232 畅通工程并查集版
- c 使用检讨循环产生的图案
- AndroidStudio使用SVN
- 二、JVM参数调试
- 水平垂直居中问题解法
- REDHAT6.5实现Nginx+Tomcat+Memcache负载均衡
- 7.5 将一个数组中的值按逆序重新存放(改)