danilaxxl danilaxxl

CollectableItemData.cs

[CreateMenuItem(fileName = "newItem", menuName = "Data/Items/Collectable", order = 51]

GoloGames GoloGames

vadya_ivan, рад, что вам игра показалась интересной : )

P.S. Кстати уже доступна бесплатная демо-версия в Steam

vadya_ivan vadya_ivan

Визуал, задумка, музыка , механики, все в цель

GoloGames GoloGames

Ato_Ome, спасибо за позитивные эмоции, будем стараться : )

Ato_Ome Ato_Ome

Потрясающий результат, все так четенько, плавненько)
То ли саунд, то ли плавность напомнили мне игрушку World of Goo, удачи вам в разработке и сил побольше дойти до релиза!)

Cute Fox Cute Fox

Graphics are a little cool, good HD content. But this game doesn't cause nary interest me.
However the game is well done.

GMSD3D GMSD3D

Почему действие после всех условий выполняется?
[step another object]

Zemlaynin Zemlaynin

Jusper, Везде, но наугад строить смысла нет. Нужно разведать сперва территорию на наличие ресурсов.

Jusper Jusper

Zemlaynin, а карьеры можно будет везде запихать?
Или под них "особые" зоны будут?

Zemlaynin Zemlaynin

Это так скажем тестовое строительство, а так да у города будет зона влияния которую нужно будет расширять.

Jusper Jusper

А ссылка есть?

Jusper Jusper

Я не оч понял из скриншота, как вообще работает стройка. У игрока будет как бы поле строительства?

split97 split97

в игру нужно добавить время песочные часы в инвентаре, пока бегаешь наберается усталость и ты очень тормозной мобильный враг просто убевает

split97 split97

в игру нужно добавить время песочные часы в инвентаре, пока бегаешь наберается усталость и ты очень тормозной мобильный враг просто убевает

ViktorJaguar ViktorJaguar

Почему я нигде не могу найти нормальный туториал, где покажут как экипировать предмет (например, меч) в определенную (выделенную под оружие) ячейку???

Логотип проекта Unity

Сериализация функтора

Собственно закончил с первой версией сериализации функтора. Выкладываю в открытый доступ.
В целом версия рабочая, но работоспособность таких вещей как например локальные переменные не проверял - вполне вероятно там придется дорабатывать.

Все сериализаторы скопилированы в библиотеку. Помимо сериализации функтора так же доступна сериализация и некоторых других сущностей.

Сериализация реализована через наследие от ScriptableObject
Это значит, что сборка мусора на этих объектах не работает, их нужно удалять вручную командой Object.DestroyImmediate()

Список всех основных сериализаторов данной библиотеки:

Сериализуется через класс SerializeConstructorInfo.
Для создания юзается метод класса Serialize:

SerializeConstructorInfo CreateConstructorInfo(ConstructorInfo value)

Сериализуется через класс SerializeMethodInfo.
Для создания юзается метод класса Serialize:

SerializeMethodInfo CreateMethodInfo(MethodInfovalue)

Сериализуется через класс SerializeFieldInfo.
Для создания юзается метод класса Serialize:

SerializeFieldInfo CreateFieldInfo(FieldInfo value)

Сериализуется через класс SerializeMemberInfo.
Для создания юзается метод класса Serialize:

SerializeConstructorInfo CreateMemberInfo(MemberInfo value)

Сериализуется через класс SerializeMemberAssignment.
Для создания юзается метод класса Serialize:

SerializeMemberAssignment CreateMember_Assignment(MemberAssignment value)

Сериализуется через класс SerializeMemberListBinding.
Для создания юзается метод класса Serialize:

SerializeMemberListBinding CreateMember_ListBinding(MemberListBinding value)

Сериализуется через класс SerializeMemberMemberBinding.
Для создания юзается метод класса Serialize:

SerializeMemberMemberBinding CreateMember_MemberBinding(MemberMemberBinding value)

Сериализуется через класс SerializeMemberBinding.
Для создания юзается метод класса Serialize:

SerializeMemberBinding CreateMemberBinding(MemberBinding value)

Сериализуется через класс SerializeElementInit.
Для создания юзается метод класса Serialize:

SerializeElementInit CreateElementInit(ElementInit value)

Сериализуется через класс SerializeType.
Для создания юзается метод класса Serialize:

SerializeType CreateType(Type value)

Сериализуется через класс SerializeEnum.
Для создания юзается метод класса Serialize:

SerializeEnum CreateEnum(Enum value)

Сериализуется через класс SerializeValue.
Для создания юзается метод класса Serialize:

SerializeValue CreateValue(object value)

Сериализуется через класс SerializeExpression.
Для создания юзается метод класса Serialize:

SerializeExpression CreateExpression(Expression value)

Дополнительные сериализаторы, связанные с выражениями:
Все эти сериализаторы можно использовать через класс Serialize.Expressions
* SerializeExpressionBinary Binary(BinaryExpression value)
* SerializeExpressionMember Member(MemberExpression value)
* SerializeExpressionUnary Unary(UnaryExpression value)
* SerializeExpressionConditional Conditional(ConditionalExpression value)
* SerializeExpressionConstant Constant(ConstantExpression value)
* SerializeExpressionInvocation Invocation(InvocationExpression value)
* SerializeExpressionLambda Lambda(LambdaExpression value)
* SerializeExpressionListInit ListInit(ListInitExpression value)
* SerializeExpressionMemberInit MemberInit(MemberInitExpression value)
* SerializeExpressionMethodCall MethodCall(MethodCallExpression value)
* SerializeExpressionNew New(NewExpression value)
* SerializeExpressionNewArrayInit NewArrayInit(NewArrayExpression value)
* SerializeExpressionNewArrayBounds NewArrayBounds(NewArrayExpression value)
* SerializeExpressionParameter Parameter(ParameterExpression value)
* SerializeExpressionTypeIs TypeIs(TypeBinaryExpression value)

Пример применения

public ConstructorInfo exampleOfRealData; //Предполагается, что поле не пусто
public SerializeConstructorInfo data;
public void Method() 
{
	data = Serialize.CreateConstructorInfo(exampleOfRealData);
	//Теперь data.value всегда будет возвращать этот конструктор
}

С остальными классами аналогично.

С выражениями чуток иначе. Все выражения юзаются через класс Expression<>. Например.

public SerializeExpression expression;
public void Method() 
{
	Expession<Func<int>> tempExpression = () => 10;
	expression = Serialize.CreateExpression(tempExpression);
}

Не были добавлены блочные операторы, покуда класс Expression<> не умеет с ними работать. Потому писать сериализаторы под всякие try-catch{} и if {} я не стал - все равно компилятор такие вещи не пропускает.
Если найду способ это обойти офк добавлю и опишу как с этим работать

Смотрите также:


Комментарии



Я, конечно, лезу в то, в чем не разбираюсь, но разве в шарпе роль функторов не выполняют делегаты?

lentinant, лямбда/функторы это фактически и есть делегаты в их скомпилированном виде (насколько мне помнится разбор на IL). Иногда лямбду применять удобнее, чем делегат в чистом виде (например когда в метод нужно послать какое-то вычисление, вовсе не обязательно плодить метод, можно и вписать лямбду). А в нескомпилированном виде это простор для динамик-кода
Эльрат, фиг с этой главной. Мне лень, да и очередной срач мне не нужен. Буду тихонько делать свое дело.

Справка