@Ezekiel4
Охотник на пиратов и сборщик монолитов

Как использовать к приватные поля структуры?

Задача такая - создать скрипт, который может запускать указанные события через указанное время. Моя реализация:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;

public class TimedTriggers : MonoBehaviour {

	[Serializable]
	public struct TimedEvent {
		public float delay;
		public bool looping;
		public UnityEvent onEvent;
		private float timer;
		private bool readyToPlay;
	}

	[Min(0.01f)][SerializeField] private float m_timeStep = 0.1f;
	[SerializeField] private List<TimedEvent> m_events = new List<TimedEvent>();

	private void Awake() => StartCoroutine(TimeRoutine());

	private IEnumerator TimeRoutine() {
		while (true) {
			if (m_events.Count > 0)
				foreach (TimedEvent e in m_events)
					Tick(e);
			yield return new WaitForSeconds(m_timeStep);
		}
	}

	private void Tick(TimedEvent timedEvent) {
		if (timedEvent.timer < timedEvent.delay)
			timedEvent.timer += m_timeStep;
		else {
			if (timedEvent.looping && !timedEvent.readyToPlay)
				timedEvent.readyToPlay = true;
			
			if (timedEvent.readyToPlay) {
				timedEvent.readyToPlay = false;
				timedEvent.timer = 0f;
				timedEvent.onEvent.Invoke();
			}
		}		
	}
}


Проблема в том, что консоль ругается на наличие не публичных полей в структуре:
628ebe3baa676119664724.png
Можно забить и сделать все поля public, но перед этим хотелось бы узнать, есть ли нормальное решение этой проблемы?
  • Вопрос задан
  • 116 просмотров
Решения вопроса 1
yarosroman
@yarosroman Куратор тега C#
C# the best
Реализовать на классе интерфейс ISerializable.
https://docs.microsoft.com/ru-ru/dotnet/api/system...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы