PJ/Assets/scripts/OWUse.cs

113 lines
3.2 KiB
C#
Raw Permalink Normal View History

/* КОД СТАРЫЙ
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class OWUse : MonoBehaviour
{
GameObject Player;
public int Distance;
Button use;
public Button.ButtonClickedEvent Event;
private MOW mOW;
bool b = true;
public bool Show = true;
// Start is called before the first frame update
void Start()
{
Player = GameObject.Find("Player");
use = GameObject.Find("use").GetComponent<Button>();
mOW = GameObject.Find("Player").GetComponent<MOW>();
}
// Update is called once per frame
void FixedUpdate()
{
if(Vector2.Distance(Player.transform.position, this.gameObject.transform.position) < Distance && Show)
{
use.gameObject.SetActive(true);
use.onClick = Event;
b=true;
}
else if (b)
{
use.gameObject.SetActive(false);
use.onClick = null;
b = false;
}
}
public void SM()
{
mOW.AllowMove = false;
}
public void CM()
{
mOW.AllowMove = true;
}
}*/
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Events;
public partial class OWUse : MonoBehaviour
{
[SerializeField] private GameObject player;
[SerializeField] private Button useButton;
[SerializeField] private MOW mOW;
public int Distance = 3;
// Используем обычный UnityEvent, это удобнее для инспектора
public UnityEvent interactionEvent;
private bool isButtonActive = false;
public bool canShow = true;
void Start()
{
if (useButton != null)
{
// Добавляем слушатель один раз при старте
useButton.onClick.AddListener(OnButtonClick);
useButton.gameObject.SetActive(false);
}
}
void Update() // Для проверки дистанции лучше использовать Update
{
if (player == null) return;
float dist = Vector2.Distance(player.transform.position, transform.position);
bool inRange = dist < Distance && canShow;
if (inRange && !isButtonActive)
{
SetButtonState(true);
}
else if (!inRange && isButtonActive)
{
SetButtonState(false);
}
}
private void SetButtonState(bool state)
{
isButtonActive = state;
if (useButton != null) useButton.gameObject.SetActive(state);
}
// Этот метод вызывается при физическом нажатии на кнопку UI
private void OnButtonClick()
{
if (isButtonActive)
{
// Вызываем все функции, которые вы привязали в инспекторе
interactionEvent?.Invoke();
}
}
public void DisableMovement() { if (mOW != null) mOW.AllowMove = false; }
public void EnableMovement() { if (mOW != null) mOW.AllowMove = true; }
}