mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-09-13 22:39:39 -05:00
LookAtEyeDirection を Yaw, Pitch 二値に縮小。
左目と右目の独立はまたの機会に・・・
This commit is contained in:
@@ -2,43 +2,24 @@
|
||||
{
|
||||
public readonly struct LookAtEyeDirection
|
||||
{
|
||||
/// <summary>
|
||||
/// Yaw of LeftEye
|
||||
/// </summary>
|
||||
public float LeftYaw { get; }
|
||||
|
||||
public float Yaw { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Pitch of LeftEye
|
||||
/// </summary>
|
||||
public float LeftPitch { get; }
|
||||
|
||||
/// <summary>
|
||||
/// NOTE: 何故か使われていない
|
||||
/// Yaw of RightEye
|
||||
/// </summary>
|
||||
public float RightYaw { get; }
|
||||
|
||||
/// <summary>
|
||||
/// NOTE: 何故か使われていない
|
||||
/// Pitch of RightEye
|
||||
/// </summary>
|
||||
public float RightPitch { get; }
|
||||
public float Pitch { get; }
|
||||
|
||||
public LookAtEyeDirection(float leftYaw, float leftPitch, float rightYaw, float rightPitch)
|
||||
public LookAtEyeDirection(float yaw, float pitch)
|
||||
{
|
||||
LeftYaw = leftYaw;
|
||||
LeftPitch = leftPitch;
|
||||
RightYaw = rightYaw;
|
||||
RightPitch = rightPitch;
|
||||
Yaw = yaw;
|
||||
Pitch = pitch;
|
||||
}
|
||||
|
||||
public static LookAtEyeDirection Multiply(LookAtEyeDirection a, float b)
|
||||
{
|
||||
return new LookAtEyeDirection(
|
||||
a.LeftYaw * b,
|
||||
a.LeftPitch * b,
|
||||
a.RightYaw * b,
|
||||
a.RightPitch * b
|
||||
a.Yaw * b,
|
||||
a.Pitch * b
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ namespace UniVRM10
|
||||
CurveMapper horizontalOuter, CurveMapper horizontalInner, CurveMapper verticalDown, CurveMapper verticalUp)
|
||||
{
|
||||
_leftEye = leftEye;
|
||||
_leftInit= Matrix4x4.Rotate(leftEye.localRotation);
|
||||
_leftInit = Matrix4x4.Rotate(leftEye.localRotation);
|
||||
_rightEye = rightEye;
|
||||
_rightInit = Matrix4x4.Rotate(rightEye.localRotation);
|
||||
_horizontalOuter = horizontalOuter;
|
||||
@@ -35,9 +35,9 @@ namespace UniVRM10
|
||||
public void Apply(LookAtEyeDirection eyeDirection, Dictionary<ExpressionKey, float> actualWeights)
|
||||
{
|
||||
// FIXME
|
||||
var yaw = eyeDirection.LeftYaw;
|
||||
var pitch = eyeDirection.LeftPitch;
|
||||
|
||||
var yaw = eyeDirection.Yaw;
|
||||
var pitch = eyeDirection.Pitch;
|
||||
|
||||
// horizontal
|
||||
float leftYaw, rightYaw;
|
||||
if (yaw < 0)
|
||||
@@ -62,20 +62,23 @@ namespace UniVRM10
|
||||
}
|
||||
|
||||
// Apply
|
||||
SetYawPitchToBones(new LookAtEyeDirection(leftYaw, pitch, rightYaw, pitch));
|
||||
// 現状、右目左目を個別に動かす機能は無い。
|
||||
// 特に BlendShape 型に対して実装と、Asset のセットアップが煩雑になるので見送っている。
|
||||
// 代表して左を採用。
|
||||
SetYawPitchToBones(new LookAtEyeDirection(leftYaw, pitch));
|
||||
}
|
||||
|
||||
public void Restore()
|
||||
{
|
||||
SetYawPitchToBones(new LookAtEyeDirection(0, 0, 0, 0));
|
||||
SetYawPitchToBones(new LookAtEyeDirection(0, 0));
|
||||
}
|
||||
|
||||
private void SetYawPitchToBones(LookAtEyeDirection actualEyeDirection)
|
||||
{
|
||||
if (_leftEye != null && _rightEye != null)
|
||||
{
|
||||
_leftEye.localRotation = _leftInit.rotation * Matrix4x4.identity.YawPitchRotation(actualEyeDirection.LeftYaw, actualEyeDirection.LeftPitch);
|
||||
_rightEye.localRotation = _rightInit.rotation * Matrix4x4.identity.YawPitchRotation(actualEyeDirection.RightYaw, actualEyeDirection.RightPitch);
|
||||
_leftEye.localRotation = _leftInit.rotation * Matrix4x4.identity.YawPitchRotation(actualEyeDirection.Yaw, actualEyeDirection.Pitch);
|
||||
_rightEye.localRotation = _rightInit.rotation * Matrix4x4.identity.YawPitchRotation(actualEyeDirection.Yaw, actualEyeDirection.Pitch);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,8 +27,8 @@ namespace UniVRM10
|
||||
|
||||
public void Apply(LookAtEyeDirection eyeDirection, Dictionary<ExpressionKey, float> actualWeights)
|
||||
{
|
||||
var yaw = eyeDirection.LeftYaw;
|
||||
var pitch = eyeDirection.LeftPitch;
|
||||
var yaw = eyeDirection.Yaw;
|
||||
var pitch = eyeDirection.Pitch;
|
||||
|
||||
if (yaw < 0)
|
||||
{
|
||||
|
||||
@@ -22,8 +22,8 @@ namespace UniVRM10
|
||||
/// 出力値。Process() のみが更新する
|
||||
/// </summary>
|
||||
public LookAtEyeDirection EyeDirection { get; private set; }
|
||||
public float Yaw => EyeDirection.LeftYaw;
|
||||
public float Pitch => EyeDirection.LeftPitch;
|
||||
public float Yaw => EyeDirection.Yaw;
|
||||
public float Pitch => EyeDirection.Pitch;
|
||||
|
||||
/// <summary>
|
||||
/// Transform that indicates the position center of eyes.
|
||||
@@ -73,7 +73,7 @@ namespace UniVRM10
|
||||
{
|
||||
// NOTE: 指定された Transform の位置を向くように Yaw/Pitch を計算して適用する
|
||||
var (yaw, pitch) = CalculateYawPitchFromLookAtPosition(worldPosition);
|
||||
EyeDirection = new LookAtEyeDirection(yaw, pitch, 0, 0);
|
||||
EyeDirection = new LookAtEyeDirection(yaw, pitch);
|
||||
}
|
||||
return EyeDirection;
|
||||
}
|
||||
@@ -86,7 +86,7 @@ namespace UniVRM10
|
||||
/// <param name="pitch">Headボーンのforwardに対するpitch角(度)</param>
|
||||
public void SetYawPitchManually(float yaw, float pitch)
|
||||
{
|
||||
LookAtInput = new LookAtInput { YawPitch = new LookAtEyeDirection(yaw, pitch, 0, 0) };
|
||||
LookAtInput = new LookAtInput { YawPitch = new LookAtEyeDirection(yaw, pitch) };
|
||||
}
|
||||
|
||||
public (float Yaw, float Pitch) CalculateYawPitchFromLookAtPosition(Vector3 lookAtWorldPosition)
|
||||
|
||||
Reference in New Issue
Block a user