`
whuthj
  • 浏览: 72498 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

简单投掷色子的脚本翻译及说明

阅读更多
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:掷骰子的脚本和显示示例的页面

    标题“DiceRoller:掷骰子的脚本和显示示例的页面”表明这是一个专注于实现骰子投掷功能的JavaScript项目。在网页开发中,这样的功能可以增加用户交互性,为各种在线游戏或概率教学提供便利。例如,在角色扮演游戏...

    PHP编写的25个游戏脚本.pdf

    本文档“PHP编写的25个游戏脚本.pdf”提供了25个用PHP实现的游戏脚本示例,涵盖了从简单的骰子投掷到更复杂的随机名称生成器等多种功能。 首先,我们要了解的是PHP中的随机数生成。在游戏开发中,随机数是非常关键...

    Unity3D掷筛子游戏源码

    这些脚本可能包括掷骰子动作的触发、结果的显示以及与用户交互的函数。例如,当用户点击“掷骰子”按钮时,执行掷骰子的逻辑并更新界面。 6. **UI界面**:Unity的UI系统(Unity UI)用于创建用户界面,如结果显示...

    mengtekaluo.rar_MATLAB抛色子_matlab掷骰子_matlab编写dice_蒙特卡洛_骰子

    在描述中,我们了解到这是一个关于MATLAB的项目,它通过编程模拟了两个骰子的投掷,条件是两个骰子的点数之和必须大于6,并且第一个骰子的点数必须大于第二个骰子的点数。这涉及到概率论和统计学的知识,因为掷骰子...

    Diceee:使用Java脚本的基本骰子游戏

    Diceee是一个简单的基于Java脚本的在线游戏,它模拟了投掷骰子的过程。这个游戏的核心在于利用JavaScript的事件监听和随机数生成功能,为用户提供一个轻松有趣的互动体验。在HTML页面中,用户只需点击鼠标左键即可...

    javascript投骰子

    JavaScript是一种广泛应用于网页和网络应用开发的脚本语言,它主要负责处理客户端的交互和动态效果。在这个"javascript投骰子"项目中,开发者利用原生JavaScript、CSS3以及部分ES6(ECMAScript 2015)的特性创建了一...

    lcg.rar_MATLAB色子_dice_dice matlab_lcg_matlab LCG

    标题中的“lcg.rar_MATLAB色子_dice_dice matlab_lcg_matlab LCG”指的是使用MATLAB编程语言实现的线性同余发生器(LCG)来模拟色子投掷的过程。这种模拟方法常用于随机数生成,特别是对于游戏开发或者统计模拟等...

    shaizi.rar_掷骰子

    骰子通常是一个六面体,每面分别有1到6个点,当我们投掷骰子时,每个面朝上的概率都是相等的,即1/6。在计算机中模拟这个过程,我们需要生成一个随机数,这个随机数对应骰子的一个面值。在大多数编程语言中,我们...

    掷骰子:小Vue 3掷骰子应用程序

    这表明我们将讨论一个简单的应用,其功能是模拟掷骰子的过程,可能是为了游戏或概率学习的目的。Vue 3的使用意味着开发者利用了Vue的新特性和性能提升来创建这个交互式的组件。 在项目设置部分,`npm install`命令...

    PHP实现最新京东白条掷色子抽奖源代码.zip

    在实际的掷色子游戏中,每个参与者投掷一个或多个人工或电子色子,根据点数决定胜负。在数字世界里,我们通常使用随机数生成器来模拟这个过程。PHP中的`mt_rand()`或`rand()`函数可以生成指定范围内的随机整数,以此...

    掷骰:使用CSS3动画的简单3D骰子掷骰

    CSS3 Animation提供的简单3D骰子滚动动画制作器。 香草JS 将dist / roll-a-die.js复制到您的库文件夹中将其加载到HTML脚本中 [removed][removed] 您可以使用链接...

    D-10 Dice Roller:用于 WOD 游戏系统的 PowerShell D-10 骰子滚轮脚本-开源

    "D-10 Dice Roller" 是一个专为WOD系统设计的PowerShell脚本,可以帮助玩家快速、方便地模拟掷骰过程,尤其适用于那些没有实体骰子或者需要大量掷骰计算的场合。 **PowerShell与WOD游戏规则** PowerShell是...

    PHP 编写的 25个游戏脚本

    例如,掷骰子脚本可以进一步扩展为处理更复杂的概率计算,如复合骰子投掷(3d10 表示掷三个10面的骰子)。随机名称生成器可以增加更多的名字和姓氏库,甚至实现更复杂的命名规则,比如考虑性别、文化背景等。 4. **...

    微信小程序 麻将骰子:附详细教程 (源码)

    这通常涉及到随机数生成,以模拟真实的骰子投掷结果。微信小程序提供了wx.randomObject()函数来生成随机数,我们可以利用这个函数来决定骰子的点数。此外,还要编写事件监听器,当用户点击掷骰子按钮时,触发掷骰子...

    Simplified CLI Dice Rollers:Perl脚本,用于各种游戏系统的掷骰子-开源

    在这个项目中,Perl脚本能够解析复杂的骰子规则,如投掷多个骰子并计算总和,或者执行特定的游戏规则,如排除最小值或最大值,这对于角色扮演游戏(RPG)和其他需要随机数生成的游戏至关重要。 "Simplified CLI ...

    25个PHP游戏编程脚本代码

    在游戏开发中,随机数生成是一项非常重要的功能,尤其是在模拟骰子投掷等场景时。在 PHP 中,有两种常用的方法来生成随机数:`rand()` 和 `mt_rand()`。 - **`rand()` 函数**:此函数用于生成一个介于指定范围内的...

    CD.zip_dice

    总结来说,"CD.zip_dice"中的两个MATLAB脚本——`CoinToss.m`和`ThrowDice.m`——提供了实现Monte Carlo模拟硬币翻转和骰子投掷的方法。它们通过生成随机数来模拟现实世界的随机事件,并通过大量重复实验来获得统计...

    DiceGame:一个简单的基于js的骰子游戏

    在这个简单的DiceGame中,可能的规则是玩家点击一个按钮,系统模拟投掷骰子并显示结果,然后根据结果决定玩家的得分或其他游戏行为。 让我们开始编写代码。在HTML文件中,我们需要创建一个用户界面,包括一个显示...

    SecretDice:一个简单的掷骰子游戏,作为秘密合同而实现

    "SecretDice-master"可能包含了游戏的源代码、智能合约部署脚本、测试用例以及其他开发相关资源。通过查看和分析这些文件,开发者可以深入理解Secret Dice的实现细节,包括如何编写和部署Secret Contract,以及如何...

Global site tag (gtag.js) - Google Analytics