那些不易注意到的Unity实用小功能

2012.01.1

Unity是一款十分易用的游戏引擎,上手并不困难——恐怕也正因如此,少有人会仔细阅读帮助文档对Unity编辑器的功能做一个全面细致的了解,而一些非常实用的小功能在日常使用中很难被发现,但它们对工作效率的提升是有不小的帮助的。AlmostLogical的Devin Reimer有感于此为大家列举了10条不易注意到的Unity实用小功能,在此翻译给大家,并对一些步骤补充了示意图。 (更多…)

解决Unity3D在Win7 64位系统下载入DLL插件报错崩溃

2011.05.15

换新电脑后装的是Windows 7 64位系统,Unity3D等各种软件都运行正常,直到今天我尝试打开之前所做的人脸识别以及增强现实Unity工程文件时,每次运行程序立刻崩溃,原因显然是DLL插件加载造成的。同样的Unity工程文件在老机器的Windows XP下运行正常,在网上搜索后发现也有人在换成64位win 7后出现了无法加载DLL插件的问题——基本可以确定是由于win7 64位系统造成的,但是没有让Unity.exe运行在32位模式的选项(事实上Unity3D本身就是32位程序),于是打开Unity.exe的“兼容性模式”选项,让其运行在“XP Service Pack 3”模式下,问题得以解决!

Unity3D使用C#实现Coroutines & Yield

2009.12.10

Coroutines & Yield是Unity3D编程中重要的概念,它可以实现将一段程序延迟执行或者将其各个部分分布在一个时间段内连续执行,但是在Javascript与C#中实现Coroutines & Yield,在语法上却有一些区别:

  1. yield不可单独使用

需要与return配合使用,例如:

yield return 0; //等0帧
yield return 1; //等1帧
yield return WaitForSeconds(3.0); //等待3秒

所有使用yield的函数必须将返回值类型设置为IEnumerator类型,例如:

IEnumerator DoSomeThingInDelay() {...}

最后,也是在”Using C#”这个章节中没有讲到的关键一点是,所有IEnumerator类型函数必须使用”StartCoroutine”这个函数触发,不能单独使用,例如:

StartCoroutine(DoSomeThingInDelay());

最后附上学习Coroutines & Yield时所做的小例子,脚本的作用是不断随机改变材质的颜色,演示demo使用”V字仇杀队”中的面具。

(更多…)

Unity3D中如何调用其他GameObject的脚本函数

2009.11.28

调用其他实例的脚本是一种很常用的需求,在Unity3D中实现起来也有多种方法,假设在ScriptB有一个DoSomething函数,如下所示:

using UnityEngine;

public class ScriptB : MonoBehaviour
{
 public void DoSomething()
 {
 Debug.Log("Hi there");
 }
}

在ScriptA中如果要访问某个GameObject的ScriptB脚本中的DoSomething函数:

using UnityEngine;

public class ScriptA : MonoBehaviour
{
 public ScriptB other;
 void Update()
 {
 other.DoSomething();
 }
}

注意ScriptA有一个ScriptB类型的公共变量,这是一个绝妙的小技巧,如此一来你便可以通过编辑器拖拽任何含有ScriptB这一脚本的GameObject至该变量上(因为是public的,所以暴露于编辑器界面中),Unity会自动识别你需要赋值的不是那个GameObject,而是它所包含的ScriptB脚本。

(更多…)

HDR摄影教程 – 第3部分

2009.11.3

书接上文

将照片分层排列好

在下面截图的右下角你可以看到图层的排列顺序,我将Photomatix生成的HDR照片放置于最顶层,而其他三张不同曝光的照片置于其下–这三张照片的顺序无关紧要,随着你经验的增长,你往往不会使用这么多原始照片,也许一两张就足够了。
HDR Tutorial

Photoshop – 在此我们将HDR照片置于最上层,其余原始图片置于下方

然后,我为HDR照片图层增加了图层蒙板(Layer Mask),并使用30%透明度的黑色笔刷在需要修改的地方进行涂抹,直到下方图层足够清晰为止。

如何创建图层蒙板并:

  • 点击HDR照片图层
  • 在菜单中选择:Layer > Create Layer Mask > Reveal All.
  • 选择笔刷工具(快捷键B)
  • 在上方选项中将笔刷Opacity设为30%
  • 点击正常图层右侧的白色图层(蒙板层)
  • 选择笔刷颜色为黑色
  • 在照片上进行涂抹。
  • 当你将两个图层修饰完毕后,合并这两个图层。

在下图中你可以注意到我所涂抹的地方,那些招牌在HDR处理过后难以看清,我选择最暗的一张原始照片置于其下(招牌在这里看得很清晰),然后通过蒙板将其还原于HDR图层上,这样照招牌便清晰可见了(注意对比照片左侧ABC霓虹灯字样)
(更多…)

HDR摄影教程 – 第2部分

2009.11.2

步骤5 – Photomatix Pro

现在是时候打开Photomatix Pro进入HDR的世界了。 Photomatix会将你所拍摄的连续曝光照片合称为一张HDR,然后你便可以Tonemap它并将其保存为JPEG。 Photomatix有多种使用方式:

  • 将多张连续曝光照片合成为一张HDR(适用于初学者,也是本文所介绍的方法)
  • 当你拍摄归来后批处理照片生成HDR
  • 将一个单独的RAW格式照片转换为HDR

首先我们来介绍第一种方式,其余的方式在后面我会陆续介绍。 打开Photomatix,你会看到左侧非常简洁的一个面板,单击”Generate HDR image” 注: 如你所见,在这里我使用了5张JPEG图片,你也可以使用RAW格式的图片,但是Photomatix在生产HDR之前会自动将其转换为JPEG。从Photomatix的工程师那里了解到,照片格式的转换自己进行会更好。

HDR Tutorial

Photomatix – 选择生成HDR的照片源

(更多…)

Virtools文件导出/保存错误“Save Error: Level”

2009.08.24

今天导出Virtools工程为VMO时出现“Save Error: Level”这样的错误,搜索得到解决方法:

将所有贴图文件的“IC”初始状态移除即可,我的工程内有几张作为动画的序列贴图设置了IC,所以导致了这个问题。

另外,搜索中还得知如果Virtools工程文件中1024*1024这样的大贴图数量过多,Virtools工程文件过大,在保存工程文件的时候也可能出现“Save Error: Level”的错误,为工程文件减肥可以解决该问题。

Virtools开发模式下Action右键子菜单消失

2009.08.22

在Dev模式下,有时Virtools会莫名其妙地出现鼠标右键菜单中的Action子菜单消失的情况,对于经常需要使用Action VSL脚本辅助开发的人来讲,这个问题非常严重。

解决方法很简单,在注册表编辑器(开始/运行/regedit)中将如下键值设置为1即可恢复菜单显示:

HKEY_CURRENT_USER\Software\Virtools\3D Layout\Enable Actions

学习使用C#进行Unity3D编程

2009.07.25

学习使用C#进行Unity3D编程
这是第一篇关于Unity3D的文章,很是激动,其一来自于Unity3D,一直很关注这款引擎,等资金充足后很有可能会购买以取代Virtools进行商业项目的开发,另一方面的激动来自于C#,这篇文章使得我可以从一个AS3开发者的角度(我最熟悉不过的角度)对C#有一个大致的认识,看起来如果熟悉ActionScript的话C#学起来并不困难,更何况掌握C#后.NET的大门也随即向我敞开,届时我将终于可以自在地进行Windows应用的开发了——所以说这篇文章真是相当令人愉快。

很遗憾本文作者所推荐的C# Pocket Reference在国内还没有出版,O’Reilly几本关于C#的大部头儿著作倒是都在国内上架了,想必是因为这本书过于基础,出版社觉得无利可图吧。

Unity3D 提供了三种可供选择的脚本编程语言:JavaScript, C# 以及 Boo。尽管它们各有各的优势与不足,但对我来讲C#显然会脱颖而出成为我的首选——首选,它完整支持面向对象,而且语法与Java以及ActionScript 3很类似,而这两者都是我所熟悉的。不过在接触Unity3D之前,我一行C#的代码都没写过,所以我必须从头学起。 (更多…)

Virtools游戏原型开发&脚本书写经验

2009.07.9
VR盟主09启动仪式暨虚拟现实论坛上所做的一个演讲,今天刚开始使用SlideShare这个网站,翻出来分享一下。
PPT的内容还是比较实在的,基于Virtools的开发的经验,介绍了Virtools在快速游戏原型开发中所能够发挥的巨大作用,以及游戏原型的概念和实践应用价值。在第二部分, 着重介绍了如何使用Virtools编写出更为灵活的脚本,并介绍了Virtools编程的三层结构:
  • Building Block
  • VSL
  • SDK