1
0
mirror of synced 2025-02-17 11:18:32 +01:00

add physics hand

This commit is contained in:
xpeng 2022-11-05 23:53:06 +01:00
parent b2c2a8311e
commit 687f2c8ec4
10 changed files with 4137 additions and 534 deletions

File diff suppressed because it is too large Load Diff

View File

@ -23,7 +23,7 @@ public class Config
public float HapticDuration = 0.1f; public float HapticDuration = 0.1f;
public float HapticAmplitude = 0.75f; public float HapticAmplitude = 0.75f;
public int TouchSampleRate = 3; public int TouchSampleRate = 3;
public int HandStabilization = 0; public int HandTrackingMode = 0;
public float Threshold = 0.3f; public float Threshold = 0.3f;
public float HandStabilVelocity = 0.3f; public float HandStabilVelocity = 0.3f;
public float HandStabilDistance = 0.1f; public float HandStabilDistance = 0.1f;

View File

@ -8,14 +8,17 @@ public class HandFollowManager : MonoBehaviour
public Transform Center; public Transform Center;
public CEnum.handStabilization Mode; public CEnum.handStabilization Mode;
public float VelocityThreshold = 0.1f; public float VelocityThreshold = 0.1f;
private Rigidbody currentRigidbody;
private Rigidbody TargetRigidbody; private Rigidbody TargetRigidbody;
private Vector3 previousPosition; private Vector3 previousPosition;
private void Start() private void Start()
{ {
TargetRigidbody = Target.GetComponent<Rigidbody>(); TargetRigidbody = Target.GetComponent<Rigidbody>();
currentRigidbody = GetComponent<Rigidbody>();
var modeWidget = ConfigManager.GetConfigPanelWidget("HandStabilization"); var modeWidget = ConfigManager.GetConfigPanelWidget("HandTrackingMode");
var threshWidget = ConfigManager.GetConfigPanelWidget("Threshold"); var threshWidget = ConfigManager.GetConfigPanelWidget("Threshold");
var modeDropdown = modeWidget.GetComponent<TMP_Dropdown>(); var modeDropdown = modeWidget.GetComponent<TMP_Dropdown>();
@ -24,6 +27,18 @@ public class HandFollowManager : MonoBehaviour
modeDropdown.onValueChanged.AddListener((int value) => { modeDropdown.onValueChanged.AddListener((int value) => {
VelocityThreshold = ConfigManager.config.HandStabilVelocity; VelocityThreshold = ConfigManager.config.HandStabilVelocity;
Mode = (CEnum.handStabilization)value; Mode = (CEnum.handStabilization)value;
switch (Mode)
{
case CEnum.handStabilization.None:
currentRigidbody.isKinematic = true;
break;
case CEnum.handStabilization.Physics:
currentRigidbody.isKinematic = false;
break;
case CEnum.handStabilization.Velocity:
currentRigidbody.isKinematic = true;
break;
}
}); });
threshSlider.onValueChanged.AddListener((float value) => { threshSlider.onValueChanged.AddListener((float value) => {
@ -40,9 +55,21 @@ public class HandFollowManager : MonoBehaviour
if (velocity.magnitude > VelocityThreshold) if (velocity.magnitude > VelocityThreshold)
{ {
transform.position = Target.transform.position; transform.position = Target.transform.position;
//PhysicsMove(Target.transform);
} }
previousPosition = Target.transform.position; previousPosition = Target.transform.position;
} }
private void PhysicsMove(Transform targetTransform)
{
currentRigidbody.velocity = (targetTransform.position - transform.position) / Time.fixedDeltaTime;
Quaternion rotationDelta = targetTransform.rotation * Quaternion.Inverse(transform.rotation);
rotationDelta.ToAngleAxis(out float angle, out Vector3 axis);
Vector3 rotationDeltaInDegrees = angle * axis;
currentRigidbody.angularVelocity = rotationDeltaInDegrees * Mathf.Deg2Rad / Time.fixedDeltaTime;
}
private void Update() private void Update()
{ {
gameObject.transform.localScale = Target.transform.localScale; gameObject.transform.localScale = Target.transform.localScale;
@ -52,12 +79,16 @@ public class HandFollowManager : MonoBehaviour
{ {
switch (Mode) switch (Mode)
{ {
case CEnum.handStabilization.Velocity:
VelocityTracking();
break;
case CEnum.handStabilization.None: case CEnum.handStabilization.None:
transform.position = Target.transform.position; transform.position = Target.transform.position;
break; break;
case CEnum.handStabilization.Physics:
//transform.position = Target.transform.position;
PhysicsMove(Target.transform);
break;
case CEnum.handStabilization.Velocity:
VelocityTracking();
break;
} }
} }
} }

View File

@ -38,9 +38,10 @@ public class CEnum
public enum handStabilization public enum handStabilization
{ {
None = 0, None = 0,
Velocity = 1, Physics = 1,
Distance = 2, Velocity = 2,
Smooth = 3, Distance = 3,
Smooth = 4,
} }
public enum listType public enum listType
{ {

View File

@ -5,7 +5,7 @@ TextureImporter:
externalObjects: {} externalObjects: {}
serializedVersion: 12 serializedVersion: 12
mipmaps: mipmaps:
mipMapMode: 0 mipMapMode: 1
enableMipMap: 1 enableMipMap: 1
sRGBTexture: 1 sRGBTexture: 1
linearTexture: 0 linearTexture: 0
@ -34,7 +34,7 @@ TextureImporter:
textureSettings: textureSettings:
serializedVersion: 2 serializedVersion: 2
filterMode: 1 filterMode: 1
aniso: 1 aniso: 4
mipBias: 0 mipBias: 0
wrapU: 0 wrapU: 0
wrapV: 0 wrapV: 0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 MiB

View File

@ -1,123 +0,0 @@
fileFormatVersion: 2
guid: f051b96be60b58d4bad870fd6b9d367c
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 12
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMasterTextureLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@ -18,7 +18,7 @@ PhysicsManager:
m_ClothInterCollisionDistance: 0.1 m_ClothInterCollisionDistance: 0.1
m_ClothInterCollisionStiffness: 0.2 m_ClothInterCollisionStiffness: 0.2
m_ContactsGeneration: 1 m_ContactsGeneration: 1
m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff m_LayerCollisionMatrix: fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
m_AutoSimulation: 1 m_AutoSimulation: 1
m_AutoSyncTransforms: 0 m_AutoSyncTransforms: 0
m_ReuseCollisionCallbacks: 0 m_ReuseCollisionCallbacks: 0

View File

@ -21,7 +21,7 @@ QualitySettings:
skinWeights: 2 skinWeights: 2
textureQuality: 0 textureQuality: 0
anisotropicTextures: 1 anisotropicTextures: 1
antiAliasing: 0 antiAliasing: 2
softParticles: 0 softParticles: 0
softVegetation: 0 softVegetation: 0
realtimeReflectionProbes: 1 realtimeReflectionProbes: 1
@ -29,7 +29,7 @@ QualitySettings:
vSyncCount: 0 vSyncCount: 0
lodBias: 0.4 lodBias: 0.4
maximumLODLevel: 0 maximumLODLevel: 0
streamingMipmapsActive: 0 streamingMipmapsActive: 1
streamingMipmapsAddAllCameras: 1 streamingMipmapsAddAllCameras: 1
streamingMipmapsMemoryBudget: 512 streamingMipmapsMemoryBudget: 512
streamingMipmapsRenderersPerFrame: 512 streamingMipmapsRenderersPerFrame: 512

View File

@ -15,8 +15,8 @@ TagManager:
- UIText - UIText
- LIVBlock - LIVBlock
- LEDs - LEDs
- - LHandPhysics
- - RHandPhysics
- -
- -
- -