今天我们来做点和游戏无关的事情吧!因为博主在找工作的过程中遇到些挫折,所以难免会有些失落,因此实在心情和精力再去完成新的游戏案例,希望大家能够谅解啊。博主今天想和大家分享的是一个叫做幸运转盘的案例。我们知道平时在节假日商场为了促销商品,通常都会推出诸如转盘抽奖这样的游戏。在学了概率以后,虽然我们都知道中奖是一个小概率事件,可是人们对买彩票中奖这样的事情仍然乐此不疲。就像腾讯通过今年的春晚成功地为微信支付培养了大量忠实用户一样,虽然大家抢红包抢到的钱都不算多,可是大家都还是愿意去抢红包啊。为什么呢?呵呵,不就图一乐嘛。好了,那么下面我们一起乐一乐吧,因为激动人心的抽奖环节就要开始了!
首先我们来看看在Unity3D中如何实现转盘抽奖:
从这张图片我们可以看出,转盘抽奖有两部分组成:转盘是可以旋转的、转盘指针是固定不动的。那么,好了,抽奖无非就是让转盘转起来然后再停下来嘛,直接给出代码:
using UnityEngine;
using System.Collections;
public class LuckyRoll : MonoBehaviour {
//幸运转盘
private Transform mRoolPanel;
//初始旋转速度
private float mInitSpeed;
//速度变化值
private float mDelta=0.5f;
//转盘是否暂停
private bool isPause=true;
void Start ()
{
//获取转盘
mRoolPanel=this.transform.FindChild("Background");
}
//开始抽奖
public void OnClick()
{
if(isPause)
{
//随机生成一个初始速度
mInitSpeed=Random.Range(100,500);
//开始旋转
isPause=false;
}
}
void Update()
{
if(!isPause)
{
//转动转盘(-1为顺时针,1为逆时针)
mRoolPanel.Rotate(new Vector3(0,0,-1) * mInitSpeed * Time.deltaTime);
//让转动的速度缓缓降低
mInitSpeed-=mDelta;
//当转动的速度为0时转盘停止转动
if(mInitSpeed<=0)
{
//转动停止
isPause=true;
}
}
}
}
这里我们随机给出一个速度mInitSpeed,然后让它按照mDelta的速率缓慢的减少,当mInitSpeed的数值为0时表示转盘停止转动。好了,我们来看看最后的效果:
从现在的效果来看,这个案例基本上成功了,所以以后如果碰到需要这种抽奖活动的场合,大家就可以跟美术协调好,快速地制作出这样一个幸运转盘来向身边的人们炫耀了。不过这个案例同样存在问题:
* 基于随机数的转盘转动不受玩家控制,玩家无法参与到互动当中,可以考虑触摸操作,这样可以根据玩家的操作来模拟转动,提高游戏的真实性和可玩性。
* 因为抽奖的结果是由美术设计在转盘上的,所以程序无法根据转盘停止后指针的位置直接判断出玩家抽奖的结果以及本次抽奖是否为有效的抽奖(指针恰好停留在两个扇形区域的分界线上)。
* 因为这里转盘的旋转并没有严格地按照实际情况下转盘的受力情况来设计,因此可以说这个游戏中的概率分布可能不是均匀的,因此计算机里使用的随机数是伪随机数。
好了,暂时就发现这些问题,如果有朋友知道如何模拟触屏操作和阻尼运动,可以在这篇文章后面给我留言,今天的内容就是这样了,希望大家会喜欢!
原文:http://blog.csdn.net/qinyuanpei/article/details/44279619