把Unity3D工程放在OneDrive上导致的问题

我是把Unity3D的工程整个放在OneDrive上进行同步,原本是想把代码在公司和家里进行同步,这样就可以方便在家里写代码了(有时代码写了一半,没有push到git server上去,也因为我司git server是在内网)。

用了一段时间后发现,用Visual Studio Community 2015时,经常打不开Unity3D的脚本文件(VS启动了,但成功打开.cs脚本)。Unity提示:

Could not open ‘D:/OneDrive/xxx/Projects/MyUnityProject/Temp/UnityLockfile’: The process cannot access the file because it is being used by another process.

在VS的Solution Explorer中想打开其它.cs文件时,提示:

Cannot access a disposed object.

但把工程移出OneDrive同步目录后就没问题了,暂时还没找到解决方法。

一个表情Blend Shapes的例子

角色表情的制作用Blend Shapes比较方便。刚好手上有个眨眼的模型,记录一下。

环境:Win10,Unity3D 4.6.2

带Blend Shapes的fbx文件,导进Unity3D会带有一个Skinned Mesh Renderer

TIM 20171115113505

修改Inspector中的blendShape1.Mao_eyelidClose,就可以改变其眨眼的程度,将该值改为50后的效果。

TIM 20171115113913

当然,也可以通过代码来控制。

 

 

Unity3D Quaternion LookRotation FromToRotation SetLookRotation

看到Quaternion的LookRotation函数,没看懂,就研究了一下。

public static Quaternion LookRotation(Vector3 forward, Vector3 upwards = Vector3.up);

Creates a rotation with the specified forward and upwards directions.

Returns the computed quaternion. If used to orient a Transform, the Z axis will be aligned with forward/ and the Y axis with upwards if these vectors are orthogonal. Logs an error if the forward direction is zero.

总结:其实说白了,LookRotation的含义就是,计算让Z轴对齐forward,让y轴对齐upward 所需要的旋转四元数

参考链接:unity3D 彻底搞懂 Quaternion LookRotation FromToRotation SetLookRotation方法

https://docs.unity3d.com/ScriptReference/Quaternion.LookRotation.html

关于FK和IK

在Key动画时,有FK和IK之分,FK是指Forward Kinematics,正向运动学。IK是指Inverse Kinematics,反向运动学。

FK,例如当你在操作肩轴节点时,肩轴之后的其它节点(胳膊)都会跟着动。IK,例如当你在操作把手放在桌子上时,胳膊会跟着动。

Maya中的FK,IK设置是在同一个地方,当设为0时是FK,设为1时是IK。

这样看来,就蛮好理解的。

参考链接:What is FK/IK Rigs

===========

《Unity5.x从入门到精通》

11.4.6

大多数角色动画都是通过将骨骼的关节角度旋转到预定值来实现的。 一个子关节的位置是由其父节点的旋转角度决定的, 这样, 处于节点链末端的节点位置是由此链条上的各个节点的旋转角和相对位移来决定的。可以将这种决定骨骼位置的 方称为前向运动学。

但是,在实际应用中,上述过程的逆过程却非常实用,即给定末端节点的位置,从而逆推出节点链上所有其他节点的合理位置。这种需求非常普遍,例如希望角色的手臂去触碰一个固定的物体或脚站立在不平坦的路面上等。这种方法被称为逆向运动学( IK),在Mecanim系统中,任何正确设置了Avatar的人形角色都支持IK功能。

Unity3D Windows 不显示标题栏

Unity3D在打包到Windows平台时,默认的窗口是会有标题栏,怎样才能不显示标题栏。

解决办法是用个bat脚本,bat脚本的内容是 start RUN.EXE -popupwindow ,RUN.exe 是Unity3D打包出来的exe文件。

在Unity3D中使用自定义宏定义

环境:Windows 10,Unity 3D 5.4.1f1,Visual Studio 2015

记得以前用Visual Studio开发时,要加个宏定义是在项目设置里添加。Unity中有预置的一些宏定义(https://docs.unity3d.com/Manual/PlatformDependentCompilation.html)。要Unity中要使用自定义宏定义需要在Unity中设置一下。

参考链接:Unity3d中脚本定义符号的使用 Scripting Define Symbols

 

20151111104821873

(注意:在编辑框中输入完之后按回车键确认生效,否则不会生效)

20151111105244845

 

Maya Controllers Joints Mesh

同事跟我讲了点Maya中的一些概念,我做些笔记。

2007224223611899

他拿提线木偶做比喻, Controllers相当于师傅手中的木棍(不知道专业名词叫啥),连接着线,是用来控制线的。Joints相当于木偶身上被绳子控制的那些节点。Mesh相当于木偶身上的衣服等。

TIM 20170907174927

上图中讲的是实际工作中遇到的问题。因为现在的Maya文件(卡通角色)是按演艺的要求制作的,不是按Unity的要求制作的,于是需要对Maya文件进行修改。但在修改时又想尽量能够复用以前做的动画。由于动画是由动画师去控制Controllers而做出来的,而Controllers控制的是Joints,所以Controllers和Joints这两者不要有大的改动,就可以复用原来的动画。如果改动的话对动画有哪些影响?比如角色是有尾巴的,然后它的动画里都是有控制其尾巴,如果把尾巴的相关Joints去掉,原先的动画是可以复用的。相反,如果角色是没有尾巴的,但现在想加上尾巴,这时候就得在原先的动画里加上控制尾巴(还是得重新做?)。

===========20171102 update ===========

引用自《Unity5.x 从入门到精通》 11.3.1

人形网络模型

为了充分利用Mecanim的人形动画系统和动画重定向功能,需要一个具有骨骼绑定和蒙皮的人形网格模型。

(1)人形网格模型一般由一组多边形或三角形网格组成。创建模型的过程被称为建模(Modeling)。

(2)为了控制角色的运动,必须为其创建一个骨骼关节层级(Joint Hierarchy),该层级定义了网格内部的骨骼结构及其相互运动关系,这个过程被称为骨骼绑定(Rigging)。

(3)人形网格模型必须与关节层级关联起来,即通过指定关节的动画来控制特定风格的运动,这个过程被称为蒙皮(Skinning)。

TIM 20171102114213

Unity3D中UnityEvent的使用实例

在看这个代码(https://github.com/eppz/Unity.Blog.Unity_Android_plugin_tutorial)时,里面有UnityEvent<T0>的写法,一时没看懂,看了下官方文档(https://docs.unity3d.com/ScriptReference/Events.UnityEvent_1.html)才明白。

下面是官方文档给的例子:

UnityEvent<int>一开始会让人以为是数组,但其实这里<>里应该是参数的类型,表示只能是int类型。后面用Invoke调用时的值是int型的5。

再来看一下文章一开始给的eppz的代码,用git切到2a0e46b的commit上。它的相关代码如下:

该脚本所挂载的物体的Inspector界面如下图:

TIM 20170525090432

这样当AlertDidFinishWithResult被调用时,UI上的Result Text显示的Text就被改变了。