Files
2026-03-05 18:07:55 +08:00

104 lines
3.4 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using UnityEngine;
// using WaveHarmonic.Crest;
namespace NBF
{
public class Boat : MonoBehaviour
{
private Collider boatCollider;
[Tooltip("移动力应施加于质心的垂直偏移量。")] [SerializeField]
float _ForceHeightOffset;
[Tooltip("推力")] [SerializeField] float _ThrustPower = 10f;
[Tooltip("加速推力")] [SerializeField] float _ThrustMaxPower = 10f;
[Tooltip("转向速度")] [SerializeField] float _SteerPower = 1f;
[Tooltip("转弯时要转动船只。")] [Range(0, 1)] [SerializeField]
float _TurningHeel = 0.35f;
[Tooltip("对浮力变化应用曲线处理。")] [SerializeField]
AnimationCurve _BuoyancyCurveFactor = new(new Keyframe[]
{
new(0, 0, 0.01267637f, 0.01267637f),
new(0.6626424f, 0.1791001f, 0.8680198f, 0.8680198f), new(1, 1, 3.38758f, 3.38758f)
});
/// <summary>
/// 船坐下位置
/// </summary>
public Transform Place;
/// <summary>
/// 船站立位置
/// </summary>
public Transform standPlace;
// /// <summary>
// /// 浮力组件
// /// </summary>
// private FloatingObject _floatingObject;
private float _BuoyancyFactor = 1f;
private void Awake()
{
boatCollider = GetComponent<Collider>();
// if (_floatingObject == null) _floatingObject = GetComponent<FloatingObject>();
}
public void Use(FPlayer player)
{
boatCollider.enabled = false;
}
public void UnUse()
{
boatCollider.enabled = true;
}
public void BoatInput(Vector2 moveInput, bool isRun = false)
{
// if (!_floatingObject.InWater) return;
//
// var input = Vector3.zero;
// input.x = moveInput.x; // 水平转向x轴
// input.z = moveInput.y; // 前后移动y轴映射到z轴
//
// var rb = _floatingObject.RigidBody;
//
// var power = isRun ? _ThrustMaxPower : _ThrustPower;
//
// // Thrust
// var forcePosition = rb.worldCenterOfMass + _ForceHeightOffset * Vector3.up;
// rb.AddForceAtPosition(power * input.z * transform.forward, forcePosition, ForceMode.Acceleration);
//
// // Steer
// var rotation = transform.up + _TurningHeel * transform.forward;
// rb.AddTorque(_SteerPower * input.x * rotation, ForceMode.Acceleration);
//
// if (input.y > 0f)
// {
// if (_BuoyancyFactor < 1f)
// {
// _BuoyancyFactor += Time.deltaTime * 0.1f;
// _BuoyancyFactor = Mathf.Clamp(_BuoyancyFactor, 0f, 1f);
// _floatingObject.BuoyancyForceStrength = _BuoyancyCurveFactor.Evaluate(_BuoyancyFactor);
// }
// }
// else if (input.y < 0f)
// {
// if (_BuoyancyFactor > 0f)
// {
// _BuoyancyFactor -= Time.deltaTime * 0.1f;
// _BuoyancyFactor = Mathf.Clamp(_BuoyancyFactor, 0f, 1f);
// _floatingObject.BuoyancyForceStrength = _BuoyancyCurveFactor.Evaluate(_BuoyancyFactor);
// }
// }
}
}
}