本文翻译自:https://docs.live2d.com/cubism-sdk-tutorials/lookat/
译者注:注意!这并不是一篇严谨的翻译,本人并不是翻译行业从业者,也根本不会日文。官网的中文翻译会连带代码一起翻译,而且还不如机翻日文,官网的英语翻译版本有的语法很奇怪,看起来也是机翻。本文主要来自日文机翻,然后再结合实际开发经验调整到通顺,修改不该翻译的东西并润色。
[最后更新日期: 2019/01/30] 译者注:这是这个日文原文的更新日期
在本节,我们将说明如何使模型的视线跟随鼠标指针移动。
摘要
Cubism SDK 使用一个名为 Lookat
的组件来实现视线追踪。
SDK 中名为 LookAt
的示例场景使用了此组件,因此也请参考该场景。
这个示例展示了模型的视线追踪一个在上方移动的物体。
/Assets/Live2D/Cubism/Samples/Lookat
要实现 Lookat
,需要以下三步:
- 附加管理
Lookat
的组件 - 指定要用于追踪的参数
- 指定视线追踪的目标
附加管理 Lookat 的组件
将名为 CubismLookController
的组件(用于管理视线追踪)附加到模型所在的节点上。
CubismLookController
具有四个设置项。
Blend Mode : 它是在视线跟随参数时如何反映波动值的设置。可以设置以下三个。
- Mutiply : 与当前值相成。
- Additive : 与当前值相加。
- Override : 覆盖当前值。
- Center : 在这里设置坐标中心的
GameObject
。
中心指的是模型依附的 GameObject
的 Bounds
的中心
可以将 [Model]/Drawables/
下的 GameObject
设置为 Center
。
如果未对此项目设置任何内容,则 CubismLookController 将使用附加的 GameObject 的中心。
- Damping : 追踪目标所需的时间。值越小,追踪速度越快。
- Target : 设定跟随视线的目标。稍后将描述细节。
这次,将 Blend Mode
设置为 [Override]。
指定要用于追踪的参数
在 [模型]/Parameters/
下,放置用于管理模型参数的 GameObject
。
此外,在此目录下各项用于设置的 GameObject
的名称是参数的 ID。
他们都可以通过 CubismModel.Parameters()
获得。
将一个名为 CubismLookParameter
的组件附加到您要用于追踪的参数 ID 所在组件上。
如果将 CubismLookParameter
附加到该参数的 GameObject
,则上面提到的 CubismLookController
将引用它并将它用于追踪。
译者注:追踪说白了就是随着某个物体的移动,模型的某些参数将会改变。比如鼠标移动,眼球就会移动(注视鼠标),其实就是眼球的 x y 坐标随着鼠标的移动而变化。这样就需要把眼球 x 参数对应的 GameObject
和 y 参数对应的 GameObject
附加上 CubismLookParameter
。这样 CubismLookController
就会自动修改他们来实现注视/追踪效果。
CubismLookParameter
具有两个设置项。
- Axis : 指定将设置参数视为转换的轴数。例如,如果指定了X,则会根据 Target 的 X 轴的值进行计算和设置。
- Factor : 设置计算值的放大倍数。由于计算结果的值在-1到+1的范围内,根据参数的不同,增加或减少范围或反转+和-可能更自然。
设定目标以追踪视线
最后,准备要被追踪的目标。
要对 CubismLookController
组件的 [Target] 设置一个实现了 [ICubismLookTarget] 接口的脚本。
根据设置目标的不同,可以设置特定条件,例如将目标设置为注视鼠标或某个 GameObject
的位置,或者仅在拖动时跟随。
创建一个名为 CubismLookTarget
的 C# 脚本,并写入如下的代码。
在这里,我们试图注视鼠标(按住左键)。
using Live2D.Cubism.Framework.LookAt;
using UnityEngine;
public class CubismLookTarget : MonoBehaviour, ICubismLookTarget
{
public Vector3 GetPosition()
{
if(!Input.GetMouseButton(0))
{
return Vector3.zero;
}
var targetPosition = Input.mousePosition;
targetPosition = (Camera.main.ScreenToViewportPoint(targetPosition) * 2) - Vector3.one;
return targetPosition;
}
public bool IsActive()
{
return true;
}
}
创建一个空的 GameObject
并在其上面附加 CubismLookTarget
。
选择模型并将上面创建的那个空白 GameObject
从“检查器” 视图拖放到 CubismLookController
的 [Target] 上。
这样就完成了设置。
运行场景并用鼠标左键拖动 "游戏(Game)" 视图以测试模型的鼠标注视。