如何在Unity 3D中掷骰子

1、介绍

2、滚一个骰子

3、导入模型

4、添加脚本

5、方法

6、识别骰子上的随机面值

客观的

这篇文章的主要目的是给你一个关于如何在Unity 3D中掷骰子的想法。

第一步介绍

1、构建一个棋盘游戏,但对骰子有问题;这里是一个示例代码,演示如何像真正的骰子一样掷骰子,以及如何在游戏控2、制台上识别骰子的表面值。

3、这个问题分为两个主要部分:

4、如何掷骰子?

5、确定在1和6之间的随机整数(6个标准骰子)的面值。

第二步掷骰子

2.1导入模型

将一个标准骰子模型导入到unity3D中。调整转换,如图所示,并将刚体添加到它。

2.2添加脚本

现在将代码片段添加到脚本中。

请注意

这段代码可以让你滚动骰子,就像你用鼠标在屏幕上滑动一样,如果你做出了适当的改变,你可以很容易地为触摸设备转化。

if (Input.GetMouseButtonDown (0))
{
//initial click to roll a dice
initPos = Input.mousePosition;

//return x component of dice from screen to view point
initXpose = cam.ScreenToViewportPoint (Input.mousePosition).x;
}

//current position of mouse
Vector3 currentPos = Input.mousePosition;

//get all position along with mouse pointer movement
Vector3 newPos = cam.ScreenToWorldPoint (newVector3(currentPos.x,currentPos.y,Mathf.Clamp(currentPos.y/10,10,50)));

//translate from screen to world coordinates
newPos = cam.ScreenToWorldPoint (currentPos);

if (Input.GetMouseButtonUp (0))
{
initPos = cam.ScreenToWorldPoint (initPos);

//Method use to roll the dice
RollTheDice(newPos);
//use identify face value on dice
StartCoroutine(GetDiceCount ());
}

//Method Roll the Dice
void RollTheDice(Vector3 lastPos)
{
               diceObject.rigidbody.AddTorque(Vector3.Cross(lastPos, initPos) * 1000, orceMode.Impulse);
lastPos.y += 12;
diceObject.rigidbody.AddForce (((lastPos - initPos).normalized) * (Vector3.Distance (lastPos, initPos)) * 25 * duceObject.rigidbody.mass);
}

2.3方法


这就是投掷骰子方法的工作原理:


最初,在掷骰子时,增加扭矩来旋转骰子。它的外观和感觉就像真正的骰子滚动了一样。


使用lastPos和initPos的交叉乘积来计算转矩量,就像真正的骰子和鼠标移动的方向一样。


同样的力被添加到向鼠标的方向投掷骰子。

//Coroutine to get dice count
void GetDiceCount()
{
if (Vector3.Dot (transform.forward, Vector3.up) > 1)
diceCount = 5;
if (Vector3.Dot (-transform.forward, Vector3.up) > 1)
diceCount = 2;
if (Vector3.Dot (transform.up, Vector3.up) > 1)
diceCount = 3;
if (Vector3.Dot (-transform.up, Vector3.up) >1)
diceCount = 4;
if (Vector3.Dot (transform.right, Vector3.up) >1)
diceCount = 6;
if (Vector3.Dot (-transform.right, Vector3.up) >1)
diceCount = 1;
Debug.Log ("diceCount :" + diceCount);
}

第三步确定骰子的随机面值

上面的代码片段解释了如何识别骰子上的随机面值。

这个代码片段必须包含在脚本中,该脚本应用于层次结构中的骰子,而转换应该如图1所示。

点积是用来发现要考虑哪个面的。

另外,如果梯子被用来评估不同的骰子和矢量之间的点积的结果。向上和结果与1相比(意味着骰子和矢量3。向上是平行的,这确实是需要的答案)

我希望你在Unity 3D的时候发现这个博客很有帮助。如果你有任何关于Unity 3D的问题或问题,请在这里发表评论,我们会尽快回复你。

原文链接:http://www.theappguruz.com/blog/roll-a-dice-unity-3d
时间: 2024-10-08 19:35:17

如何在Unity 3D中掷骰子的相关文章

如何在Unity 3D中设置Google AdMod

在Unity中启用Google广告游戏,你需要做到如下所示:要求– Unity 4或者更高(链接:https://github.com/)– 谷歌移动广告SDK(链接:https://github.com/) 安装1.通过访问以下网址转到谷歌的游戏开发者页面:https://github.com/. 2.导航到页面上的“Unity”部分. 3.在本节将有两个按钮(如“下载插件”和“查看源代码”).点击“下载插件”按钮.这将带给你一个GitHub的页面,你可以下载“谷歌移动广告'Unity包.查找

在Unity 3D中加入Image图片

在Unity 3D中加入Image图片,我刚开是加不进去,为什么呢?因为没有图片,图如下: 原因就是我们没有把图片设置为Script,图片的格式还是默认的那个,这只能作为贴图使用.我们将图片进行如下设置就Ok了.

Unity 3D中的阴影设置

在Unity 3D中,经常需要用到光照阴影,即Directional Light的Shadow,Shadow分为Hard Shadow和Soft Shadow.区别是Soft Shadow的阴影边缘比较平滑,接近真实,但是性能消耗大于Hard Shadow. Lightmapping有3种选择:实时光照阴影(RealTimeOnly).场景烘焙阴影(BakedOnly).以及上面两者结合的阴影(Auto). RealTimeOnly:所有场景物体的光照都实时计算,实时光照对性能消耗比较大: Ba

Unity 3D中的Transform.Rotate 与Transform.RotateAround 的区别

Transform.Rotate 旋转 应用一个欧拉角的旋转角度,eulerAngles.z度围绕z轴,eulerAngles.x度围绕x轴,eulerAngles.y度围绕y轴(这样的顺序). 如果相对于留空或者设置为Space.Self 旋转角度被应用围绕变换的自身轴.(当在场景视图选择物体时,x.y和z轴显示)如果相对于 Space.World 旋转角度被应用围绕世界的x.y.z轴. 1 gameObject.transform.Rotate(new Vector3(0,1,0),Inpu

Unity 3D中不得不说的yield协程与消息传递

1. 协程 在Unity 3D中,我们刚开始写脚本的时候肯定会遇到类似下面这样的需求:每隔3秒发射一个烟花.怪物死亡后20秒再复活之类的.刚开始的时候喜欢把这些东西都塞到Update里面去,就像下面这样写. 1 float nowTime = 3.0f; 2 bool isDead = true; 3 float deadTime = 20.0f; 4 5 void startFireworks() 6 { 7 // 放烟花 8 } 9 10 void revival() 11 { 12 //

Unity 3d中Shader是什么,可以吃吗?

众所周知,Unity3d是一款跨平台非常广的游戏引擎,上手容易,界面友好,集成功能众多,是目前开发手游的主流引擎.本人有幸使用Unity 3d进行开发已一年多时间,已领略了这歀引擎的强大之处. 编写shader也是我工作内容的一部分,先来说说shader是什么吧,我以自己的理解说明一下: 首先 shader是一种语言,一种在GPU,也就是显卡上执行的高级语言.shader的本意是着色器,可以自定义GPU的渲染管线中的两个环节(即顶点和片段).由此,我们可以控制对象在屏幕上的渲染效果,甚至实现一些

(转)Unity 3D中的无限大地形的生成和调度

随着硬件性能的不断提高,游戏的地形变得越来越大也更加细节化了(增加了更有特点的地形,大片的草地,还添加了树木,水等物体.在过去几年时间里,地形已经逐渐增加到长达数百平方英里,特别是在RPG游戏中. 在本教程中,我将向您展示如何生成需要超级长的时间才能浏览完的3D地形.我们将使用Unity3D引擎和C#语言编写代码.需要一些基本的编程知识--尽管完整的源代码可以免费下载(见下文),但在本文中,我只会解释最重要的部分并说明示例的代码. 教程开始 最流行的观看3D地形的方式就是应用某种形式的高度图.高

[译]如何在Unity编辑器中添加你自己的工具

在这篇教程中你会学习如何扩展你的Unity3D编辑器,以便在你的项目中更好的使用它.你将会学习如何绘制你自己的gizmo,用代码来实现创建和删除物体,创建编辑器窗口,使用组件,并且允许用户撤销他们所作出的任何动作,这些全部都是用编辑器脚本来实现的. 这篇教程假设你已经熟悉Unity的基本工作流程.如果你知道如何在编辑器中创建物体.预设.场景并且知道如何移动它们,知道如何添加组件,那么你可以开始本教程的学习了. 最终结果预览 让我们看一下我们做出的最终结果是什么样子: 如你所见,我们会创建一个编辑

Unity 3D中的内存管理

本文欢迎转载,但烦请保留此行出处信息:http://www.onevcat.com/2012/11/memory-in-unity3d/ Unity3D在内存占用上一直被人诟病,特别是对于面向移动设备的游戏开发,动辄内存占用飙上一两百兆,导致内存资源耗尽,从而被系统强退造成极差的体验.类似这种情况并不少见,但是绝大部分都是可以避免的.虽然理论上Unity的内存管理系统应当为开发者分忧解难,让大家投身到更有意义的事情中去,但是对于Unity对内存的管理方式,官方文档中并没有太多的说明,基本需要依靠