Size: a a a

Unity Floodилка

2021 May 20

M

Marat in Unity Floodилка
Ну на пальцах же понимаешь, значит и в коде поймешь
источник

SE

Stanislav Entaltsev in Unity Floodилка
Хорошо. Давай по порядку
источник

M

Marat in Unity Floodилка
По сути ты можешь писать без всего этого. Просто кода больше будет и времени займет боллше
источник

SE

Stanislav Entaltsev in Unity Floodилка
В аргументах этого метода - данные для конкретного класса, использующий интерфейс. Скажем, abstract class InteractData.
class ObjectTrigger : Monobehavior, IOpenable
{
 public void interact(class ClassName)
 {
   
 }
}

Верно?
источник

M

Marat in Unity Floodилка
Интерфейс стоит назвать IInteractable
источник

SE

Stanislav Entaltsev in Unity Floodилка
Вот тут я уже запутался: От этого класса наследуешь под каждый тип триггера данные. В абстрактном классе можешь оставить enum InteractType, тип взаимодействия.
источник

T_

Trell _ in Unity Floodилка
Нах
источник

T_

Trell _ in Unity Floodилка
?
источник

SE

Stanislav Entaltsev in Unity Floodилка
Пытаюсь понять, что он мне предлагает)
источник

T_

Trell _ in Unity Floodилка
То что и я предлагал
источник

T_

Trell _ in Unity Floodилка
Ток через интерфейсы
источник

T_

Trell _ in Unity Floodилка
Нах enum*
источник

M

Marat in Unity Floodилка
Ну, чтобы определить, например, в списке объектов какой объект надо задействоватт
источник

T_

Trell _ in Unity Floodилка
Проще сделать поиск по нужнему типу
источник

M

Marat in Unity Floodилка
Можно и к типу привязать
источник

T_

Trell _ in Unity Floodилка
Тип не вижу смысл делать енум, если инфа в типе хранится
источник

M

Marat in Unity Floodилка
public class Hero : MonoBehaviour
{
 private void OnTriggerEnter(Collider other)
 {
   var iterObject = other.GetComponent<IInteractable>();
   if (iterObject != null)
     iterObject.Interact(new InteractData() { LogMessage = "I INTERACTED" });

 }
}

public enum InteractResult { Failed, Ok }
public interface IInteractable
{
 InteractResult Interact(InteractData data);
}

public class InteractData
{
 public string LogMessage { get; set; }
 //общие данные для всех интерактивных объектов
}

public class Door : IInteractable
{
 public InteractResult Interact(InteractData data)
 {
   var doorInteractData = data as DoorInteractData;
   if (doorInteractData.OpenSpeed <= 0)
     return InteractResult.Failed;
   Debug.Log(data.LogMessage, this);
   Open(doorInteractData.OpenSpeed);
   return InteractResult.Ok;
 }

 private void Open(float speed)
 {
 }

 public class DoorInteractData : InteractData
 {
   public float OpenSpeed { get; set; }
 }
}
источник

M

Marat in Unity Floodилка
типо такого
источник

SE

Stanislav Entaltsev in Unity Floodилка
Спасибо, изучу
источник

SE

Stanislav Entaltsev in Unity Floodилка
А тут что IInteractable интерфейс компонент?
источник