some bugfixes
- Небольшие багфиксы
This commit is contained in:
parent
e7b983b52d
commit
ebc768d7e1
@ -32,7 +32,10 @@ AnimatorStateTransition:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name:
|
||||
m_Conditions: []
|
||||
m_Conditions:
|
||||
- m_ConditionMode: 1
|
||||
m_ConditionEvent: Jump
|
||||
m_EventTreshold: 0
|
||||
m_DstStateMachine: {fileID: 0}
|
||||
m_DstState: {fileID: 1536571424612025499}
|
||||
m_Solo: 0
|
||||
@ -41,7 +44,7 @@ AnimatorStateTransition:
|
||||
serializedVersion: 3
|
||||
m_TransitionDuration: 0
|
||||
m_TransitionOffset: 0
|
||||
m_ExitTime: 1
|
||||
m_ExitTime: 0.9999999
|
||||
m_HasExitTime: 0
|
||||
m_HasFixedDuration: 0
|
||||
m_InterruptionSource: 0
|
||||
@ -64,19 +67,19 @@ AnimatorStateMachine:
|
||||
m_Position: {x: 670, y: -80, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: 1536571424612025499}
|
||||
m_Position: {x: 420, y: -80, z: 0}
|
||||
m_Position: {x: 500, y: 50, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: -1677127065308032807}
|
||||
m_Position: {x: 420, y: -10, z: 0}
|
||||
m_Position: {x: 560, y: 190, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: 2146024918338126406}
|
||||
m_Position: {x: 560, y: 90, z: 0}
|
||||
m_Position: {x: 800, y: 710, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: -2911048155697096596}
|
||||
m_Position: {x: 240, y: -200, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: 8227788254774177026}
|
||||
m_Position: {x: 560, y: 160, z: 0}
|
||||
m_Position: {x: 550, y: 520, z: 0}
|
||||
m_ChildStateMachines: []
|
||||
m_AnyStateTransitions:
|
||||
- {fileID: -4830528242049520311}
|
||||
@ -86,7 +89,7 @@ AnimatorStateMachine:
|
||||
m_StateMachineBehaviours: []
|
||||
m_AnyStatePosition: {x: 260, y: -250, z: 0}
|
||||
m_EntryPosition: {x: 570, y: -250, z: 0}
|
||||
m_ExitPosition: {x: 260, y: 170, z: 0}
|
||||
m_ExitPosition: {x: 630, y: 990, z: 0}
|
||||
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
|
||||
m_DefaultState: {fileID: 8840150632353296388}
|
||||
--- !u!1101 &-4830528242049520311
|
||||
@ -327,6 +330,7 @@ AnimatorState:
|
||||
m_CycleOffset: 0
|
||||
m_Transitions:
|
||||
- {fileID: 8578009936554051176}
|
||||
- {fileID: 5790086725413553050}
|
||||
m_StateMachineBehaviours: []
|
||||
m_Position: {x: 50, y: 50, z: 0}
|
||||
m_IKOnFeet: 0
|
||||
@ -476,6 +480,31 @@ AnimatorStateTransition:
|
||||
m_InterruptionSource: 0
|
||||
m_OrderedInterruption: 1
|
||||
m_CanTransitionToSelf: 1
|
||||
--- !u!1101 &5790086725413553050
|
||||
AnimatorStateTransition:
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name:
|
||||
m_Conditions:
|
||||
- m_ConditionMode: 1
|
||||
m_ConditionEvent: Grounded
|
||||
m_EventTreshold: 0
|
||||
m_DstStateMachine: {fileID: 0}
|
||||
m_DstState: {fileID: 8227788254774177026}
|
||||
m_Solo: 0
|
||||
m_Mute: 0
|
||||
m_IsExit: 0
|
||||
serializedVersion: 3
|
||||
m_TransitionDuration: 0
|
||||
m_TransitionOffset: 0
|
||||
m_ExitTime: 0
|
||||
m_HasExitTime: 0
|
||||
m_HasFixedDuration: 0
|
||||
m_InterruptionSource: 0
|
||||
m_OrderedInterruption: 1
|
||||
m_CanTransitionToSelf: 1
|
||||
--- !u!1101 &6491802289576890105
|
||||
AnimatorStateTransition:
|
||||
m_ObjectHideFlags: 1
|
||||
|
||||
@ -5352,6 +5352,81 @@ MonoBehaviour:
|
||||
m_XAdvance: 0
|
||||
m_YAdvance: 0
|
||||
m_FeatureLookupFlags: 0
|
||||
- m_FirstAdjustmentRecord:
|
||||
m_GlyphIndex: 55
|
||||
m_GlyphValueRecord:
|
||||
m_XPlacement: 0
|
||||
m_YPlacement: 0
|
||||
m_XAdvance: -4.745117
|
||||
m_YAdvance: 0
|
||||
m_SecondAdjustmentRecord:
|
||||
m_GlyphIndex: 16
|
||||
m_GlyphValueRecord:
|
||||
m_XPlacement: 0
|
||||
m_YPlacement: 0
|
||||
m_XAdvance: 0
|
||||
m_YAdvance: 0
|
||||
m_FeatureLookupFlags: 0
|
||||
- m_FirstAdjustmentRecord:
|
||||
m_GlyphIndex: 57
|
||||
m_GlyphValueRecord:
|
||||
m_XPlacement: 0
|
||||
m_YPlacement: 0
|
||||
m_XAdvance: -4.745117
|
||||
m_YAdvance: 0
|
||||
m_SecondAdjustmentRecord:
|
||||
m_GlyphIndex: 16
|
||||
m_GlyphValueRecord:
|
||||
m_XPlacement: 0
|
||||
m_YPlacement: 0
|
||||
m_XAdvance: 0
|
||||
m_YAdvance: 0
|
||||
m_FeatureLookupFlags: 0
|
||||
- m_FirstAdjustmentRecord:
|
||||
m_GlyphIndex: 58
|
||||
m_GlyphValueRecord:
|
||||
m_XPlacement: 0
|
||||
m_YPlacement: 0
|
||||
m_XAdvance: -1.5537109
|
||||
m_YAdvance: 0
|
||||
m_SecondAdjustmentRecord:
|
||||
m_GlyphIndex: 16
|
||||
m_GlyphValueRecord:
|
||||
m_XPlacement: 0
|
||||
m_YPlacement: 0
|
||||
m_XAdvance: 0
|
||||
m_YAdvance: 0
|
||||
m_FeatureLookupFlags: 0
|
||||
- m_FirstAdjustmentRecord:
|
||||
m_GlyphIndex: 60
|
||||
m_GlyphValueRecord:
|
||||
m_XPlacement: 0
|
||||
m_YPlacement: 0
|
||||
m_XAdvance: -7.8945312
|
||||
m_YAdvance: 0
|
||||
m_SecondAdjustmentRecord:
|
||||
m_GlyphIndex: 16
|
||||
m_GlyphValueRecord:
|
||||
m_XPlacement: 0
|
||||
m_YPlacement: 0
|
||||
m_XAdvance: 0
|
||||
m_YAdvance: 0
|
||||
m_FeatureLookupFlags: 0
|
||||
- m_FirstAdjustmentRecord:
|
||||
m_GlyphIndex: 855
|
||||
m_GlyphValueRecord:
|
||||
m_XPlacement: 0
|
||||
m_YPlacement: 0
|
||||
m_XAdvance: -7.810547
|
||||
m_YAdvance: 0
|
||||
m_SecondAdjustmentRecord:
|
||||
m_GlyphIndex: 16
|
||||
m_GlyphValueRecord:
|
||||
m_XPlacement: 0
|
||||
m_YPlacement: 0
|
||||
m_XAdvance: 0
|
||||
m_YAdvance: 0
|
||||
m_FeatureLookupFlags: 0
|
||||
m_MarkToBaseAdjustmentRecords: []
|
||||
m_MarkToMarkAdjustmentRecords: []
|
||||
m_ShouldReimportFontFeatures: 0
|
||||
|
||||
@ -1746,7 +1746,7 @@ Rigidbody2D:
|
||||
m_Bits: 0
|
||||
m_Interpolate: 0
|
||||
m_SleepingMode: 1
|
||||
m_CollisionDetection: 0
|
||||
m_CollisionDetection: 1
|
||||
m_Constraints: 4
|
||||
--- !u!60 &7301258432688010073
|
||||
PolygonCollider2D:
|
||||
@ -1826,7 +1826,7 @@ MonoBehaviour:
|
||||
jumpVelocity: 34
|
||||
jumpCut: 2
|
||||
groundCheck: {fileID: 6890311646685666740}
|
||||
groundCheckRadius: 0.15
|
||||
groundCheckRadius: 0.2
|
||||
groundMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 64
|
||||
|
||||
@ -27,6 +27,7 @@ namespace RR.Game2D.Entities.Platforms
|
||||
private Vector3 _endPosition;
|
||||
private List<Transform> _platformChildren;
|
||||
private readonly List<Transform> _hiddenChildren = new ();
|
||||
private Rigidbody2D _attachedPlayerRb;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
@ -49,15 +50,45 @@ namespace RR.Game2D.Entities.Platforms
|
||||
}
|
||||
}
|
||||
|
||||
private void FixedUpdate()
|
||||
{
|
||||
// Если игрок прикреплён к платформе, корректируем его velocity
|
||||
if (!_attachedPlayerRb) return;
|
||||
// Конвертируем мировую скорость игрока в локальную относительно платформы
|
||||
Vector2 worldVelocity = _attachedPlayerRb.linearVelocity;
|
||||
Vector2 localVelocity = transform.InverseTransformDirection(worldVelocity);
|
||||
|
||||
// Устанавливаем обратно, чтобы избежать конфликта с движением платформы
|
||||
_attachedPlayerRb.linearVelocity = transform.TransformDirection(localVelocity);
|
||||
}
|
||||
|
||||
private void OnCollisionEnter2D(Collision2D other)
|
||||
{
|
||||
if (!attachPlayer) return;
|
||||
if (!other.gameObject.CompareTag("Player")) return;
|
||||
|
||||
// Проверяем, что игрок стоит на верхней части платформы
|
||||
if (IsPlayerOnTop(other))
|
||||
if (!IsPlayerOnTop(other)) return;
|
||||
other.transform.SetParent(transform);
|
||||
_attachedPlayerRb = other.rigidbody;
|
||||
}
|
||||
|
||||
private void OnCollisionStay2D(Collision2D other)
|
||||
{
|
||||
if (!attachPlayer) return;
|
||||
if (!other.gameObject.CompareTag("Player")) return;
|
||||
|
||||
// Если игрок уже прикреплён, но больше не на верхней части - отсоединяем
|
||||
if (other.transform.parent == transform && !IsPlayerOnTop(other))
|
||||
{
|
||||
other.transform.SetParent(null);
|
||||
_attachedPlayerRb = null;
|
||||
}
|
||||
// Если игрок не прикреплён, но теперь на верхней части - прикрепляем
|
||||
else if (other.transform.parent != transform && IsPlayerOnTop(other))
|
||||
{
|
||||
other.transform.SetParent(transform);
|
||||
_attachedPlayerRb = other.rigidbody;
|
||||
}
|
||||
}
|
||||
|
||||
@ -65,11 +96,10 @@ namespace RR.Game2D.Entities.Platforms
|
||||
{
|
||||
if (!attachPlayer) return;
|
||||
if (!other.gameObject.CompareTag("Player")) return;
|
||||
|
||||
if (other.transform.parent == transform)
|
||||
{
|
||||
other.transform.SetParent(null);
|
||||
}
|
||||
|
||||
if (other.transform.parent != transform) return;
|
||||
other.transform.SetParent(null);
|
||||
_attachedPlayerRb = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@ -19,6 +19,7 @@ namespace RR.Game2D.Entities.Platforms
|
||||
|
||||
private Vector3 _startPosition;
|
||||
private Vector3 _endPosition;
|
||||
private Rigidbody2D _attachedPlayerRb;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
@ -38,6 +39,15 @@ namespace RR.Game2D.Entities.Platforms
|
||||
{
|
||||
float pingPong = Mathf.PingPong(Time.time * moveSpeed, 1f);
|
||||
transform.position = Vector3.Lerp(_startPosition, _endPosition, pingPong);
|
||||
|
||||
// Если игрок прикреплён к платформе, корректируем его velocity
|
||||
if (!_attachedPlayerRb) return;
|
||||
// Конвертируем мировую скорость игрока в локальную относительно платформы
|
||||
Vector2 worldVelocity = _attachedPlayerRb.linearVelocity;
|
||||
Vector2 localVelocity = transform.InverseTransformDirection(worldVelocity);
|
||||
|
||||
// Устанавливаем обратно, чтобы избежать конфликта с движением платформы
|
||||
_attachedPlayerRb.linearVelocity = transform.TransformDirection(localVelocity);
|
||||
}
|
||||
|
||||
private void OnCollisionEnter2D(Collision2D other)
|
||||
@ -46,38 +56,38 @@ namespace RR.Game2D.Entities.Platforms
|
||||
if (!other.gameObject.CompareTag("Player")) return;
|
||||
|
||||
// Проверяем, что игрок стоит на верхней части платформы
|
||||
if (IsPlayerOnTop(other))
|
||||
{
|
||||
other.transform.SetParent(transform);
|
||||
}
|
||||
if (!IsPlayerOnTop(other)) return;
|
||||
other.transform.SetParent(transform);
|
||||
_attachedPlayerRb = other.rigidbody;
|
||||
}
|
||||
|
||||
// private void OnCollisionStay2D(Collision2D other)
|
||||
// {
|
||||
// if (!attachPlayer) return;
|
||||
// if (!other.gameObject.CompareTag("Player")) return;
|
||||
//
|
||||
// // Если игрок уже прикреплён, но больше не на верхней части - отсоединяем
|
||||
// if (other.transform.parent == transform && !IsPlayerOnTop(other))
|
||||
// {
|
||||
// other.transform.SetParent(null);
|
||||
// }
|
||||
// // Если игрок не прикреплён, но теперь на верхней части - прикрепляем
|
||||
// else if (other.transform.parent != transform && IsPlayerOnTop(other))
|
||||
// {
|
||||
// other.transform.SetParent(transform);
|
||||
// }
|
||||
// }
|
||||
private void OnCollisionStay2D(Collision2D other)
|
||||
{
|
||||
if (!attachPlayer) return;
|
||||
if (!other.gameObject.CompareTag("Player")) return;
|
||||
|
||||
// Если игрок уже прикреплён, но больше не на верхней части - отсоединяем
|
||||
if (other.transform.parent == transform && !IsPlayerOnTop(other))
|
||||
{
|
||||
other.transform.SetParent(null);
|
||||
_attachedPlayerRb = null;
|
||||
}
|
||||
// Если игрок не прикреплён, но теперь на верхней части - прикрепляем
|
||||
else if (other.transform.parent != transform && IsPlayerOnTop(other))
|
||||
{
|
||||
other.transform.SetParent(transform);
|
||||
_attachedPlayerRb = other.rigidbody;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnCollisionExit2D(Collision2D other)
|
||||
{
|
||||
if (!attachPlayer) return;
|
||||
if (!other.gameObject.CompareTag("Player")) return;
|
||||
|
||||
if (other.transform.parent == transform)
|
||||
{
|
||||
other.transform.SetParent(null);
|
||||
}
|
||||
|
||||
if (other.transform.parent != transform) return;
|
||||
other.transform.SetParent(null);
|
||||
_attachedPlayerRb = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
using System.Collections;
|
||||
using System.Collections;
|
||||
using System.Linq;
|
||||
using RR.Game2D.Core;
|
||||
using UnityEngine;
|
||||
@ -17,6 +17,19 @@ namespace RR.Game2D.Entities.Platforms
|
||||
[Tooltip("Минимальный угол нормали контакта к вертикали для прикрепления (0.7 ≈ 45°)")]
|
||||
[SerializeField, Range(0f, 1f)] private float normalThreshold = 0.7f;
|
||||
|
||||
private Rigidbody2D _attachedPlayerRb;
|
||||
|
||||
private void FixedUpdate()
|
||||
{
|
||||
// Если игрок прикреплён к платформе, корректируем его velocity
|
||||
if (!_attachedPlayerRb) return;
|
||||
// Конвертируем мировую скорость игрока в локальную относительно платформы
|
||||
Vector2 worldVelocity = _attachedPlayerRb.linearVelocity;
|
||||
Vector2 localVelocity = transform.InverseTransformDirection(worldVelocity);
|
||||
|
||||
// Устанавливаем обратно, чтобы избежать конфликта с движением платформы
|
||||
_attachedPlayerRb.linearVelocity = transform.TransformDirection(localVelocity);
|
||||
}
|
||||
|
||||
private void OnCollisionEnter2D(Collision2D other)
|
||||
{
|
||||
@ -26,6 +39,7 @@ namespace RR.Game2D.Entities.Platforms
|
||||
if (attachPlayer && IsPlayerOnTop(other))
|
||||
{
|
||||
other.transform.SetParent(transform);
|
||||
_attachedPlayerRb = other.rigidbody;
|
||||
}
|
||||
|
||||
Vector3 shiftVector = shiftDirection switch
|
||||
@ -41,22 +55,24 @@ namespace RR.Game2D.Entities.Platforms
|
||||
StartCoroutine(ShiftPlatform(shiftVector));
|
||||
}
|
||||
|
||||
// private void OnCollisionStay2D(Collision2D other)
|
||||
// {
|
||||
// if (!attachPlayer) return;
|
||||
// if (!other.gameObject.CompareTag("Player")) return;
|
||||
//
|
||||
// // Если игрок уже прикреплён, но больше не на верхней части - отсоединяем
|
||||
// if (other.transform.parent == transform && !IsPlayerOnTop(other))
|
||||
// {
|
||||
// other.transform.SetParent(null);
|
||||
// }
|
||||
// // Если игрок не прикреплён, но теперь на верхней части - прикрепляем
|
||||
// else if (other.transform.parent != transform && IsPlayerOnTop(other))
|
||||
// {
|
||||
// other.transform.SetParent(transform);
|
||||
// }
|
||||
// }
|
||||
private void OnCollisionStay2D(Collision2D other)
|
||||
{
|
||||
if (!attachPlayer) return;
|
||||
if (!other.gameObject.CompareTag("Player")) return;
|
||||
|
||||
// Если игрок уже прикреплён, но больше не на верхней части - отсоединяем
|
||||
if (other.transform.parent == transform && !IsPlayerOnTop(other))
|
||||
{
|
||||
other.transform.SetParent(null);
|
||||
_attachedPlayerRb = null;
|
||||
}
|
||||
// Если игрок не прикреплён, но теперь на верхней части - прикрепляем
|
||||
else if (other.transform.parent != transform && IsPlayerOnTop(other))
|
||||
{
|
||||
other.transform.SetParent(transform);
|
||||
_attachedPlayerRb = other.rigidbody;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnCollisionExit2D(Collision2D other)
|
||||
{
|
||||
@ -65,6 +81,7 @@ namespace RR.Game2D.Entities.Platforms
|
||||
if (attachPlayer && other.transform.parent == transform)
|
||||
{
|
||||
other.transform.SetParent(null);
|
||||
_attachedPlayerRb = null;
|
||||
}
|
||||
|
||||
Vector3 shiftVector = shiftDirection switch
|
||||
|
||||
@ -21,6 +21,7 @@ namespace RR.Game2D.Entities.Platforms
|
||||
private int _currentTargetIndex;
|
||||
private float _delayTimer;
|
||||
private bool _isWaiting;
|
||||
private Rigidbody2D _attachedPlayerRb;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
@ -63,23 +64,38 @@ namespace RR.Game2D.Entities.Platforms
|
||||
_currentTargetIndex = (_currentTargetIndex + 1) % coordinates.Length;
|
||||
|
||||
// Если вернулись в начальную точку (индекс 0), активируем задержку
|
||||
if (_currentTargetIndex != 0 || !(startDelay > 0f)) return;
|
||||
if (_currentTargetIndex == 0 && startDelay > 0f)
|
||||
{
|
||||
_isWaiting = true;
|
||||
_delayTimer = startDelay;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_currentTargetIndex++;
|
||||
if (_currentTargetIndex < coordinates.Length) return;
|
||||
|
||||
// Возвращаемся в начальную точку
|
||||
transform.position = coordinates[0];
|
||||
_currentTargetIndex = 0;
|
||||
|
||||
// Активируем задержку перед следующим циклом
|
||||
if (!(startDelay > 0f)) return;
|
||||
if (_currentTargetIndex >= coordinates.Length)
|
||||
{
|
||||
// Возвращаемся в начальную точку
|
||||
transform.position = coordinates[0];
|
||||
_currentTargetIndex = 0;
|
||||
|
||||
// Активируем задержку перед следующим циклом
|
||||
if (startDelay > 0f)
|
||||
{
|
||||
_isWaiting = true;
|
||||
_delayTimer = startDelay;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_isWaiting = true;
|
||||
_delayTimer = startDelay;
|
||||
|
||||
// Если игрок прикреплён к платформе, корректируем его velocity
|
||||
if (!_attachedPlayerRb) return;
|
||||
// Конвертируем мировую скорость игрока в локальную относительно платформы
|
||||
Vector2 worldVelocity = _attachedPlayerRb.linearVelocity;
|
||||
Vector2 localVelocity = transform.InverseTransformDirection(worldVelocity);
|
||||
|
||||
// Устанавливаем обратно, чтобы избежать конфликта с движением платформы
|
||||
_attachedPlayerRb.linearVelocity = transform.TransformDirection(localVelocity);
|
||||
}
|
||||
|
||||
private void OnCollisionEnter2D(Collision2D other)
|
||||
@ -88,38 +104,38 @@ namespace RR.Game2D.Entities.Platforms
|
||||
if (!other.gameObject.CompareTag("Player")) return;
|
||||
|
||||
// Проверяем, что игрок стоит на верхней части платформы
|
||||
if (IsPlayerOnTop(other))
|
||||
{
|
||||
other.transform.SetParent(transform);
|
||||
}
|
||||
if (!IsPlayerOnTop(other)) return;
|
||||
other.transform.SetParent(transform);
|
||||
_attachedPlayerRb = other.rigidbody;
|
||||
}
|
||||
|
||||
// private void OnCollisionStay2D(Collision2D other)
|
||||
// {
|
||||
// if (!attachPlayer) return;
|
||||
// if (!other.gameObject.CompareTag("Player")) return;
|
||||
//
|
||||
// // Если игрок уже прикреплён, но больше не на верхней части - отсоединяем
|
||||
// if (other.transform.parent == transform && !IsPlayerOnTop(other))
|
||||
// {
|
||||
// other.transform.SetParent(null);
|
||||
// }
|
||||
// // Если игрок не прикреплён, но теперь на верхней части - прикрепляем
|
||||
// else if (other.transform.parent != transform && IsPlayerOnTop(other))
|
||||
// {
|
||||
// other.transform.SetParent(transform);
|
||||
// }
|
||||
// }
|
||||
private void OnCollisionStay2D(Collision2D other)
|
||||
{
|
||||
if (!attachPlayer) return;
|
||||
if (!other.gameObject.CompareTag("Player")) return;
|
||||
|
||||
// Если игрок уже прикреплён, но больше не на верхней части - отсоединяем
|
||||
if (other.transform.parent == transform && !IsPlayerOnTop(other))
|
||||
{
|
||||
other.transform.SetParent(null);
|
||||
_attachedPlayerRb = null;
|
||||
}
|
||||
// Если игрок не прикреплён, но теперь на верхней части - прикрепляем
|
||||
else if (other.transform.parent != transform && IsPlayerOnTop(other))
|
||||
{
|
||||
other.transform.SetParent(transform);
|
||||
_attachedPlayerRb = other.rigidbody;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnCollisionExit2D(Collision2D other)
|
||||
{
|
||||
if (!attachPlayer) return;
|
||||
if (!other.gameObject.CompareTag("Player")) return;
|
||||
|
||||
if (other.transform.parent == transform)
|
||||
{
|
||||
other.transform.SetParent(null);
|
||||
}
|
||||
|
||||
if (other.transform.parent != transform) return;
|
||||
other.transform.SetParent(null);
|
||||
_attachedPlayerRb = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@ -9,7 +9,7 @@ namespace RR.Game2D.Entities.Platforms
|
||||
public class TriggeringPlatform : MonoBehaviour
|
||||
{
|
||||
[Header("Настройки движения платформы")]
|
||||
[SerializeField] private float moveSpeed = 3f;
|
||||
[SerializeField] [Min(0.01f)] private float moveSpeed = 3f;
|
||||
[SerializeField] private float pathLength = 5f;
|
||||
[SerializeField] private Direction2D moveDirection = Direction2D.Right;
|
||||
|
||||
@ -20,6 +20,7 @@ namespace RR.Game2D.Entities.Platforms
|
||||
|
||||
private Vector3 _startPosition;
|
||||
private Vector3 _endPosition;
|
||||
private Rigidbody2D _attachedPlayerRb;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
@ -41,38 +42,51 @@ namespace RR.Game2D.Entities.Platforms
|
||||
if (!other.gameObject.CompareTag("Player")) return;
|
||||
|
||||
// Проверяем, что игрок стоит на верхней части платформы
|
||||
if (IsPlayerOnTop(other))
|
||||
{
|
||||
other.transform.SetParent(transform);
|
||||
}
|
||||
if (!IsPlayerOnTop(other)) return;
|
||||
other.transform.SetParent(transform);
|
||||
_attachedPlayerRb = other.rigidbody;
|
||||
}
|
||||
|
||||
// private void OnCollisionStay2D(Collision2D other)
|
||||
// {
|
||||
// if (!attachPlayer) return;
|
||||
// if (!other.gameObject.CompareTag("Player")) return;
|
||||
//
|
||||
// // Если игрок уже прикреплён, но больше не на верхней части - отсоединяем
|
||||
// if (other.transform.parent == transform && !IsPlayerOnTop(other))
|
||||
// {
|
||||
// other.transform.SetParent(null);
|
||||
// }
|
||||
// // Если игрок не прикреплён, но теперь на верхней части - прикрепляем
|
||||
// else if (other.transform.parent != transform && IsPlayerOnTop(other))
|
||||
// {
|
||||
// other.transform.SetParent(transform);
|
||||
// }
|
||||
// }
|
||||
private void OnCollisionStay2D(Collision2D other)
|
||||
{
|
||||
if (!attachPlayer) return;
|
||||
if (!other.gameObject.CompareTag("Player")) return;
|
||||
|
||||
// Если игрок уже прикреплён, но больше не на верхней части - отсоединяем
|
||||
if (other.transform.parent == transform && !IsPlayerOnTop(other))
|
||||
{
|
||||
other.transform.SetParent(null);
|
||||
_attachedPlayerRb = null;
|
||||
}
|
||||
// Если игрок не прикреплён, но теперь на верхней части - прикрепляем
|
||||
else if (other.transform.parent != transform && IsPlayerOnTop(other))
|
||||
{
|
||||
other.transform.SetParent(transform);
|
||||
_attachedPlayerRb = other.rigidbody;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnCollisionExit2D(Collision2D other)
|
||||
{
|
||||
if (!attachPlayer) return;
|
||||
if (!other.gameObject.CompareTag("Player")) return;
|
||||
|
||||
if (other.transform.parent == transform)
|
||||
{
|
||||
other.transform.SetParent(null);
|
||||
}
|
||||
|
||||
if (other.transform.parent != transform) return;
|
||||
other.transform.SetParent(null);
|
||||
_attachedPlayerRb = null;
|
||||
}
|
||||
|
||||
private void FixedUpdate()
|
||||
{
|
||||
// Если игрок прикреплён к платформе и прыгает (velocity.y > 0),
|
||||
// сохраняем его velocity в локальном пространстве
|
||||
if (!_attachedPlayerRb) return;
|
||||
// Конвертируем мировую скорость игрока в локальную относительно платформы
|
||||
Vector2 worldVelocity = _attachedPlayerRb.linearVelocity;
|
||||
Vector2 localVelocity = transform.InverseTransformDirection(worldVelocity);
|
||||
|
||||
// Устанавливаем обратно, чтобы избежать конфликта с движением платформы
|
||||
_attachedPlayerRb.linearVelocity = transform.TransformDirection(localVelocity);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: da2f28369774eb142a79234b4bd930f7
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 40c4641c39eceef46801d47be81e929b
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e4d1644189612aa4990d5054a32ac6f9
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 71a5ee75df7a19e42a5b3572e3f69903
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fa0cc7aabc3ce124e9fefec4607c9d6b
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 197e84e6a46952c42887e2bb0731f244
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
200452
Assets/_Recovery/0 (7).unity
200452
Assets/_Recovery/0 (7).unity
File diff suppressed because it is too large
Load Diff
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8f7875b4be4235949939aacb210b9d88
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
186173
Assets/_Recovery/0.unity
186173
Assets/_Recovery/0.unity
File diff suppressed because one or more lines are too long
@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ce3c782f9dfca7c40abaac8019965f0a
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Loading…
x
Reference in New Issue
Block a user