188 lines
6.2 KiB
C#
188 lines
6.2 KiB
C#
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace Rokoko.CommandAPI
|
|
{
|
|
public class StudioCommandAPI : StudioCommandAPIBase
|
|
{
|
|
[Header("Show CommandAPI response (Optional)")]
|
|
[SerializeField] private Text responseText = null;
|
|
|
|
[Header("The IP address of Studio. Leave default for same machine")]
|
|
public string ipAddress = "127.0.0.1";
|
|
|
|
[Header("Common Parameters")]
|
|
[Tooltip("The actor name or hardware device id in the scene")]
|
|
[SerializeField] public string deviceId;
|
|
|
|
[Header("Calibration Parameters")]
|
|
[Tooltip("The calibration countdown delay")]
|
|
[SerializeField] public int countDownDelay = 3;
|
|
|
|
[Tooltip("The calibration skip suit")]
|
|
[SerializeField] public bool calibrationSkipSuit = false;
|
|
|
|
[Tooltip("The calibration skip gloves")]
|
|
[SerializeField] public bool calibrationSkipGloves = false;
|
|
|
|
[Header("Recording Parameters")]
|
|
[Tooltip("Recording Clip Name")]
|
|
[SerializeField] public string clipName = "NewClip";
|
|
|
|
[Tooltip("Recording Start / Stop Time (SMPTE)")]
|
|
[SerializeField] public string recordingTime = "00:00:00:00";
|
|
|
|
[Tooltip("Return To Live Mode When Recording Is Done")]
|
|
[SerializeField] public bool backToLive = false;
|
|
|
|
[Header("Tracker Parameters")]
|
|
[SerializeField] public string BoneAttached = "";
|
|
[SerializeField] public float TrackerTimeout = 2f;
|
|
[SerializeField] public bool IsQueryOnly = false;
|
|
|
|
[SerializeField] public Transform TrackerTransform;
|
|
|
|
[Header("Playback Parameters")]
|
|
[SerializeField] public bool IsPlaying = true;
|
|
|
|
[Header("Livestream Parameters")]
|
|
[SerializeField] public bool IsStreaming = true;
|
|
|
|
[Header("Info Parameters")]
|
|
[SerializeField] public bool RequestDevicesInfo = true;
|
|
[SerializeField] public bool RequestClipsInfo = true;
|
|
[SerializeField] public bool RequestActorsInfo = true;
|
|
[SerializeField] public bool RequestCharactersInfo = true;
|
|
|
|
protected override string IP => ipAddress;
|
|
protected override RequestData GetRequestData() => new RequestData();
|
|
protected override ResetActorRequestData GetResetActorRequestData()
|
|
{
|
|
var data = new ResetActorRequestData() {DeviceId = deviceId};
|
|
if (debug)
|
|
{
|
|
Debug.Log(data.ToJson());
|
|
}
|
|
return data;
|
|
}
|
|
|
|
protected override CalibrateRequestData GetCalibrateRequestData()
|
|
{
|
|
var data = new CalibrateRequestData()
|
|
{
|
|
DeviceId = deviceId,
|
|
CountDownDelay = countDownDelay,
|
|
SkipSuit = calibrationSkipSuit,
|
|
SkipGloves = calibrationSkipGloves
|
|
};
|
|
if (debug)
|
|
{
|
|
Debug.Log(data.ToJson());
|
|
}
|
|
return data;
|
|
}
|
|
|
|
protected override RecordingRequestData GetRecordingRequestData()
|
|
{
|
|
var data = new RecordingRequestData()
|
|
{
|
|
Filename = clipName,
|
|
Time = recordingTime,
|
|
BackToLive = backToLive
|
|
};
|
|
if (debug)
|
|
{
|
|
Debug.Log(data.ToJson());
|
|
}
|
|
return data;
|
|
}
|
|
|
|
protected override TrackerRequestData GetTrackerRequestData()
|
|
{
|
|
var data = new TrackerRequestData()
|
|
{
|
|
DeviceId = deviceId,
|
|
BoneAttached = BoneAttached,
|
|
Position = TrackerTransform?.position ?? Vector3.zero,
|
|
Rotation = TrackerTransform?.rotation ?? Quaternion.identity,
|
|
Timeout = TrackerTimeout,
|
|
IsQueryOnly = IsQueryOnly
|
|
};
|
|
if (debug)
|
|
{
|
|
Debug.Log(data.ToJson());
|
|
}
|
|
return data;
|
|
}
|
|
|
|
protected override PlaybackRequestData GetPlaybackRequestData()
|
|
{
|
|
var data = new PlaybackRequestData()
|
|
{
|
|
IsPlaying = IsPlaying,
|
|
CurrentTime = 0.0,
|
|
PlaybackSpeed = 1.0f,
|
|
ChangeFlag = CommandAPIPlaybackChange.IsPlaying
|
|
};
|
|
if (debug)
|
|
{
|
|
Debug.Log(data.ToJson());
|
|
}
|
|
return data;
|
|
}
|
|
|
|
protected override LivestreamRequestData GetLivestreamRequestData()
|
|
{
|
|
var data = new LivestreamRequestData()
|
|
{
|
|
Enabled = IsStreaming
|
|
};
|
|
if (debug)
|
|
{
|
|
Debug.Log(data.ToJson());
|
|
}
|
|
return data;
|
|
}
|
|
|
|
protected override InfoRequestData GetInfoRequestData()
|
|
{
|
|
var data = new InfoRequestData()
|
|
{
|
|
DoDevicesInfo = RequestDevicesInfo,
|
|
DoClipsInfo = RequestClipsInfo,
|
|
DoActorsInfo = RequestActorsInfo,
|
|
DoCharactersInfo = RequestCharactersInfo
|
|
};
|
|
if (debug)
|
|
{
|
|
Debug.Log(data.ToJson());
|
|
}
|
|
return data;
|
|
}
|
|
|
|
private void Start()
|
|
{
|
|
SetStatusText("");
|
|
}
|
|
|
|
protected override void OnCommmandResponse(ResponseMessage response)
|
|
{
|
|
base.OnCommmandResponse(response);
|
|
SetStatusText(response.description);
|
|
}
|
|
|
|
protected override void OnCommmandError(string error)
|
|
{
|
|
base.OnCommmandError(error);
|
|
SetStatusText($"{error}\nPlease make sure Rokoko Studio is running and Command API is enabled (Menu->Settings->Command API->Enabled).\nCheck also the receiving port and API key in both Rokoko Studio and Unity plugin.");
|
|
}
|
|
|
|
private void SetStatusText(string text)
|
|
{
|
|
if (responseText == null) return;
|
|
responseText.transform.parent.gameObject.SetActive(!string.IsNullOrEmpty(text));
|
|
responseText.text = text;
|
|
LayoutRebuilder.ForceRebuildLayoutImmediate(responseText.transform.parent as RectTransform);
|
|
}
|
|
}
|
|
} |