Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fixed core issues with avatar height #160

Merged
merged 5 commits into from
Feb 22, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ MonoBehaviour:
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: c92fd7b20eb8eaf4eb4a6e236e4ac620
m_Address: Assets/Prefabs/Loadins/Virtual Keyboard.prefab
m_Address: Virtual Keyboard
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,18 @@ MonoBehaviour:
- rid: 2858994164428701718
- rid: 6147443510823354495
m_RuntimeSettings:
m_List: []
m_List:
- rid: 2858994164428701698
- rid: 2858994164428701699
- rid: 2858994164428701700
- rid: 2858994164428701702
- rid: 2858994164428701703
- rid: 2858994164428701706
- rid: 2858994164428701708
- rid: 6147443362521677920
- rid: 2858994164428701716
- rid: 2858994164428701717
- rid: 2858994164428701718
m_AssetVersion: 8
m_ObsoleteDefaultVolumeProfile: {fileID: 0}
m_RenderingLayerNames:
Expand Down
12 changes: 6 additions & 6 deletions Basis/Packages/com.basis.framework/Avatar/BasisAvatarFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ public static class BasisAvatarFactory
{
BasisBundleDescription = new BasisBundleDescription()
{
AssetBundleDescription = "LoadingAvatar",
AssetBundleName = "LoadingAvatar"
AssetBundleDescription = BasisLocalPlayer.DefaultAvatar,
AssetBundleName = BasisLocalPlayer.DefaultAvatar
},
HasError = false,
BasisBundleGenerated = new BasisBundleGenerated()
Expand All @@ -34,14 +34,14 @@ public static class BasisAvatarFactory
UnlockPassword = "N/A",
BasisRemoteBundleEncrypted = new BasisRemoteEncyptedBundle()
{
BundleURL = "LoadingAvatar",
BundleURL = BasisLocalPlayer.DefaultAvatar,
IsLocal = true,
MetaURL = "LoadingAvatar",
MetaURL = BasisLocalPlayer.DefaultAvatar,
},
BasisLocalEncryptedBundle = new BasisStoredEncyptedBundle()
{
LocalBundleFile = "LoadingAvatar",
LocalMetaFile = "LoadingAvatar",
LocalBundleFile = BasisLocalPlayer.DefaultAvatar,
LocalMetaFile = BasisLocalPlayer.DefaultAvatar,
},
};
public static async Task LoadAvatarLocal(BasisLocalPlayer Player,byte Mode, BasisLoadableBundle BasisLoadableBundle)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,8 @@ public static void FullBodyCalibration()
BasisBoneTrackedRole role = trackInputRoles[Index];
if (BasisLocalPlayer.Instance.LocalBoneDriver.FindBone(out BasisBoneControl control, role))
{
float ScaledDistance = MaxDistanceBeforeMax(role) * BasisLocalPlayer.Instance.EyeRatioAvatarToAvatarDefaultScale;
BasisDebug.Log("Using a scaler of " + BasisLocalPlayer.Instance.EyeRatioAvatarToAvatarDefaultScale + " leading to a scaled Distance of " + ScaledDistance);
float ScaledDistance = MaxDistanceBeforeMax(role) * BasisLocalPlayer.Instance.CurrentHeight.EyeRatioAvatarToAvatarDefaultScale;
BasisDebug.Log("Using a scaler of " + BasisLocalPlayer.Instance.CurrentHeight.EyeRatioAvatarToAvatarDefaultScale + " leading to a scaled Distance of " + ScaledDistance);
if (StoredRolesTransforms.TryGetValue(role, out Transform Transform))
{
BasisTrackerMapping mapping = new BasisTrackerMapping(control, Transform, role, connectors, ScaledDistance);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using Basis.Scripts.BasisSdk.Players;
using System;
using System.IO;
using System.Threading;
Expand Down Expand Up @@ -201,7 +202,10 @@ public static async Task DownloadAndSaveMetaFile(BasisTrackedBundleWrapper Basis
{
if (!File.Exists(BasisTrackedBundleWrapper.LoadableBundle.BasisRemoteBundleEncrypted.MetaURL))
{
BasisDebug.LogError($"Local meta file not found: {metaUrl}");
if (metaUrl != BasisLocalPlayer.DefaultAvatar)
{
BasisDebug.LogError($"Local meta file not found: {metaUrl}");
}
return;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ public static async Task<GameObject> LoadGameObjectBundle(BasisLoadableBundle lo
}
}

return await HandleFirstBundleLoad(loadableBundle, useContentRemoval, report, cancellationToken, Position, Rotation, Scale, Parent);
return await HandleFirstBundleLoad(loadableBundle, useContentRemoval, report, cancellationToken, Position, Rotation, Scale, ModifyScale, Parent);
}

public static async Task<Scene> LoadSceneBundle(bool makeActiveScene, BasisLoadableBundle loadableBundle, BasisProgressReport report, CancellationToken cancellationToken)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ public void StartWaitAndSetUILocation()
}
public void UpdateVisualSizeAndOffset()
{
gameObject.transform.localScale = ScaleOfModel * BasisLocalPlayer.Instance.EyeRatioAvatarToAvatarDefaultScale;
gameObject.transform.SetLocalPositionAndRotation(ModelPositionOffset * BasisLocalPlayer.Instance.EyeRatioPlayerToDefaultScale, ModelRotationOffset);
gameObject.transform.localScale = ScaleOfModel * BasisLocalPlayer.Instance.CurrentHeight.EyeRatioAvatarToAvatarDefaultScale;
gameObject.transform.SetLocalPositionAndRotation(ModelPositionOffset * BasisLocalPlayer.Instance.CurrentHeight.EyeRatioPlayerToDefaultScale, ModelRotationOffset);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -167,14 +167,23 @@ public void InitalizeTracking(string uniqueID, string unUniqueDeviceID, string s
BasisDebug.Log("Overriding Tracker " + BasisDeviceMatchSettings.DeviceID, BasisDebug.LogTag.Input);
AssignRoleAndTracker(BasisDeviceMatchSettings.TrackedRole);
}

AvatarRotationOffset = BasisDeviceMatchSettings.AvatarRotationOffset;
AvatarPositionOffset = BasisDeviceMatchSettings.AvatarPositionOffset;
HasRaycastSupport = BasisDeviceMatchSettings.HasRayCastSupport;
HasInteractVisual = BasisDeviceMatchSettings.HasInteractVisual;
if (HasRaycastSupport)
if (hasRoleAssigned)
{
AvatarRotationOffset = BasisDeviceMatchSettings.AvatarRotationOffset;
AvatarPositionOffset = BasisDeviceMatchSettings.AvatarPositionOffset;
HasRaycastSupport = BasisDeviceMatchSettings.HasRayCastSupport;
HasInteractVisual = BasisDeviceMatchSettings.HasInteractVisual;
if (HasRaycastSupport)
{
CreateRayCaster(this);
}
}
else
{
CreateRayCaster(this);
HasRaycastSupport = false;
HasInteractVisual = false;
AvatarPositionOffset = Vector3.zero;
AvatarRotationOffset = Vector3.zero;
}

if (HasEvents == false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ public void Initalize(string ID = "Desktop Eye", string subSystems = "BasisDeskt
BasisDebug.Log("Initalizing Avatar Eye", BasisDebug.LogTag.Input);
if (BasisLocalPlayer.Instance.AvatarDriver != null)
{
BasisDebug.Log("Using Configured Height " + BasisLocalPlayer.Instance.PlayerEyeHeight, BasisDebug.LogTag.Input);
LocalRawPosition = new Vector3(InjectedX, BasisLocalPlayer.Instance.PlayerEyeHeight, InjectedZ);
BasisDebug.Log("Using Configured Height " + BasisLocalPlayer.Instance.CurrentHeight.PlayerEyeHeight, BasisDebug.LogTag.Input);
LocalRawPosition = new Vector3(InjectedX, BasisLocalPlayer.Instance.CurrentHeight.PlayerEyeHeight, InjectedZ);
LocalRawRotation = Quaternion.identity;
}
else
Expand Down Expand Up @@ -98,7 +98,7 @@ private void OnCursorStateChange(CursorLockMode cursor, bool newCursorVisible)
}
private void BasisLocalPlayer_OnPlayersHeightChanged()
{
BasisLocalPlayer.Instance.PlayerEyeHeight = BasisLocalPlayer.Instance.AvatarEyeHeight;
BasisLocalPlayer.Instance.CurrentHeight.PlayerEyeHeight = BasisLocalPlayer.Instance.CurrentHeight.AvatarEyeHeight;
}
public void PlayerInitialized()
{
Expand Down Expand Up @@ -144,7 +144,7 @@ public override void DoPollData()
// Clamp rotationY to stay within the specified range
rotationY = Mathf.Clamp(rotationY, minimumY, maximumY);
LocalRawRotation = Quaternion.Euler(rotationY, rotationX, InjectedZRot);
Vector3 adjustedHeadPosition = new Vector3(InjectedX, BasisLocalPlayer.Instance.PlayerEyeHeight, InjectedZ);
Vector3 adjustedHeadPosition = new Vector3(InjectedX, BasisLocalPlayer.Instance.CurrentHeight.PlayerEyeHeight, InjectedZ);
if (BasisLocalInputActions.Crouching)
{
adjustedHeadPosition.y -= Control.TposeLocal.position.y * crouchPercentage;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,14 @@ public override void DoPollData()
LocalRawPosition = deviceTransform.pos;
LocalRawRotation = deviceTransform.rot;

FinalPosition = LocalRawPosition * BasisLocalPlayer.Instance.EyeRatioAvatarToAvatarDefaultScale;
FinalPosition = LocalRawPosition * BasisLocalPlayer.Instance.CurrentHeight.EyeRatioAvatarToAvatarDefaultScale;
FinalRotation = LocalRawRotation;
if (hasRoleAssigned)
{
if (Control.HasTracked != BasisHasTracked.HasNoTracker)
{
// Apply the position offset using math.mul for quaternion-vector multiplication
Control.IncomingData.position = FinalPosition - math.mul(FinalRotation, AvatarPositionOffset * BasisLocalPlayer.Instance.EyeRatioAvatarToAvatarDefaultScale);
Control.IncomingData.position = FinalPosition - math.mul(FinalRotation, AvatarPositionOffset * BasisLocalPlayer.Instance.CurrentHeight.EyeRatioAvatarToAvatarDefaultScale);

// Apply the rotation offset using math.mul for quaternion multiplication
Control.IncomingData.rotation = math.mul(FinalRotation, Quaternion.Euler(AvatarRotationOffset));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,14 +80,14 @@ private void SteamVR_Behaviour_Pose_OnUpdate(SteamVR_Action_Pose fromAction, Ste
LocalRawPosition = poseAction[inputSource].localPosition;
LocalRawRotation = poseAction[inputSource].localRotation;
}
FinalPosition = LocalRawPosition * BasisLocalPlayer.Instance.EyeRatioAvatarToAvatarDefaultScale;
FinalPosition = LocalRawPosition * BasisLocalPlayer.Instance.CurrentHeight.EyeRatioAvatarToAvatarDefaultScale;
FinalRotation = LocalRawRotation;
if (hasRoleAssigned)
{
if (Control.HasTracked != BasisHasTracked.HasNoTracker)
{
// Apply position offset using math.mul for quaternion-vector multiplication
Control.IncomingData.position = FinalPosition - math.mul(FinalRotation, AvatarPositionOffset * BasisLocalPlayer.Instance.EyeRatioAvatarToAvatarDefaultScale);
Control.IncomingData.position = FinalPosition - math.mul(FinalRotation, AvatarPositionOffset * BasisLocalPlayer.Instance.CurrentHeight.EyeRatioAvatarToAvatarDefaultScale);

// Apply rotation offset using math.mul for quaternion multiplication
Control.IncomingData.rotation = math.mul(FinalRotation, Quaternion.Euler(AvatarRotationOffset));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public override void DoPollData()
{
if (Control.HasTracked != BasisHasTracked.HasNoTracker)
{
Control.IncomingData.position = FinalPosition - math.mul(FinalRotation, AvatarPositionOffset * BasisLocalPlayer.Instance.EyeRatioAvatarToAvatarDefaultScale);
Control.IncomingData.position = FinalPosition - math.mul(FinalRotation, AvatarPositionOffset * BasisLocalPlayer.Instance.CurrentHeight.EyeRatioAvatarToAvatarDefaultScale);
Control.IncomingData.rotation = math.mul(FinalRotation, Quaternion.Euler(AvatarRotationOffset));
}
}
Expand All @@ -54,7 +54,7 @@ public override void DoPollData()
}
}
}
FinalPosition = LocalRawPosition * BasisLocalPlayer.Instance.EyeRatioAvatarToAvatarDefaultScale;
FinalPosition = LocalRawPosition * BasisLocalPlayer.Instance.CurrentHeight.EyeRatioAvatarToAvatarDefaultScale;
FinalRotation = LocalRawRotation;
UpdatePlayerControl();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,11 @@ public override void DoPollData()
if (hasRoleAssigned && Control.HasTracked != BasisHasTracked.HasNoTracker)
{
// Apply the inverse rotation to position offset
Control.IncomingData.position = LocalRawPosition - math.mul(LocalRawRotation, AvatarPositionOffset * BasisLocalPlayer.Instance.EyeRatioAvatarToAvatarDefaultScale);
Control.IncomingData.position = LocalRawPosition - math.mul(LocalRawRotation, AvatarPositionOffset * BasisLocalPlayer.Instance.CurrentHeight.EyeRatioAvatarToAvatarDefaultScale);
}
}

FinalPosition = LocalRawPosition * BasisLocalPlayer.Instance.EyeRatioAvatarToAvatarDefaultScale;
FinalPosition = LocalRawPosition * BasisLocalPlayer.Instance.CurrentHeight.EyeRatioAvatarToAvatarDefaultScale;
FinalRotation = LocalRawRotation;

// Input States
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,17 @@ public class BasisOpenXRManagement : BasisBaseTypeManagement
public List<InputDevice> inputDevices = new List<InputDevice>();
public Dictionary<string, InputDevice> TypicalDevices = new Dictionary<string, InputDevice>();
public bool HasEvents = false;
private async void OnDeviceConnected(InputDevice device)
private void OnDeviceConnected(InputDevice device)
{
await UpdateDeviceList();
UpdateDeviceList();
}

private async void OnDeviceDisconnected(InputDevice device)
private void OnDeviceDisconnected(InputDevice device)
{
await UpdateDeviceList();
UpdateDeviceList();
}

private async Task UpdateDeviceList()
private void UpdateDeviceList()
{
InputDevices.GetDevices(inputDevices);

Expand Down Expand Up @@ -127,7 +127,7 @@ public override void BeginLoadSDK()
{
}

public override async void StartSDK()
public override void StartSDK()
{
BasisDeviceManagement.Instance.SetCameraRenderState(true);
BasisDebug.Log("Starting BasisOpenXRManagement");
Expand All @@ -137,7 +137,7 @@ public override async void StartSDK()
InputDevices.deviceDisconnected += OnDeviceDisconnected;
HasEvents = true;
}
await UpdateDeviceList();
UpdateDeviceList();
}

public override string Type()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,16 +30,16 @@ public override void DoPollData()
LocalRawPosition = VOut;
LocalRawRotation = QOut;

LocalRawPosition /= BasisLocalPlayer.Instance.EyeRatioPlayerToDefaultScale;
LocalRawPosition /= BasisLocalPlayer.Instance.CurrentHeight.EyeRatioPlayerToDefaultScale;

FinalPosition = LocalRawPosition * BasisLocalPlayer.Instance.EyeRatioPlayerToDefaultScale;
FinalPosition = LocalRawPosition * BasisLocalPlayer.Instance.CurrentHeight.EyeRatioPlayerToDefaultScale;
FinalRotation = LocalRawRotation;
if (hasRoleAssigned)
{
if (Control.HasTracked != BasisHasTracked.HasNoTracker)
{
// Apply the position offset using math.mul for quaternion-vector multiplication
Control.IncomingData.position = FinalPosition - math.mul(FinalRotation, AvatarPositionOffset * BasisLocalPlayer.Instance.EyeRatioAvatarToAvatarDefaultScale);
Control.IncomingData.position = FinalPosition - math.mul(FinalRotation, AvatarPositionOffset * BasisLocalPlayer.Instance.CurrentHeight.EyeRatioAvatarToAvatarDefaultScale);
Control.IncomingData.rotation = math.mul(FinalRotation, Quaternion.Euler(AvatarRotationOffset));
}
}
Expand Down
Loading
Loading