Comments (2)
That looks acceptable to me, thanks! It appears you've done this before - It would be great to provide an extension repo with various Unity structures support too. Would be happy to contribute to that when we look into migrating to MemoryPack.
from memorypack.
struct that includes no reference types(for example Vector3
, Keyframe
, Rect
, Bound
, etc) can serialize in default.
For other types, a custom wrapper must be created.
For example, AnimationCurve would look like this.
// Keyframe: (float time, float inTangent, float outTangent, int tangentMode, int wightedMode, float inWeight, float outWeight)
[MemoryPackable]
public readonly partial struct SerializableAnimationCurve
{
[MemoryPackIgnore]
public readonly AnimationCurve AnimationCurve;
[MemoryPackInclude]
WrapMode preWrapMode => AnimationCurve.preWrapMode;
[MemoryPackInclude]
WrapMode postWrapMode => AnimationCurve.postWrapMode;
[MemoryPackInclude]
Keyframe[] keys => AnimationCurve.keys;
[MemoryPackConstructor]
SerializableAnimationCurve(WrapMode preWrapMode, WrapMode postWrapMode, Keyframe[] keys)
{
var curve = new AnimationCurve(keys);
curve.preWrapMode = preWrapMode;
curve.postWrapMode = postWrapMode;
this.AnimationCurve = curve;
}
public SerializableAnimationCurve(AnimationCurve animationCurve)
{
this.AnimationCurve = animationCurve;
}
}
As it is, I have to wrap it every time, which is inconvenient.
Let's create a custom formatter.
public class AnimationCurveFormatter : MemoryPackFormatter<AnimationCurve>
{
public override void Serialize(ref MemoryPackWriter writer, ref AnimationCurve value)
{
writer.WritePackable(new SerializableAnimationCurve(value));
}
public override void Deserialize(ref MemoryPackReader reader, ref AnimationCurve value)
{
var wrapped = reader.ReadPackable<SerializableAnimationCurve>();
value = wrapped.AnimationCurve;
}
}
and register in startup.
MemoryPackFormatterProvider.Register<AnimationCurve>(new AnimationCurveFormatter());
from memorypack.
Related Issues (20)
- Unity 2021.3.31f - Unit Test Failing - Class Defined in Editor Assembly is not registered in this provider HOT 2
- Serialization results differ between Unity and .Net with using LayoutKind.Auto HOT 1
- Unity 2022.3.7f1 and .NET 7 DateTimeOffset serialize value incorrect HOT 6
- Problem with using memorypack on a external dll library, problem with polymorphism on c# 8.0 HOT 2
- Nesting / How to deal with trimming issues HOT 1
- If the length of the serialized byte array exceeds 65536, it won't be correctly deserialized. HOT 1
- Specific KeyValuePair Unity 2021.3.27f1 and Net7 have different Deserialize results. HOT 1
- [Unity] Unnecessary GC pressure? HOT 1
- MemoryPack.MemoryPackSerializationException : <class> is not registered in this provider HOT 6
- char[] array cannot be serialized or deserialized. HOT 1
- How Serialize to Span<byte>? HOT 1
- CS9192 Argument 1 should be passed with 'ref' or 'in' keyword - In generated code for struct HOT 6
- Example how to Serialize to string then from string orginal data HOT 2
- MemoryPack.MemoryPackSerializationException : Sequence reached end, reader can not provide more buffer. HOT 2
- Confusing wording in the README.md HOT 2
- Generics issue.
- When will memorypack support .net8?
- How to get written count when use BrotliCompressor? HOT 2
- .Net 8 NativeAOT Crash when serialize any type contains generic property. HOT 1
- BrotliDecompressor take too many CPU HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from memorypack.