切梦刀 发布的文章

Unity prefab实例属性不随预制源改变的问题

现象

今天遇到一个修改了prefab源的属性后,prefab实例属性不随着改变的问题。

操作步骤:

  1. 在Unity Editor中创建prefab对象Player;
  2. 托一个Player的实例p1出来;
  3. 修改Player预制对象的z属性;
  4. p1的z属性未跟着变;

在Unity组件手册中这么说的:

Inheritance 继承

Inheritance means that whenever the source Prefab changes, those changes are applied to all linked GameObjects. For example, if you add a new script to a Prefab, all of the linked GameObjects will instantly contain the script as well. However, it is possible to change the properties of a single instance while keeping the link intact. Simply change any property of a prefab instance, and watch as the variable name becomes bold. The variable is now overridden. All overridden properties will not be affected by changes in the source Prefab.

继承是指当预置源发生变化,这些变化将应用于所有已链接的游戏对象。例如,如果添加一个新的脚本到预置,所有已链接的游戏对象都将立刻包含该脚本。但是,它有可能改变一个单独实例的属性,同时保持链接。改变任何一个预置实例的属性,可以看到变量名称变为粗体,现在该变量可以被重写,所有的重写属性不会影响预置源的变化。

那么,p1.z应该随着Player.z改变才对。

解决

- 阅读剩余部分 -

[转]Skinned Mesh原理解析和一个最简单的实现示例

讲述骨骼动画的资料很多,但大部分都是针对 DX8 或 DX9 的 SkinnedMesh 进行讲解。我觉得对于骨骼动画初学者增加了不必要的负担,还没有理解骨骼动画的实质就已被 DX 复杂的架构搞得晕头转向了。这篇文章把注意力集中在骨骼动画的基本组成结构和原理上,并实现了一个最简单纯手工的自定义骨骼动画例子帮助理解(使用最简单的 OpenGL 指令,甚至没有使用矩阵)。这篇文章在我学习理解骨骼动画的过程中逐步完善,是对这个技术的理解总结,属于学习笔记。学习过程中参考了很多资料,其中给我启发最大的是 Frank Luna 写的 ”Skinned Mesh Character Animation with Direct3D 9.0c” 。由于本人自身也是初学者,所以错误和不精确的地方在所难免,欢迎指正和讨论,请发邮件到happyfirecn@yahoo.com.cn

或加入3DGameStudy邮件列表:http://happyfire.googlepages.com/3dgamestudymaillist 。另外文本不涉及任何高级骨骼动画技术,也不涉及 DX 架构的 SkinnedMesh 技术和硬件加速,但本文中会引用 SkinnedMesh 中的约定俗成的名词,如 Transform Matrix , Bone Offset Matrix 等。

一) 3D 模型动画基本原理和分类

- 阅读剩余部分 -

Unity3D工程版本管理方案

Unity进行多人协作开发时必定会涉及资源、代码、配置的版本管理。这里介绍一下用SVN、GIT或其它版本管理系统进行Unity工程版本管理的方法。

新建一个Unity工程,目录结构基本是这样的:

  • Assets、Library、ProjectSettings目录
  • 运行时还会多出Temp目录
  • 如果用Monodevelop或VS打开过还会生成一堆工程文件

最终大约是这样:

- 阅读剩余部分 -

解决在VMware中Unity3D鼠标键盘响应异常问题

在VMware中装了Unity,写了个Demo,用到了First Person Controller。正常效果应该是第一人称视角,方向键控制行走,鼠标控制视角。

但运行后可以行走,视角无法移动。在我另一电脑(物理机)上没问题。

找到控制视角的脚本MouseLook.cs,里面

else if (axes == RotationAxes.MouseX)
{
    print(Input.GetAxis("Mouse X"));
    transform.Rotate(0, Input.GetAxis("Mouse X") * sensitivityX, 0);
}

打印结果:0

鼠标位移获取始终为0,怀疑是因为虚拟机里对鼠标的搜索和物理机不同。
找到VMware设置鼠标捕获方式,如下图:

- 阅读剩余部分 -

Flex mxmlc命令行编译错误: Java heap space解决方法

用Flex mxmlc命令行编译ActionScript工程时,报如下异常:

错误: Java heap space

原因是JVM heap内存空间不足,得改一下JVM参数

mxmlc命令行编译时JVM参数设置在 sdk/bin/jvm.config中,找到下面这行:

# Arguments to VM
java.args=-Xmx384m -Dsun.io.useCanonCaches=false

-Xmx384m表示JVM在编译时可用的最大内存数,把值改大一点,我这里改成-Xmx512m问题解决