using UnityEngine;
using System;
// 一个为摇色子服务的脚本
// 色子朝上的面默认为世界空间的正方向,只用1,2,3来定义世界空间
// 的向量,比如1代表世界的上,2代表右,3代表前
public delegate void RollCompleteEvent(object sender, int faceUp);
// 这个类代表一个六面色子的行为. 当这个类加载的时候,色子会以机
//作加载在空中。
// 当色子停下后 event RollComplete 会被激活
public sealed class DieBehaviour : MonoBehaviour {
#region "Events"
public event RollCompleteEvent RollComplete;
#endregion
#region "Private Members"
//色子可能的朝向
//Vector3.up 1(+) or 6(-)
//Vector3.right, 2(+) or 5(-)
//Vector3.forward]; 3(+) or 4(-)
Vector3[] _sides = {Vector3.up, Vector3.right, -Vector3.forward };
//声明isSleeping变量为否,即开始加载rigidbody给色子
private bool _isSleeping = false;
#endregion
#region "Private Methods"
//寻找色子哪个面朝上,将结果返回
private int WhichIsUp()
{
//定义maxY为负无穷
float maxY = float.NegativeInfinity;
int result = -1;
for(int i=0; i < 3; i++) {
//转换物体朝向到世界空间
Vector3 worldSpace = transform.TransformDirection(_sides[i]);
// 测试哪面的y值更高 测正方向的面 1(+) 2(+) 3(+)
if(worldSpace.y > maxY)
{
result = i+1;
maxY = worldSpace.y;
}
// 测试反方向的面 6(-) 5(-) 4(-)
if(-worldSpace.y > maxY)
{
result = 6-i;
maxY=-worldSpace.y;
}
}
return result;
}
// 查看色子是否停止滚动,使rigidbody睡眠,即暂停
private bool IsAtRest()
{
_isSleeping = rigidbody.IsSleeping();
return _isSleeping;
}
#endregion
#region "Unity Called Methods/Events"
private void Start ()
{
// 以随机的方法投掷色子
rigidbody.AddRelativeTorque(Vector3.up * ((UnityEngine.Random.value * 20) + 10));
rigidbody.AddRelativeTorque(Vector3.forward * ((UnityEngine.Random.value * 20) + 10));
rigidbody.AddRelativeTorque(Vector3.right * ((UnityEngine.Random.value * 20) + 10));
rigidbody.AddRelativeForce(Vector3.up * ((UnityEngine.Random.value * 120) + 30));
rigidbody.AddRelativeForce(Vector3.left * ((UnityEngine.Random.value * 170) + 30));
}
private void Update ()
{
// 仅仅投掷得到结果1次
if(!_isSleeping)
{
if(IsAtRest())
{
if(RollComplete != null)
RollComplete(this,WhichIsUp());
}
}
}
#endregion
}
分享到:
相关推荐
C++程序课程设计_投掷骰子游戏 程序很全的,欢迎下载
有关投掷骰子的写法,主要是考链表 输入投掷的次数 然后排名
本实验使用MFC模拟骰子投掷多次,对数量和进行统计,并显示出来。当骰子个数大于2,且投掷次数很多时,和的分布呈现高斯分布~~~
投掷骰子小程序源码,有需要的自行下载
建立一个VI,模拟掷骰子游戏(骰子可能取值1~6),跟踪骰子投掷滚动后各面取值出现的次数。程序输入骰子投掷次数,输出包括投掷后骰子各面的出现次数。只用一个移位寄存器实现此功能。
一个简单的投掷硬币、骰子模拟器,可以计算投掷指定次数后各种结果的概率并以饼状图显示,使用C#winform编写,有感兴趣的可以联系我免费分享源码,适用于教学
连续投掷一颗骰子直至6个结果中有一个结果出现两次,记录投掷的次数。 连续投掷一颗骰子直至6个结果中有一个结果接连出现两次,记录投掷的次数。 连续投掷一枚硬币直至正面出现,观察正反面出现的情况。 抛一枚硬币...
下面的类模拟掷一个骰子:使用这个类来创建图表前,先来掷 D6 骰子,将结果打印出来,并检查结果是否合理:为分析掷一个 D6 骰子的结果,我们计算每个点数出现的次数有了频率列表后,我们就可以绘制一个表示结果的...
小学二年级正面投掷轻物教学设计说明.doc
前几天需要一个色子的投掷并且获得朝上点数的Unity脚本,在网上找了很多,都是一个模子刻出来的。 对于2018版的我来说,网上找的都是很早就弃用了的老版本。 好不容易能运行了,结果并不理想,于是又突发奇想做了一...
模拟实现骰子游戏。 基本要求 1 通过按某键模拟投掷骰子。 2 模拟显示骰子的旋转,经过一段时间后骰子静止,根据...2 模拟投掷骰子的力度,通过按某键的时间长短或两次按键之间的时间间隔,控制骰子的旋转时间和转速
小学三年级《原地侧向投掷垒球》教学设计说明.doc
1 任务 模拟实现骰子游戏。 2 基本要求 1 通过按某键模拟投掷骰子。 2 模拟显示骰子的旋转,经过一段时间后骰子...2 模拟投掷骰子的力度,通过按某键的时间长短或两次按键之间的时间间隔,控制骰子的旋转时间和转速。
输入投掷骰子的次数,显示骰子六个面随机产生的次数
使用随机数而变的一个无聊的小游戏
小学体育课投掷垒球教学设计说明.doc
在碰运气游戏中最常见到的是“投掷双骰子”游戏,这种游戏在影视作品中经常会见到, 游戏规则实际上很简单:游戏者每次投掷两颗骰子,每个骰子是一个正方体,有6面,上面分别标有1、2、3、4、5、6个圆点,当骰子停止...
。。。
一个考试题,创建VI模仿掷骰子(可能的值为1~6),记录每个值出现的次数。输入掷骰子的次数,输出每个值。
小学六年级体育助跑交叉步侧向投掷垒球教学设计说明.doc