登录后台

页面导航

本文编写于 1256 天前,最后修改于 1256 天前,其中某些信息可能已经过时。

本文翻译自:https://docs.live2d.com/cubism-sdk-tutorials/lookat/

译者注:注意!这并不是一篇严谨的翻译,本人并不是翻译行业从业者,也根本不会日文。官网的中文翻译会连带代码一起翻译,而且还不如机翻日文,官网的英语翻译版本有的语法很奇怪,看起来也是机翻。本文主要来自日文机翻,然后再结合实际开发经验调整到通顺,修改不该翻译的东西并润色。

[最后更新日期: 2019/01/30] 译者注:这是这个日文原文的更新日期

在本节,我们将说明如何使模型的视线跟随鼠标指针移动。

摘要

Cubism SDK 使用一个名为 Lookat 的组件来实现视线追踪。

SDK 中名为 LookAt 的示例场景使用了此组件,因此也请参考该场景。

这个示例展示了模型的视线追踪一个在上方移动的物体。

/Assets/Live2D/Cubism/Samples/Lookat

要实现 Lookat,需要以下三步:

  1. 附加管理 Lookat 的组件
  2. 指定要用于追踪的参数
  3. 指定视线追踪的目标

附加管理 Lookat 的组件

将名为 CubismLookController 的组件(用于管理视线追踪)附加到模型所在的节点上。

img

img

CubismLookController 具有四个设置项。

  • Blend Mode : 它是在视线跟随参数时如何反映波动值的设置。可以设置以下三个。

    • Mutiply : 与当前值相成。
    • Additive : 与当前值相加。
    • Override : 覆盖当前值。
  • Center : 在这里设置坐标中心的 GameObject

中心指的是模型依附的 GameObjectBounds 的中心

可以将 [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 就会自动修改他们来实现注视/追踪效果。

img

img

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

img

选择模型并将上面创建的那个空白 GameObject 从“检查器” 视图拖放到 CubismLookController 的 [Target] 上。

img

这样就完成了设置。

运行场景并用鼠标左键拖动 "游戏(Game)" 视图以测试模型的鼠标注视。