2020-02-11 09:55:31 +01:00
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
using VRM;
|
|
|
|
|
|
|
|
|
|
|
|
namespace OpenSee {
|
|
|
|
|
|
|
|
|
|
|
|
public class OpenSeeVRMExpression : MonoBehaviour
|
|
|
|
|
|
{
|
2020-07-06 14:51:16 +02:00
|
|
|
|
public OpenSee openSee;
|
2020-02-11 09:55:31 +01:00
|
|
|
|
public OpenSeeExpression openSeeExpression;
|
|
|
|
|
|
public VRMBlendShapeProxy vrmBlendShapeProxy;
|
|
|
|
|
|
public string expressionNeutral = "neutral";
|
|
|
|
|
|
public string expressionFun = "smile";
|
|
|
|
|
|
public string expressionSorrow = "sad";
|
|
|
|
|
|
public string expressionAngry = "angry";
|
|
|
|
|
|
public string expressionJoy = "shocked";
|
|
|
|
|
|
|
|
|
|
|
|
private BlendShapeKey lastKey;
|
|
|
|
|
|
|
|
|
|
|
|
void Start()
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Update()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (openSeeExpression == null || vrmBlendShapeProxy == null) {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2020-07-06 14:51:16 +02:00
|
|
|
|
float rightEyeOpen = 1f;
|
|
|
|
|
|
float leftEyeOpen = 1f;
|
|
|
|
|
|
if (openSee != null) {
|
|
|
|
|
|
var openSeeData = openSee.trackingData;
|
|
|
|
|
|
if (openSeeData == null || openSeeData.Length < 1)
|
|
|
|
|
|
return;
|
|
|
|
|
|
int idx = -1;
|
|
|
|
|
|
int i = 0;
|
|
|
|
|
|
foreach (var item in openSeeData) {
|
|
|
|
|
|
if (item.id == openSeeExpression.faceId)
|
|
|
|
|
|
idx = i;
|
|
|
|
|
|
i++;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (idx > -1) {
|
|
|
|
|
|
rightEyeOpen = openSeeData[idx].rightEyeOpen;
|
|
|
|
|
|
leftEyeOpen = openSeeData[idx].leftEyeOpen;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
vrmBlendShapeProxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Neutral), 0f);
|
|
|
|
|
|
vrmBlendShapeProxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Fun), 0f);
|
|
|
|
|
|
vrmBlendShapeProxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Sorrow), 0f);
|
|
|
|
|
|
vrmBlendShapeProxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Angry), 0f);
|
|
|
|
|
|
vrmBlendShapeProxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Joy), 0f);
|
|
|
|
|
|
vrmBlendShapeProxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Blink_R), 0f);
|
|
|
|
|
|
vrmBlendShapeProxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Blink_L), 0f);
|
2020-02-11 09:55:31 +01:00
|
|
|
|
if (openSeeExpression.expression == expressionFun) {
|
2020-07-06 14:51:16 +02:00
|
|
|
|
vrmBlendShapeProxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Fun), 1f);
|
2020-02-11 09:55:31 +01:00
|
|
|
|
return;
|
|
|
|
|
|
} else if (openSeeExpression.expression == expressionSorrow) {
|
2020-07-06 14:51:16 +02:00
|
|
|
|
vrmBlendShapeProxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Sorrow), 1f);
|
2020-02-11 09:55:31 +01:00
|
|
|
|
return;
|
|
|
|
|
|
} else if (openSeeExpression.expression == expressionAngry) {
|
2020-07-06 14:51:16 +02:00
|
|
|
|
vrmBlendShapeProxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Angry), 1f);
|
2020-02-11 09:55:31 +01:00
|
|
|
|
return;
|
|
|
|
|
|
} else if (openSeeExpression.expression == expressionJoy) {
|
2020-07-06 14:51:16 +02:00
|
|
|
|
vrmBlendShapeProxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Joy), 1f);
|
2020-02-11 09:55:31 +01:00
|
|
|
|
return;
|
2020-07-06 14:51:16 +02:00
|
|
|
|
} else {
|
|
|
|
|
|
/*if (rightEyeOpen < 0.05) {
|
|
|
|
|
|
vrmBlendShapeProxy.ImmediatelySetValue(new BlendShapeKey(BlendShapePreset.Blink_R), 1f);
|
|
|
|
|
|
}
|
|
|
|
|
|
if (leftEyeOpen < 0.05) {
|
|
|
|
|
|
vrmBlendShapeProxy.ImmediatelySetValue(new BlendShapeKey(BlendShapePreset.Blink_L), 1f);
|
|
|
|
|
|
}*/
|
2020-02-11 09:55:31 +01:00
|
|
|
|
}
|
2020-07-06 14:51:16 +02:00
|
|
|
|
vrmBlendShapeProxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Neutral), 1f);
|
2020-02-11 09:55:31 +01:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|