读书人

容易投掷色子的脚本翻译及说明

发布时间: 2012-10-18 13:46:55 作者: rapoo

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

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} 

?

读书人网 >互联网

热点推荐