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
}
分享到:
相关推荐
标题“DiceRoller:掷骰子的脚本和显示示例的页面”表明这是一个专注于实现骰子投掷功能的JavaScript项目。在网页开发中,这样的功能可以增加用户交互性,为各种在线游戏或概率教学提供便利。例如,在角色扮演游戏...
本文档“PHP编写的25个游戏脚本.pdf”提供了25个用PHP实现的游戏脚本示例,涵盖了从简单的骰子投掷到更复杂的随机名称生成器等多种功能。 首先,我们要了解的是PHP中的随机数生成。在游戏开发中,随机数是非常关键...
这些脚本可能包括掷骰子动作的触发、结果的显示以及与用户交互的函数。例如,当用户点击“掷骰子”按钮时,执行掷骰子的逻辑并更新界面。 6. **UI界面**:Unity的UI系统(Unity UI)用于创建用户界面,如结果显示...
在描述中,我们了解到这是一个关于MATLAB的项目,它通过编程模拟了两个骰子的投掷,条件是两个骰子的点数之和必须大于6,并且第一个骰子的点数必须大于第二个骰子的点数。这涉及到概率论和统计学的知识,因为掷骰子...
Diceee是一个简单的基于Java脚本的在线游戏,它模拟了投掷骰子的过程。这个游戏的核心在于利用JavaScript的事件监听和随机数生成功能,为用户提供一个轻松有趣的互动体验。在HTML页面中,用户只需点击鼠标左键即可...
JavaScript是一种广泛应用于网页和网络应用开发的脚本语言,它主要负责处理客户端的交互和动态效果。在这个"javascript投骰子"项目中,开发者利用原生JavaScript、CSS3以及部分ES6(ECMAScript 2015)的特性创建了一...
标题中的“lcg.rar_MATLAB色子_dice_dice matlab_lcg_matlab LCG”指的是使用MATLAB编程语言实现的线性同余发生器(LCG)来模拟色子投掷的过程。这种模拟方法常用于随机数生成,特别是对于游戏开发或者统计模拟等...
骰子通常是一个六面体,每面分别有1到6个点,当我们投掷骰子时,每个面朝上的概率都是相等的,即1/6。在计算机中模拟这个过程,我们需要生成一个随机数,这个随机数对应骰子的一个面值。在大多数编程语言中,我们...
这表明我们将讨论一个简单的应用,其功能是模拟掷骰子的过程,可能是为了游戏或概率学习的目的。Vue 3的使用意味着开发者利用了Vue的新特性和性能提升来创建这个交互式的组件。 在项目设置部分,`npm install`命令...
在实际的掷色子游戏中,每个参与者投掷一个或多个人工或电子色子,根据点数决定胜负。在数字世界里,我们通常使用随机数生成器来模拟这个过程。PHP中的`mt_rand()`或`rand()`函数可以生成指定范围内的随机整数,以此...
CSS3 Animation提供的简单3D骰子滚动动画制作器。 香草JS 将dist / roll-a-die.js复制到您的库文件夹中将其加载到HTML脚本中 [removed][removed] 您可以使用链接...
"D-10 Dice Roller" 是一个专为WOD系统设计的PowerShell脚本,可以帮助玩家快速、方便地模拟掷骰过程,尤其适用于那些没有实体骰子或者需要大量掷骰计算的场合。 **PowerShell与WOD游戏规则** PowerShell是...
例如,掷骰子脚本可以进一步扩展为处理更复杂的概率计算,如复合骰子投掷(3d10 表示掷三个10面的骰子)。随机名称生成器可以增加更多的名字和姓氏库,甚至实现更复杂的命名规则,比如考虑性别、文化背景等。 4. **...
这通常涉及到随机数生成,以模拟真实的骰子投掷结果。微信小程序提供了wx.randomObject()函数来生成随机数,我们可以利用这个函数来决定骰子的点数。此外,还要编写事件监听器,当用户点击掷骰子按钮时,触发掷骰子...
在这个项目中,Perl脚本能够解析复杂的骰子规则,如投掷多个骰子并计算总和,或者执行特定的游戏规则,如排除最小值或最大值,这对于角色扮演游戏(RPG)和其他需要随机数生成的游戏至关重要。 "Simplified CLI ...
在游戏开发中,随机数生成是一项非常重要的功能,尤其是在模拟骰子投掷等场景时。在 PHP 中,有两种常用的方法来生成随机数:`rand()` 和 `mt_rand()`。 - **`rand()` 函数**:此函数用于生成一个介于指定范围内的...
总结来说,"CD.zip_dice"中的两个MATLAB脚本——`CoinToss.m`和`ThrowDice.m`——提供了实现Monte Carlo模拟硬币翻转和骰子投掷的方法。它们通过生成随机数来模拟现实世界的随机事件,并通过大量重复实验来获得统计...
在这个简单的DiceGame中,可能的规则是玩家点击一个按钮,系统模拟投掷骰子并显示结果,然后根据结果决定玩家的得分或其他游戏行为。 让我们开始编写代码。在HTML文件中,我们需要创建一个用户界面,包括一个显示...
"SecretDice-master"可能包含了游戏的源代码、智能合约部署脚本、测试用例以及其他开发相关资源。通过查看和分析这些文件,开发者可以深入理解Secret Dice的实现细节,包括如何编写和部署Secret Contract,以及如何...