您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
64 行
2.4 KiB
64 行
2.4 KiB
using System.Collections.Generic;
|
|
using UniGLTF.Extensions.VRMC_vrm;
|
|
using UnityEngine;
|
|
|
|
namespace UniVRM10
|
|
{
|
|
internal sealed class LookAtEyeDirectionApplicableToExpression : ILookAtEyeDirectionApplicable
|
|
{
|
|
private readonly CurveMapper _horizontalOuter;
|
|
private readonly CurveMapper _horizontalInner;
|
|
private readonly CurveMapper _verticalDown;
|
|
private readonly CurveMapper _verticalUp;
|
|
|
|
private readonly ExpressionKey _lookRightKey = ExpressionKey.CreateFromPreset(ExpressionPreset.lookRight);
|
|
private readonly ExpressionKey _lookLeftKey = ExpressionKey.CreateFromPreset(ExpressionPreset.lookLeft);
|
|
private readonly ExpressionKey _lookUpKey = ExpressionKey.CreateFromPreset(ExpressionPreset.lookUp);
|
|
private readonly ExpressionKey _lookDownKey = ExpressionKey.CreateFromPreset(ExpressionPreset.lookDown);
|
|
|
|
public LookAtEyeDirectionApplicableToExpression(
|
|
CurveMapper horizontalOuter, CurveMapper horizontalInner, CurveMapper verticalDown, CurveMapper verticalUp)
|
|
{
|
|
_horizontalOuter = horizontalOuter;
|
|
_horizontalInner = horizontalInner;
|
|
_verticalDown = verticalDown;
|
|
_verticalUp = verticalUp;
|
|
}
|
|
|
|
public void Apply(LookAtEyeDirection eyeDirection, Dictionary<ExpressionKey, float> actualWeights)
|
|
{
|
|
var yaw = eyeDirection.LeftYaw;
|
|
var pitch = eyeDirection.LeftPitch;
|
|
|
|
if (yaw < 0)
|
|
{
|
|
// Left
|
|
actualWeights[_lookRightKey] = 0;
|
|
actualWeights[_lookLeftKey] = Mathf.Clamp(_horizontalOuter.Map(Mathf.Abs(yaw)), 0, 1.0f);
|
|
}
|
|
else
|
|
{
|
|
// Right
|
|
actualWeights[_lookRightKey] = Mathf.Clamp(_horizontalOuter.Map(Mathf.Abs(yaw)), 0, 1.0f);
|
|
actualWeights[_lookLeftKey] = 0;
|
|
}
|
|
|
|
if (pitch < 0)
|
|
{
|
|
// Down
|
|
actualWeights[_lookUpKey] = 0;
|
|
actualWeights[_lookDownKey] = Mathf.Clamp(_verticalDown.Map(Mathf.Abs(pitch)), 0, 1.0f);
|
|
}
|
|
else
|
|
{
|
|
// Up
|
|
actualWeights[_lookUpKey] = Mathf.Clamp(_verticalUp.Map(Mathf.Abs(pitch)), 0, 1.0f);
|
|
actualWeights[_lookDownKey] = 0;
|
|
}
|
|
}
|
|
|
|
public void Restore()
|
|
{
|
|
}
|
|
}
|
|
}
|