Unity3D实现简单的抽奖程序
下面是具体的代码,注意,我这里用到了NGUI这个插件。大概的原理很简单,就用了2张图片Sprite,同时向下移动,当上面一张图片移动到下面一张图片原来的位置时,就把这2张图片向上移到初始的位置。这时,还需要交换显示图片,接着继续移动即可。为了显示很多滚动图片,只需要不断改变图片名字即可。代码中,抽奖部分使用了概率控制的随机抽取。当我们确定了rollingCountTarget这个变量时,就确定了最终抽奖结果,在Update函数里判断,如果遇到这个结果便停下来。当然,速度也要控制好。如果你用NGUI的话,只需要给脚本绑定两个Sprite图片即可,同时把Panel对象的Clipping设为Soft Clip,设定好显示范围即可。
public UISprite Icons;//中间的图片
public UISprite IconsA;//上方的图片
private float rollSpeed;//滚动速度变量
private int rollingCount;//图片滚动次数变量
private int rollingCountTarget;//目标图片滚动次数
private Vector3 originPos;//图片原始位置
private Vector3 originPosA;//上方图片原始位置
private float rollCount;//总的滚动次数
private string[] LotteryImageNames;//图片名字数组
private bool IsRolling;
;//可以抽到的物品类型数目
private const float maxRollSpeed = 2.0f;//最大滚动速度
private const float minRollSpeed = 0.4f;//最小滚动速度
void Start()
{
rollCount = ;
IsRolling = false;
//初始化图片原始位置
originPos = Icons.transform.position;
originPosA = IconsA.transform.position;
//先不显示图片
Icons.enabled = false;
IconsA.enabled = false;
//初始化要滚动的图片名字数组
LotteryImageNames = new string[LotteryItemTypeCount];
LotteryImageNames[] = "Joey_Equipment01";
LotteryImageNames[] = "Joey_Equipment02";
LotteryImageNames[] = "Joey_Equipment03";
LotteryImageNames[] = "Joey_Equipment04";
LotteryImageNames[] = "Joey_Equipment05";
LotteryImageNames[] = "Joey_Equipment06";
LotteryImageNames[] = "Joey_Equipment01";
}
void Update()
{
if (IsRolling)
{
Icons.transform.Translate(Vector3.down * Time.deltaTime * rollSpeed);
IconsA.transform.Translate(Vector3.down * Time.deltaTime * rollSpeed);
if (IconsA.transform.position.y <= originPos.y)
{
Icons.transform.position = new Vector3(Icons.transform.position.x, originPos.y, Icons.transform.position.z);
IconsA.transform.position = new Vector3(IconsA.transform.position.x, originPosA.y, IconsA.transform.position.z);
rollingCount++;
//互换图片
Icons.spriteName = IconsA.spriteName;
IconsA.spriteName = LotteryImageNames[(rollingCount + ) % LotteryItemTypeCount];
rollSpeed = rollSpeed - (maxRollSpeed - minRollSpeed) / (rollingCountTarget + LotteryItemTypeCount * rollCount);
}
if (rollingCount == rollingCountTarget + LotteryItemTypeCount * rollCount)
{
IsRolling = false;
IconsA.enabled = false;
}
}
}
//用随机数确定图片需要滚动的次数,同时控制随机概率
public void GenerateRollingCount()
{
, );
&& num < )
{
rollingCountTarget = ;
}
&& num < )
{
rollingCountTarget = ;
}
&& num < )
{
rollingCountTarget = ;
}
&& num < )
{
rollingCountTarget = ;
}
&& num < )
{
rollingCountTarget = ;
}
&& num < )
{
rollingCountTarget = ;
}
&& num < )
{
rollingCountTarget = ;
}
}
//抽奖按钮
void Lottery()
{
GenerateRollingCount();
rollingCount = ;
rollSpeed = maxRollSpeed;
IsRolling = true;
Icons.enabled = true;
IconsA.enabled = true;
}
Unity3D实现简单的抽奖程序的更多相关文章
- JavaScript编写简单的抽奖程序
1.需求说明 某公司年终抽奖,需要有如下功能 1)可以根据实际情况设置到场人数的最大值 2) 点击“开始”,大屏幕滚动,点击“停止”,获奖者的编号出现在大屏幕上 3)在界面里显示全部奖项获奖人编号 4 ...
- 使用jQuery+PHP+Mysql实现抽奖程序
抽奖程序在实际生活中广泛运用,由于应用场景不同抽奖的方式也是多种多样的.本文将采用实例讲解如何利用jQuery+PHP+Mysql实现类似电视中常见的一个简单的抽奖程序. 查看演示 本例中的抽奖程序要 ...
- 如何用 Python 写一个简易的抽奖程序
不知道有多少人是被这个头图骗进来的:) 事情的起因是这样的,上周有同学问小编,看着小编的示例代码敲代码,感觉自己也会写了,如果不看的话,七七八八可能也写的出来,但是一旦自己独立写一段程序,感觉到无从下 ...
- jQuery幸运大转盘_jQuery+PHP抽奖程序的简单实现
jQuery幸运大转盘_jQuery+PHP抽奖程序的简单实现 在线实例 查看演示 完整代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...
- 简单的javascript抽奖程序
<html> <head> <title>手机号码抽奖程序</title> <script> //声明一个数组装住号码,可根 ...
- sql的行转列(PIVOT)与列转行(UNPIVOT) webapi 跨域问题 Dapper 链式查询 扩展 T4 代码生成 Demo (抽奖程序)
sql的行转列(PIVOT)与列转行(UNPIVOT) 在做数据统计的时候,行转列,列转行是经常碰到的问题.case when方式太麻烦了,而且可扩展性不强,可以使用 PIVOT,UNPIVOT比 ...
- Unity3D中简单的C#异步Socket实现
Unity3D中简单的C#异步Socket实现 简单的异步Socket实现..net框架自身提供了很完善的Socket底层.笔者在做Unity3D小东西的时候需要使用到Socket网络通信.于是决定自 ...
- 利用Python写一个抽奖程序,解密游戏内抽奖的秘密
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 极客挖掘机 PS:如有需要Python学习资料的小伙伴可以加点击下 ...
- javascript实现抽奖程序
昨天开年会的时候看到一个段子说唯品会年会抽奖,结果大奖都被写抽奖程序的部门得了,CTO现场review代码. 简单想了一下抽奖程序的实现,花了十几分钟写了一下,主要用到的知识有数组添加删除,以及ES5 ...
随机推荐
- Unity3D开发之查找面板上某个脚本(包括Missing)
原地址:http://blog.csdn.net/lihandsome/article/details/24265411 有时候我们需要知道某个脚本在场景上面哪里用到,或者那个脚本被删除了但又没有把相 ...
- [Unity菜鸟] Unity发布web后,从HTML调用本地文件
1. 遇到的问题 从xml读数据,xml的编码用中文就会乱码,改编码格式就调用不了.目前采用默认的ANSI编码. .exe .txt .xlsx .xml .test Run √ ...
- PHP设计模式浅析
工厂模式 提到的最多, 用途也最广. 简单说就是: 定义一个用户创建对象的接口. 把创建对象的过程封装起来. 工厂类是指包含一个专门用来创建其他对象的方法的类,工厂类在多态性编程实践中是至关重要的,它 ...
- sqlmap批量扫描burpsuite请求日志记录
sqlmap可以批量扫描包含有request的日志文件,而request日志文件可以通过burpsuite来获取, 因此通过sqlmap结合burpsuite工具,可以更加高效的对应用程序是否存在SQ ...
- php 23种设计模式的趣味解释
http://wenku.baidu.com/link?url=GwvuvSOdJneZQc-DSKoGmPcxTtzn3cdtIp3fRaCNbkg1zJDZZZTx2NwEK5IsqU996fG3 ...
- 中断服务程序不用interrupt关键字也可实现中断,该关键字是否必须?
2013-06-20 11:13:35 中断服务程序不用interrupt关键字也可实现中断,该关键字是否必须? 使用tools->pin connect,将INT5与pin.txt关联,模拟外 ...
- Windows 各种计时函数总结
本文对Windows平台下常用的计时函数进行总结,包括精度为秒.毫秒.微秒三种精度的 5种方法.分为在标准C/C++下的二种time()及clock(),标准C/C++所以使用的time()及cloc ...
- xcopy 复制了0个文件
xcopy /Y "..\..\..\SolutionItems\zbmyuncore.db" "..\ZITaker" 复制zbmyuncore.db文件的时 ...
- 解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
这是我后台SpringMVC控制器接收isform参数的方法,只是简单的打出它的值: @RequestMapping(method = RequestMethod.POST) @ResponseBod ...
- Vim cscope
/********************************************************************** * Vim cscope * 说明: * 之前使用Vim ...