修改鱼线节点逻辑
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace NBF
|
||||
{
|
||||
public class FishingLineTestController : MonoBehaviour
|
||||
{
|
||||
[Header("References")] [SerializeField]
|
||||
private FishingLineSolver solver;
|
||||
|
||||
[Header("Length Test")] [Min(0f)] [SerializeField]
|
||||
private float initialFirstSegmentLength = 1.2f;
|
||||
|
||||
[Min(0f)] [SerializeField] private float minFirstSegmentLength = 0.1f;
|
||||
[Min(0f)] [SerializeField] private float maxFirstSegmentLength = 5f;
|
||||
[Min(0f)] [SerializeField] private float lineAdjustSpeed = 1f;
|
||||
|
||||
[Header("Input")] [SerializeField] private KeyCode extendKey = KeyCode.UpArrow;
|
||||
[SerializeField] private KeyCode retractKey = KeyCode.DownArrow;
|
||||
|
||||
private float targetFirstSegmentLength;
|
||||
|
||||
private void Reset()
|
||||
{
|
||||
if (solver == null)
|
||||
{
|
||||
solver = GetComponent<FishingLineSolver>();
|
||||
}
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
if (solver == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
targetFirstSegmentLength =
|
||||
Mathf.Clamp(initialFirstSegmentLength, minFirstSegmentLength, maxFirstSegmentLength);
|
||||
solver.SetLenght(targetFirstSegmentLength);
|
||||
solver.BuildLine();
|
||||
|
||||
solver.OnLineBreakRequested += OnLineBreakRequested;
|
||||
}
|
||||
|
||||
private void OnLineBreakRequested(FishingLineSolver lineSolver)
|
||||
{
|
||||
Debug.LogError(
|
||||
$"当前拉力达到极限,切线,极限时间={lineSolver.LimitStateTime} CurrentStretchLength={lineSolver.CurrentStretchLength} CurrentTensionRatio={lineSolver.CurrentTensionRatio}");
|
||||
var endNode = lineSolver.GetEndNode();
|
||||
if (endNode != null)
|
||||
{
|
||||
endNode.Body.isKinematic = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (solver == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var input = 0f;
|
||||
if (Input.GetKey(extendKey))
|
||||
{
|
||||
input += 1f;
|
||||
}
|
||||
|
||||
if (Input.GetKey(retractKey))
|
||||
{
|
||||
input -= 1f;
|
||||
}
|
||||
|
||||
if (!Mathf.Approximately(input, 0f))
|
||||
{
|
||||
targetFirstSegmentLength += input * lineAdjustSpeed * Time.deltaTime;
|
||||
targetFirstSegmentLength =
|
||||
Mathf.Clamp(targetFirstSegmentLength, minFirstSegmentLength, maxFirstSegmentLength);
|
||||
solver.SetLenght(targetFirstSegmentLength);
|
||||
}
|
||||
|
||||
if (solver.CurrentBreakStretchPercent > 0)
|
||||
{
|
||||
// Debug.LogError(solver.CurrentBreakStretchPercent);
|
||||
}
|
||||
// if (solver.IsAtLimit)
|
||||
// {
|
||||
// if (solver.CurrentStretchLength > 0.04)
|
||||
// Debug.LogError($"CurrentStretchLength={solver.CurrentStretchLength}");
|
||||
// if (solver.CurrentStretchLength > 0.1 && solver.LimitStateTime > 2f)
|
||||
// {
|
||||
// Debug.LogError(
|
||||
// $"当前拉力达到极限,切线,极限时间={solver.LimitStateTime} CurrentStretchLength={solver.CurrentStretchLength} CurrentTensionRatio={solver.CurrentTensionRatio}");
|
||||
// var endNode = solver.GetEndNode();
|
||||
// if (endNode != null)
|
||||
// {
|
||||
// endNode.Body.isKinematic = false;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user