随笔分类 -  3D

Virtual Reality
摘要:1、轴向偏转MAX模型导入Unity3D后,X轴会自动偏转-90度。是因为Unity3D采用的是左手坐标系,而3DMax采用的是右手坐标系。无奈啊,这是很多游戏引擎跟Max结合后都会产生的问题。兼容性问题!!傻X啊MAX。这世界上绝大多数三维软件都TMD的是左手,你非要右手。。主流啊主流。。。也就是说MAX进入Unity3D后,Z轴就会向上,而空间坐标是Y轴向上。别认为是什么小问题。。如果用程序控制物体指向时,麻烦就大了。妈逼。。解决方案:把模型导3DS文件,再进Unity3D就不会有问题。而不是官方建议的FBX。FBX跟MAX没差。MAX有什么问题FBX同样有那问题。(FBX里的导出设置里的 阅读全文
posted @ 2013-12-13 10:11 马语者 阅读(4680) 评论(0) 推荐(0) 编辑
摘要:JS// Starting in 2 seconds.// a projectile will be launched every 0.3 secondsvar projectile :Rigidbody;InvokeRepeating("LaunchProjectile", 2, 0.3);function LaunchProjectile () {instance = Instantiate(prefab);instance.velocity =Random.insideUnitSphere* 5;}C#using UnityEngine;using System.Co 阅读全文
posted @ 2013-09-05 16:30 马语者 阅读(11297) 评论(0) 推荐(0) 编辑
摘要:Gizmos 类 Gizmos用于场景中给出一个可视化的调试或辅助设置。 所有的Gizmos绘制都必须在脚本的OnDrawGizmos或OnDrawGizmosSelected函数中完成。 OnDrawGizmos在每一帧都被调用。所有在OnDrawGizmos内部渲染的Gizmos都是可见的。 OnDrawGizmosSelected尽在脚本所附加的物体被选中时调用。 类变量 ◆ static var color : Color // 描述:设置下次绘制的Gizmos的颜色。 function OnDrawGizmosSelected() { Gizmos.color = Color.red 阅读全文
posted @ 2013-07-25 15:49 马语者 阅读(15955) 评论(0) 推荐(0) 编辑
摘要:写游戏代码,往往最终需要代码为连续的事件.结果会像这样:[它可以实现将一段程序延迟执行或者将其各个部分分布在一个时间段内连续执行。][csharp]view plaincopyprint?privateintstate=0;voidUpdate(){if(state==0){//做步骤0state=1;return;}if(state==1){//做步骤1state=2;return;}//...}往往使用yield语句更为方便.yield语句是一个特殊的返回类型,它确保函数从yield语句的下一行继续执行.[csharp]view plaincopyprint?while(true){//做 阅读全文
posted @ 2013-07-25 15:02 马语者 阅读(3985) 评论(0) 推荐(0) 编辑
摘要:就是在做项目的过程中,有用到三角形的,今天就写一下如何自定义三角形? 先截个图,让大家有个感性认识! //引用 using UnityEngine; using System.Collections; public class Draw : MonoBehaviour {//三个物体的变换 public Transform a1; public Transform a2; public Transform a3;void Awake() { //添加Mesh Filter(模型网格)和Mesh Renderer(模型渲染)组件 gameObject.AddComponent(); gameOb 阅读全文
posted @ 2013-07-24 16:55 马语者 阅读(1404) 评论(0) 推荐(0) 编辑
摘要:Unity3D自带的MonoDevelop编辑器无论是js还是c#代码提示都很差,很诡异的就是变量名和方法名有的时候提示有的时候不提示。不过用Visual Studio代替MonoDevelop这个问题就可以解决了。(只限c#,Unity3D里的js不是原生的js,不建议在Visual Studio中编辑)在Unity3D 4中关联Visual Studio 2012的步骤:1.在Unity3d中选择菜单Edit->Preferences2.在弹出窗口点击External Tools->External Script Editor右侧的下拉列表并选择Browse。3.在弹出窗口中定 阅读全文
posted @ 2013-07-24 10:54 马语者 阅读(4968) 评论(0) 推荐(0) 编辑
摘要:今天我也遇到这个版本更换问题。老外也遇到了的!哈哈。错误提示是:Fatal error!type = =kMetaAssetType & pathName.find("library/metadata")! = 0图片:如果没碰到这个问题就是好事。不过这个问题很容易遇到。为什么?????答案是: 3.5.5和后面相继的版本的 实例文件安装都是在 一个文件下:C:\Documents and Settings\All Users\Documents\Unity Projects可是 卸载的时候 untiy3d并不会卸载掉实例, 在安装新的版本的时候 如果没有覆盖掉就会 阅读全文
posted @ 2013-07-24 10:39 马语者 阅读(3150) 评论(0) 推荐(0) 编辑
摘要:static vardeltaTime: floatDescription描述The time in seconds it took to complete the last frame (Read Only).以秒计算,完成最后一帧的时间(只读)。Use this function to make your game frame rate independent.使用这个函数使和你的游戏帧速率无关。放在Update()函数中的代码是以帧来执行的.如果我们需要物体的移动以秒来执行.我们需要将物体移动的值乘以Time.deltaTime。If you add or subtract to a v 阅读全文
posted @ 2013-07-19 11:26 马语者 阅读(1431) 评论(0) 推荐(0) 编辑
摘要:Unity中Update和Lateupdate的区别。Lateupdate和Update每一祯都被执行,但是执行顺序不一样,先执行Updatee然后执行lateUpdate。如果你有两个脚本JS1、JS2,两个脚本中都有Update()函数, 在JS1中有 lateUpdate ,JS2中没有。那么 lateUpdate 函数会等待JS1、JS2两个脚本的Update()函数 都执行完后才执行。也就是说, 如果现在有100个脚本,分别有100个 Update()函数,其中只有一个LateUpdate,那么在同一祯中,等待100个Update()执行完后,才执行这一个lateUpdate()。这 阅读全文
posted @ 2013-07-19 11:24 马语者 阅读(14477) 评论(2) 推荐(1) 编辑
摘要:I know how to make the raycast ignore a layer but I want it to ignore layers 9 and 10 but collide with the rest of the layers.I would do it the other way round: declare the variable private and use theSerializeFieldattribute. This way you can edit the variable in the inspector and keep it private so 阅读全文
posted @ 2013-07-19 10:48 马语者 阅读(888) 评论(0) 推荐(0) 编辑
摘要:Message相关有3条指令:SendMessage ("函数名",参数,SendMessageOptions)//GameObject自身的ScriptBroadcastMessage("函数名",参数,SendMessageOptions)//自身和子Object的ScriptSendMessageUpwards("函数名",参数,SendMessageOptions)//自身和父Object的Script用于向某个GameObject发送一条信息,让它完成特定功能。其实本质是调用那个GameObject里面的Script里面的函 阅读全文
posted @ 2013-07-17 11:37 马语者 阅读(30190) 评论(0) 推荐(1) 编辑
摘要:StartCoroutine在unity3d的帮助中叫做协程,意思就是启动一个辅助的线程。在C#中直接有Thread这个线程,但是在unity中有些元素是不能操作的。这个时候可以使用协程来完成。使用线程的好处就是不会出现界面卡死的情况,如果有一次非常大量的运算,没用线程就会出现假死的情况。下面通过一个简单的例子来说明使用协程的好处:[csharp]view plaincopyvoidOnGUI(){GUI.Label(newRect(0,0,200,50),"测试1:"+result);if(GUI.Button(newRect(0,100,100,50),"开启 阅读全文
posted @ 2013-07-13 18:03 马语者 阅读(25642) 评论(0) 推荐(1) 编辑
摘要:Unity3D初学者经常把Awake和Start混淆。简单说明一下,Awake在MonoBehavior创建后就立刻调用,Start将在MonoBehavior创建后在该帧Update之前,在该Monobehavior.enabled == true的情况下执行。[javascript]view plaincopyvoidAwake(){}//初始化函数,在游戏开始时系统自动调用。一般用来创建变量之类的东西。voidStart(){}//初始化函数,在所有Awake函数运行完之后(一般是这样,但不一定),在所有Update函数前系统自动条用。一般用来给变量赋值。我们通常书写的脚本,并不会定义[ 阅读全文
posted @ 2013-07-08 15:11 马语者 阅读(38881) 评论(1) 推荐(2) 编辑
摘要:上次讲的是Transparent Shader Family,他们是绘制半透明的对象使用的,但他们并不能满足我们全部的要求。 Transparent Cutout Shader Family是对半透明对象Shader的一类补充,与Transparent Shader Family有所区别的是:Cutout Shader Faimily中的Shaders不允许绘制部分透明的区域。就是说,使用这种Shader绘制出来的对象,要么是全透明,要么是半透明。使用这个家族Shader的对象通常用来转换和接受阴影。半透明对象中常有的排序问题在使用这类Shader的时候不存在。 这个家族里面的所有Shader 阅读全文
posted @ 2013-07-03 10:25 马语者 阅读(1501) 评论(0) 推荐(0) 编辑
摘要:这次主要讨论Unity自带的Shader中Transparent Shader Family 这个家族的Shader一共7种,原理和类型与Normal中的上差不多,只不过这些Shader是用在半透明或者全透明的物体上面的。他们的主纹理接受RGBA4个通道。如果你的模型一部分是半透明,一部分是不透明的。请分开使用两张材质,半透明的材质这个家族的Shader。这个家族的Shader的内容和Normal中同名的几乎一样,只是添加了半透明效果,因此不再做重复介绍。 通过读取纹理中的alpha值,这个Transparent家族的shader可以让模型变成半透明或者全透明的。在alpha中,0表示全透明, 阅读全文
posted @ 2013-07-03 10:24 马语者 阅读(1649) 评论(0) 推荐(0) 编辑
摘要:Unity3D内置了很多Shader,文档很详细,自己翻一下.便于加深印象.首先先解释下Unity3D的Shader.Unity里面的Shaders是使用一种叫ShaderLab的语言编写的,它同微软的.FX文件或者NVIDIA的CgFX有些类似。传统意义上的vertex shader和pixel shader 还是使用标准的Cg/HLSL 编程语言编写的。(因此Unity文档里面的Shader,都是指用ShaderLab编写的代码) 然后我们来看下Unity3D自带的60多个Shader。 这些Shader被分为五个大类:Normal,Transparent,Transparent Cuto 阅读全文
posted @ 2013-07-03 10:19 马语者 阅读(6484) 评论(0) 推荐(0) 编辑
摘要:Unity中的shader脚本,是用叫做shaderlab的脚本语言来写。这个unity中的shader不只是DX中HLSL写的顶点和像素shader,而应该说是对应着DX中的Effect脚本,定义了一个完整渲染的状态。一个文件,只能包含一个unity的shadershader文件的内容:简单的一个shader的内容框架大致如下:shader "shader name"{properties{_Color("Diffuse Color", Color) = (1,.5,.5,1)_Texture("Main Texture", 2D) 阅读全文
posted @ 2013-07-01 16:51 马语者 阅读(3219) 评论(0) 推荐(1) 编辑
摘要:这两天学习OGRE,遇到"OgreOverlaySystem.h": No such file or directory的错误。这是由于OGRE提供的例子过老,和SDK版本不一致造成的。在项目的附加包含目录中添加OgreOverlaySystem所在路径即可:$(OGRE_HOME)\include\OGRE\Overlay 。在SDK1.8.1下测试通过。另外如果使用1.9版SDK,还会遇到其他错误,新手就不要浪费时间了。 阅读全文
posted @ 2013-06-27 09:12 马语者 阅读(2424) 评论(1) 推荐(0) 编辑