Как влияет смена значений в инициализации при объявлении поля на следующий запуск PlayMode Unity?
Проблема такая, что когда меняю значение в инициализации при объявлении поля, то при следующем запуске PlayMode'а остаётся старое значение, меняю его ещё раз, оно меняется на предыдущее, а не текущее значение. Поле с модификатором private. Unity как-то кэширует это значение? Лучше присваивать значение в Awake, Start?
Вот пример кода:
using System;
using System.Collections;
using UnityEngine;
public class MouseEvent : MonoBehaviour
{
public event Action<Vector3> OnMousePositionReceived;
public event Action<Vector3> OnDragMousePositionReceived;
public event Action<Vector3> OnClickMousePositionReceived;
public event Action<RaycastHit> OnClickUpHitReceived;
public event Action OnClickUp;
public event Action OnDrag;
private float _clickStartTime;
private bool _isDragging;
private Coroutine _dragCoroutine;
private RaycastHit _hit;
private LayerMask _layerMaskInteractable;
private float _clickThreshhold = 0.25f;
private void Awake()
{
_layerMaskInteractable = LayerMask.GetMask(LayerMask.LayerToName(GameConstants.CONST_LAYER_INDEX_INTERACTABLE));
_isDragging = false;
}
private void Update()
{
ReceviengMousePosition(out _hit);
if (Input.GetMouseButtonDown(0))
{
_clickStartTime = Time.time;
OnClickMousePositionReceived?.Invoke(Input.mousePosition);
if (_isDragging == false)
{
_isDragging = true;
_dragCoroutine = StartCoroutine(BeginDrag());
}
}
if (Input.GetMouseButtonUp(0))
{
if (_isDragging)
{
_isDragging = false;
StopCoroutine(_dragCoroutine);
Debug.Log(_clickThreshhold);
if (Time.time - _clickStartTime < _clickThreshhold)
{
OnClickUp?.Invoke();
OnClickUpHitReceived?.Invoke(_hit);
}
}
}
}
private IEnumerator BeginDrag()
{
while (Input.GetMouseButton(0))
{
OnDrag?.Invoke();
OnDragMousePositionReceived?.Invoke(Input.mousePosition);
yield return null;
}
}
public void ReceviengMousePosition(out RaycastHit hit)
{
Vector3 mousePosition = Input.mousePosition;
mousePosition.z = Camera.main.nearClipPlane;
Ray ray = Camera.main.ScreenPointToRay(mousePosition);
if (Physics.Raycast(ray, out hit, 100))
{
OnMousePositionReceived?.Invoke(hit.point);
}
}
}