修改提交

This commit is contained in:
2026-04-12 22:42:06 +08:00
parent c96255aaa5
commit de0b0558d6
2 changed files with 58 additions and 41 deletions

View File

@@ -219,9 +219,9 @@ GameObject:
m_Component:
- component: {fileID: 3116177874895914436}
- component: {fileID: 1033618195002336566}
- component: {fileID: 9117070148710828175}
- component: {fileID: 4152162740525283091}
- component: {fileID: 2513762410452133691}
- component: {fileID: 3049258369283796050}
m_Layer: 15
m_Name: Bobber
m_TagString: Untagged
@@ -271,29 +271,6 @@ Rigidbody:
m_Interpolate: 0
m_Constraints: 0
m_CollisionDetection: 0
--- !u!136 &9117070148710828175
CapsuleCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5252216124238432432}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 2
m_Radius: 0.003
m_Height: 0.02
m_Direction: 1
m_Center: {x: 0, y: 0.03, z: 0}
--- !u!114 &4152162740525283091
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -373,6 +350,27 @@ MonoBehaviour:
invertTiltDirection: 0
rotationLerpSpeed: 8
waterAngularDamping: 999
--- !u!65 &3049258369283796050
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5252216124238432432}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Size: {x: 0.02, y: 0.02, z: 0.02}
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &5438655829551842420
GameObject:
m_ObjectHideFlags: 0
@@ -500,7 +498,7 @@ LineRenderer:
m_Curve:
- serializedVersion: 3
time: 0
value: 0.002
value: 0.001
inSlope: 0
outSlope: 0
tangentMode: 0
@@ -580,8 +578,6 @@ MonoBehaviour:
sleepDistanceThreshold: 0.002
stableFramesBeforeSleep: 4
wakeDistanceThreshold: 0.001
tautSegmentThreshold: 0.002
tautTransitionRange: 0.03
smoothCorners: 1
minCornerAngle: 12
maxCornerSmoothDistance: 0.03

View File

@@ -188,6 +188,7 @@ namespace NBF
private bool _waterStateInitialized;
private float _defaultAngularDamping;
private bool _defaultUseGravity;
private RigidbodyConstraints _defaultConstraints;
private float _draftVelocity;
private float _currentDraftDepth;
@@ -195,6 +196,8 @@ namespace NBF
private float _biteOffsetY;
private float _biteOffsetYVelocity;
private bool _uprightPoseCached;
private Quaternion _cachedUprightRotation;
private Quaternion _uprightReferenceRotation;
private Quaternion _targetRotation;
@@ -284,8 +287,9 @@ namespace NBF
UpdateBiteAnimation(deltaTime);
UpdateDraft(deltaTime);
UpdateVerticalPosition(deltaTime);
UpdateRotation(deltaTime);
var nextRotation = CalculateNextRotation(deltaTime);
UpdateVerticalPosition(deltaTime, nextRotation);
ApplyRotation(nextRotation);
}
#endregion
@@ -360,6 +364,7 @@ namespace NBF
{
_defaultAngularDamping = _rb.angularDamping;
_defaultUseGravity = _rb.useGravity;
_defaultConstraints = _rb.constraints;
_defaultsCached = true;
}
@@ -368,12 +373,15 @@ namespace NBF
_ySmoothVelocity = 0f;
_biteOffsetY = 0f;
_biteOffsetYVelocity = 0f;
_targetRotation = transform.rotation;
_targetRotation = _rb.rotation;
if (!_waterStateInitialized)
if (!_uprightPoseCached)
{
_uprightReferenceRotation = transform.rotation;
_cachedUprightRotation = _rb.rotation;
_uprightPoseCached = true;
}
_uprightReferenceRotation = _cachedUprightRotation;
}
private void EnterWaterPresentationMode()
@@ -385,8 +393,8 @@ namespace NBF
_mode = FishingBobberControlMode.WaterPresentation;
_waterStateInitialized = true;
_uprightReferenceRotation = transform.rotation;
_targetRotation = transform.rotation;
_uprightReferenceRotation = _cachedUprightRotation;
_targetRotation = _rb.rotation;
_draftVelocity = 0f;
_ySmoothVelocity = 0f;
_biteOffsetYVelocity = 0f;
@@ -394,6 +402,8 @@ namespace NBF
_rb.useGravity = false;
_rb.angularDamping = waterAngularDamping;
_rb.constraints = _defaultConstraints | RigidbodyConstraints.FreezeRotation;
_rb.angularVelocity = Vector3.zero;
}
private void ExitWaterPresentationMode()
@@ -411,6 +421,7 @@ namespace NBF
_rb.useGravity = _defaultUseGravity;
_rb.angularDamping = _defaultAngularDamping;
_rb.constraints = _defaultConstraints;
}
private float GetSubmergeDepth()
@@ -442,10 +453,10 @@ namespace NBF
deltaTime);
}
private void UpdateVerticalPosition(float deltaTime)
private void UpdateVerticalPosition(float deltaTime, Quaternion targetRotation)
{
var position = transform.position;
var targetY = waterLevel - _currentDraftDepth - bottomOffsetLocalY + _biteOffsetY;
var position = _rb.position;
var targetY = waterLevel - _currentDraftDepth - GetBottomOffsetWorldY(targetRotation) + _biteOffsetY;
if (Mathf.Abs(position.y - targetY) < yDeadZone)
{
@@ -463,7 +474,7 @@ namespace NBF
deltaTime);
}
transform.position = position;
_rb.MovePosition(position);
var velocity = _rb.linearVelocity;
if (Mathf.Abs(velocity.y) > 0f)
@@ -473,7 +484,7 @@ namespace NBF
}
}
private void UpdateRotation(float deltaTime)
private Quaternion CalculateNextRotation(float deltaTime)
{
var targetTiltAngle = EvaluateTargetTiltAngle();
var signedAngle = invertTiltDirection ? -targetTiltAngle : targetTiltAngle;
@@ -481,12 +492,22 @@ namespace NBF
_targetRotation = _uprightReferenceRotation * Quaternion.AngleAxis(signedAngle, localAxis);
_rb.angularVelocity = Vector3.zero;
transform.rotation = Quaternion.Slerp(
transform.rotation,
return Quaternion.Slerp(
_rb.rotation,
_targetRotation,
1f - Mathf.Exp(-Mathf.Max(0.01f, rotationLerpSpeed) * deltaTime));
}
private void ApplyRotation(Quaternion nextRotation)
{
_rb.rotation = nextRotation;
}
private float GetBottomOffsetWorldY(Quaternion rotation)
{
return (rotation * new Vector3(0f, bottomOffsetLocalY, 0f)).y;
}
private float EvaluateTargetTiltAngle()
{
if (currentBottomWeight <= lyingWeightThreshold)