113 lines
No EOL
3.2 KiB
C#
Executable file
113 lines
No EOL
3.2 KiB
C#
Executable file
/* КОД СТАРЫЙ
|
|
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; }
|
|
} |