Некоторым подписчикам не звонят при запуске событияC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Некоторым подписчикам не звонят при запуске события

Сообщение Anonymous »

Я пытаюсь воспроизвести знаменитую карточную игру в Unity, используя C#, просто как вызов самому себе. Сегодня я писал скрипт Sacrificeable, который добавляется почти к каждой карте в игре. Существует еще один скрипт DetectClicks, который запускает события различных действий мыши (щелчок, ввод, выход, отпускание). Указанный сценарий работал отлично до сегодняшнего дня. Когда я создавал сценарий Sacrificeable, который подписывает функцию Opposer на Click, эта функция просто не вызывалась. Проведя небольшое тестирование, я понял, что единственной вызываемой функцией была печать, используемая для проверки того, было ли событие вызвано вообще.
Мой вопрос: почему это происходит? и почему он не сломался раньше? есть ли способ решить эту проблему и вызвать все функции?
Вот код Sacrificeable:

Код: Выделить всё

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(DetectClicks))]
public class Sacrificeable : MonoBehaviour
{
public CardPlay reference;
[SerializeField] bool sacrifice;
private bool _sacrifice;
public bool Sacrifice
{
get => _sacrifice;
set
{
sacrifice = _sacrifice;
if (value == _sacrifice)
return;
sacrifice = _sacrifice = value;
alternator?.Invoke();
}
}
private DetectClicks detector;
private void Start()
{
TryGetComponent(out CardPlay card);
reference = reference ? reference : card;
alternator = Selected_;
detector = GetComponent();
reference.OnPlay += Enable;
}
private Action alternator;
private void Selected_()
{
Selected?.Invoke();
alternator = Unselected_;
}
private void Unselected_()
{
Unselected?.Invoke();
alternator = Selected_;
}
public event Action Selected;
public event Action Unselected;
public void Enable()
{
print("Enabled");
detector.Click -= Opposer;
detector.Click += Opposer;
}
private void Opposer()
{
Sacrifice = !Sacrifice;
}
private void OnValidate()
{
Sacrifice = sacrifice;
}
}
А вот и DetectClicks:

Код: Выделить всё

using System;
using UnityEngine;

[RequireComponent(typeof(Collider2D))]
public class DetectClicks : MonoBehaviour
{
public event Action Click;
public event Action Release;
public event Action Enter;
public event Action Exit;

public Collider[] Colliders => gameObject.GetComponents();
private void Awake()
{
Click += () => print("Truly invoked");
}
public void OnMouseDown()
{
Click();
Debug.Log("Detected");
}
public void OnMouseUp() => Release?.Invoke();
public void OnMouseEnter() => Enter?.Invoke();
public void OnMouseExit() => Exit?.Invoke();
}
Любая информация и советы принимаются!

Подробнее здесь: https://stackoverflow.com/questions/790 ... ring-event
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»