修改脚本
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace NBF
|
||||
{
|
||||
public class JointPinchController : MonoBehaviour
|
||||
{
|
||||
// 配置参数
|
||||
[SerializeField] private float moveSpeed = 5f;
|
||||
[SerializeField] private float snapDistance = 0.1f;
|
||||
|
||||
// 组件引用
|
||||
private ConfigurableJoint originalSpringJoint;
|
||||
private FixedJoint pinchJoint;
|
||||
private Rigidbody rb;
|
||||
|
||||
|
||||
private Transform targetTransform;
|
||||
private float originalSpring;
|
||||
|
||||
public bool isPinched { get; private set; }
|
||||
|
||||
|
||||
private bool moveToTargetDone;
|
||||
private float _speed;
|
||||
|
||||
void Start()
|
||||
{
|
||||
rb = GetComponent<Rigidbody>();
|
||||
originalSpringJoint = GetComponent<ConfigurableJoint>();
|
||||
}
|
||||
|
||||
void FixedUpdate()
|
||||
{
|
||||
if (isPinched && targetTransform != null)
|
||||
{
|
||||
transform.position =
|
||||
Vector3.MoveTowards(transform.position, targetTransform.position, Time.deltaTime * _speed);
|
||||
if (!moveToTargetDone)
|
||||
{
|
||||
if (Vector3.Distance(transform.position, targetTransform.position) < 0.1f)
|
||||
{
|
||||
moveToTargetDone = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (moveToTargetDone)
|
||||
{
|
||||
transform.position = targetTransform.position;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 外部调用:开始捏住流程
|
||||
public void StartPinch(Transform fingerTransform, float speed = 3)
|
||||
{
|
||||
_speed = speed;
|
||||
Rigidbody fingerRb = fingerTransform.GetComponent<Rigidbody>();
|
||||
if (fingerRb == null)
|
||||
{
|
||||
Debug.LogError("目标必须带有Rigidbody");
|
||||
return;
|
||||
}
|
||||
|
||||
isPinched = true;
|
||||
rb.useGravity = false;
|
||||
rb.isKinematic = true;
|
||||
moveToTargetDone = false;
|
||||
targetTransform = fingerTransform;
|
||||
}
|
||||
|
||||
|
||||
// 外部调用:释放捏住
|
||||
public void ReleasePinch()
|
||||
{
|
||||
isPinched = false;
|
||||
rb.useGravity = true;
|
||||
rb.linearVelocity = Vector3.zero;
|
||||
rb.angularVelocity = Vector3.zero;
|
||||
rb.isKinematic = false;
|
||||
rb.linearVelocity = Vector3.zero;
|
||||
rb.angularVelocity = Vector3.zero;
|
||||
targetTransform = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1de1bec90e454664a860c5248170ff95
|
||||
timeCreated: 1773588197
|
||||
@@ -152,6 +152,7 @@ namespace NBF
|
||||
/// </summary>
|
||||
public void OnRodThrowStart()
|
||||
{
|
||||
Debug.LogError("OnRodThrowStart");
|
||||
if (Player.State == PlayerState.Throw)
|
||||
{
|
||||
var playerStateView = Player.GetComponent<PlayerStateView>();
|
||||
@@ -167,6 +168,7 @@ namespace NBF
|
||||
/// </summary>
|
||||
public void OnRodThrownEnd()
|
||||
{
|
||||
Debug.LogError("OnRodThrownEnd");
|
||||
if (Player.State == PlayerState.Throw)
|
||||
{
|
||||
var playerStateView = Player.GetComponent<PlayerStateView>();
|
||||
|
||||
Reference in New Issue
Block a user