fix(fix-system): 修正线盘松弛预判朝向与绷紧判定
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -92,10 +92,11 @@ namespace AibisDream.FixSystem
|
||||
return;
|
||||
}
|
||||
|
||||
// 线缆还有余量时不驱动转盘,避免"还没拉紧就先转"
|
||||
// 松弛时不驱动转盘,并缓动回正,避免出线口对着插头“预判”朝向
|
||||
if (tautness <= 0f)
|
||||
{
|
||||
angularVelocity *= Mathf.Exp(-angularDamping * Time.deltaTime);
|
||||
angularVelocity = 0f;
|
||||
currentAngle = Mathf.LerpAngle(currentAngle, 0f, returnSpeed * Time.deltaTime);
|
||||
ApplyRotation();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -96,16 +96,21 @@ public class PhysicCable : MonoBehaviour
|
||||
|
||||
public float CurrentLength => _length;
|
||||
|
||||
/// <summary>0=完全松弛,1=绷直。线盘只在真正拉紧后才应转动。</summary>
|
||||
public float GetTautness(float slackMargin = 0.35f)
|
||||
/// <summary>
|
||||
/// 0=完全松弛,1=绷直。已扣除送线故意留的余量(1.04×直线距 + lengthMargin),
|
||||
/// 避免「有设计余量就永远不转」;线盘只在真正被拽时才应转动。
|
||||
/// </summary>
|
||||
public float GetTautness(float extraSlackMargin = 0.2f)
|
||||
{
|
||||
if (State != CableState.Dragging && State != CableState.Plugged) return 0f;
|
||||
if (_pts == null || startTransform == null) return 0f;
|
||||
|
||||
float straightDist = Vector3.Distance(startTransform.position, FlattenZ(EndPosition));
|
||||
float slack = _length - straightDist;
|
||||
if (slack >= slackMargin) return 0f;
|
||||
return 1f - Mathf.Clamp01(slack / slackMargin);
|
||||
float baselineLength = straightDist * 1.04f + lengthMargin;
|
||||
float extraSlack = _length - baselineLength;
|
||||
if (extraSlack >= extraSlackMargin) return 0f;
|
||||
if (extraSlack <= 0f) return 1f;
|
||||
return 1f - extraSlack / extraSlackMargin;
|
||||
}
|
||||
|
||||
private struct Particle
|
||||
|
||||
@@ -199,15 +199,14 @@ namespace AibisDream.FixSystem
|
||||
|
||||
private void Update()
|
||||
{
|
||||
// 拖拽/插接时转盘朝插头方向转动,闲置时缓动回正。
|
||||
// 不再要求线缆完全绷紧,否则送线会让 tautness 长时间为 0,视觉上看不到旋转。
|
||||
// 仅拖拽时由拉力驱动出线口倾斜;插接/松弛不预判朝向插头。
|
||||
// GetTautness 已扣除送线设计余量,绷紧时才会转。
|
||||
if (CableReelRef != null && physicCableRef != null
|
||||
&& physicCableRef.State != PhysicCable.CableState.Hidden)
|
||||
{
|
||||
bool active = physicCableRef.State == PhysicCable.CableState.Dragging
|
||||
|| physicCableRef.State == PhysicCable.CableState.Plugged
|
||||
|| physicCableRef.State == PhysicCable.CableState.Collapsing;
|
||||
CableReelRef.UpdateRotation(active);
|
||||
bool active = physicCableRef.State == PhysicCable.CableState.Dragging;
|
||||
float tautness = active ? physicCableRef.GetTautness() : 0f;
|
||||
CableReelRef.UpdateRotation(active, tautness);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user