39 lines
1.5 KiB
C#
39 lines
1.5 KiB
C#
//========= Copyright 2016-2023, HTC Corporation. All rights reserved. ===========
|
|
|
|
using HTC.UnityPlugin.Utility;
|
|
using UnityEngine;
|
|
|
|
namespace HTC.UnityPlugin.PoseTracker
|
|
{
|
|
public class PoseFreezer : BasePoseModifier
|
|
{
|
|
public bool freezePositionX = false;
|
|
public bool freezePositionY = false;
|
|
public bool freezePositionZ = false;
|
|
|
|
public bool freezeRotationX = true;
|
|
public bool freezeRotationY = false;
|
|
public bool freezeRotationZ = true;
|
|
|
|
public override void ModifyPose(ref RigidPose pose, bool useLocal)
|
|
{
|
|
if (freezePositionX || freezePositionY || freezePositionZ)
|
|
{
|
|
var freezePos = useLocal ? transform.localPosition : transform.position;
|
|
if (freezePositionX) { pose.pos.x = freezePos.x; }
|
|
if (freezePositionY) { pose.pos.y = freezePos.y; }
|
|
if (freezePositionZ) { pose.pos.z = freezePos.z; }
|
|
}
|
|
|
|
if (freezeRotationX || freezeRotationY || freezeRotationZ)
|
|
{
|
|
var freezeEuler = useLocal ? transform.localEulerAngles : transform.eulerAngles;
|
|
var poseEuler = pose.rot.eulerAngles;
|
|
if (freezeRotationX) { poseEuler.x = freezeEuler.x; }
|
|
if (freezeRotationY) { poseEuler.y = freezeEuler.y; }
|
|
if (freezeRotationZ) { poseEuler.z = freezeEuler.z; }
|
|
pose.rot = Quaternion.Euler(poseEuler);
|
|
}
|
|
}
|
|
}
|
|
} |