```
chore(bridge): 删除桥接包的提交记录和Git属性配置 删除了 .codely-bridge-commit 文件中存储的提交哈希值 移除了 .gitattributes 文件中的行结束符配置规则 ```
This commit is contained in:
1 parent
d26d323912
commit
13d0c80335
392 files changed
+1814
-1895
No files matched your search
-362
@@ -1,362 +0,0 @@
|
||||
using Codely.Newtonsoft.Json;
|
||||
using Codely.Newtonsoft.Json.Linq;
|
||||
using System;
|
||||
using UnityEngine;
|
||||
#if UNITY_EDITOR
|
||||
using UnityEditor; // Required for AssetDatabase and EditorUtility
|
||||
#endif
|
||||
|
||||
using UnityTcp.Editor.Helpers;
|
||||
namespace UnityTcp.Editor.Serialization
|
||||
{
|
||||
public class Vector3Converter : JsonConverter<Vector3>
|
||||
{
|
||||
public override void WriteJson(JsonWriter writer, Vector3 value, JsonSerializer serializer)
|
||||
{
|
||||
writer.WriteStartObject();
|
||||
writer.WritePropertyName("x");
|
||||
writer.WriteValue(value.x);
|
||||
writer.WritePropertyName("y");
|
||||
writer.WriteValue(value.y);
|
||||
writer.WritePropertyName("z");
|
||||
writer.WriteValue(value.z);
|
||||
writer.WriteEndObject();
|
||||
}
|
||||
|
||||
public override Vector3 ReadJson(JsonReader reader, Type objectType, Vector3 existingValue, bool hasExistingValue, JsonSerializer serializer)
|
||||
{
|
||||
JObject jo = JObject.Load(reader);
|
||||
return new Vector3(
|
||||
(float)jo["x"],
|
||||
(float)jo["y"],
|
||||
(float)jo["z"]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public class Vector2Converter : JsonConverter<Vector2>
|
||||
{
|
||||
public override void WriteJson(JsonWriter writer, Vector2 value, JsonSerializer serializer)
|
||||
{
|
||||
writer.WriteStartObject();
|
||||
writer.WritePropertyName("x");
|
||||
writer.WriteValue(value.x);
|
||||
writer.WritePropertyName("y");
|
||||
writer.WriteValue(value.y);
|
||||
writer.WriteEndObject();
|
||||
}
|
||||
|
||||
public override Vector2 ReadJson(JsonReader reader, Type objectType, Vector2 existingValue, bool hasExistingValue, JsonSerializer serializer)
|
||||
{
|
||||
JObject jo = JObject.Load(reader);
|
||||
return new Vector2(
|
||||
(float)jo["x"],
|
||||
(float)jo["y"]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public class QuaternionConverter : JsonConverter<Quaternion>
|
||||
{
|
||||
public override void WriteJson(JsonWriter writer, Quaternion value, JsonSerializer serializer)
|
||||
{
|
||||
writer.WriteStartObject();
|
||||
writer.WritePropertyName("x");
|
||||
writer.WriteValue(value.x);
|
||||
writer.WritePropertyName("y");
|
||||
writer.WriteValue(value.y);
|
||||
writer.WritePropertyName("z");
|
||||
writer.WriteValue(value.z);
|
||||
writer.WritePropertyName("w");
|
||||
writer.WriteValue(value.w);
|
||||
writer.WriteEndObject();
|
||||
}
|
||||
|
||||
public override Quaternion ReadJson(JsonReader reader, Type objectType, Quaternion existingValue, bool hasExistingValue, JsonSerializer serializer)
|
||||
{
|
||||
JObject jo = JObject.Load(reader);
|
||||
return new Quaternion(
|
||||
(float)jo["x"],
|
||||
(float)jo["y"],
|
||||
(float)jo["z"],
|
||||
(float)jo["w"]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public class ColorConverter : JsonConverter<Color>
|
||||
{
|
||||
public override void WriteJson(JsonWriter writer, Color value, JsonSerializer serializer)
|
||||
{
|
||||
writer.WriteStartObject();
|
||||
writer.WritePropertyName("r");
|
||||
writer.WriteValue(value.r);
|
||||
writer.WritePropertyName("g");
|
||||
writer.WriteValue(value.g);
|
||||
writer.WritePropertyName("b");
|
||||
writer.WriteValue(value.b);
|
||||
writer.WritePropertyName("a");
|
||||
writer.WriteValue(value.a);
|
||||
writer.WriteEndObject();
|
||||
}
|
||||
|
||||
public override Color ReadJson(JsonReader reader, Type objectType, Color existingValue, bool hasExistingValue, JsonSerializer serializer)
|
||||
{
|
||||
JObject jo = JObject.Load(reader);
|
||||
return new Color(
|
||||
(float)jo["r"],
|
||||
(float)jo["g"],
|
||||
(float)jo["b"],
|
||||
(float)jo["a"]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public class RectConverter : JsonConverter<Rect>
|
||||
{
|
||||
public override void WriteJson(JsonWriter writer, Rect value, JsonSerializer serializer)
|
||||
{
|
||||
writer.WriteStartObject();
|
||||
writer.WritePropertyName("x");
|
||||
writer.WriteValue(value.x);
|
||||
writer.WritePropertyName("y");
|
||||
writer.WriteValue(value.y);
|
||||
writer.WritePropertyName("width");
|
||||
writer.WriteValue(value.width);
|
||||
writer.WritePropertyName("height");
|
||||
writer.WriteValue(value.height);
|
||||
writer.WriteEndObject();
|
||||
}
|
||||
|
||||
public override Rect ReadJson(JsonReader reader, Type objectType, Rect existingValue, bool hasExistingValue, JsonSerializer serializer)
|
||||
{
|
||||
JObject jo = JObject.Load(reader);
|
||||
return new Rect(
|
||||
(float)jo["x"],
|
||||
(float)jo["y"],
|
||||
(float)jo["width"],
|
||||
(float)jo["height"]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public class Matrix4x4Converter : JsonConverter<Matrix4x4>
|
||||
{
|
||||
public override void WriteJson(JsonWriter writer, Matrix4x4 value, JsonSerializer serializer)
|
||||
{
|
||||
// Serialize the 16 elements directly. Avoid touching properties such as
|
||||
// 'rotation', 'lossyScale', 'inverse', or 'transpose': 'rotation' invokes
|
||||
// Matrix4x4.GetRotation() which asserts ValidTRS(), and 'inverse'/'transpose'
|
||||
// return another Matrix4x4 that would recurse infinitely under reflection
|
||||
// serialization, blowing the stack.
|
||||
writer.WriteStartObject();
|
||||
writer.WritePropertyName("m00"); writer.WriteValue(value.m00);
|
||||
writer.WritePropertyName("m01"); writer.WriteValue(value.m01);
|
||||
writer.WritePropertyName("m02"); writer.WriteValue(value.m02);
|
||||
writer.WritePropertyName("m03"); writer.WriteValue(value.m03);
|
||||
writer.WritePropertyName("m10"); writer.WriteValue(value.m10);
|
||||
writer.WritePropertyName("m11"); writer.WriteValue(value.m11);
|
||||
writer.WritePropertyName("m12"); writer.WriteValue(value.m12);
|
||||
writer.WritePropertyName("m13"); writer.WriteValue(value.m13);
|
||||
writer.WritePropertyName("m20"); writer.WriteValue(value.m20);
|
||||
writer.WritePropertyName("m21"); writer.WriteValue(value.m21);
|
||||
writer.WritePropertyName("m22"); writer.WriteValue(value.m22);
|
||||
writer.WritePropertyName("m23"); writer.WriteValue(value.m23);
|
||||
writer.WritePropertyName("m30"); writer.WriteValue(value.m30);
|
||||
writer.WritePropertyName("m31"); writer.WriteValue(value.m31);
|
||||
writer.WritePropertyName("m32"); writer.WriteValue(value.m32);
|
||||
writer.WritePropertyName("m33"); writer.WriteValue(value.m33);
|
||||
writer.WriteEndObject();
|
||||
}
|
||||
|
||||
public override Matrix4x4 ReadJson(JsonReader reader, Type objectType, Matrix4x4 existingValue, bool hasExistingValue, JsonSerializer serializer)
|
||||
{
|
||||
JObject jo = JObject.Load(reader);
|
||||
Matrix4x4 m = new Matrix4x4();
|
||||
m.m00 = (float)jo["m00"]; m.m01 = (float)jo["m01"]; m.m02 = (float)jo["m02"]; m.m03 = (float)jo["m03"];
|
||||
m.m10 = (float)jo["m10"]; m.m11 = (float)jo["m11"]; m.m12 = (float)jo["m12"]; m.m13 = (float)jo["m13"];
|
||||
m.m20 = (float)jo["m20"]; m.m21 = (float)jo["m21"]; m.m22 = (float)jo["m22"]; m.m23 = (float)jo["m23"];
|
||||
m.m30 = (float)jo["m30"]; m.m31 = (float)jo["m31"]; m.m32 = (float)jo["m32"]; m.m33 = (float)jo["m33"];
|
||||
return m;
|
||||
}
|
||||
}
|
||||
|
||||
public class BoundsConverter : JsonConverter<Bounds>
|
||||
{
|
||||
public override void WriteJson(JsonWriter writer, Bounds value, JsonSerializer serializer)
|
||||
{
|
||||
writer.WriteStartObject();
|
||||
writer.WritePropertyName("center");
|
||||
serializer.Serialize(writer, value.center); // Use serializer to handle nested Vector3
|
||||
writer.WritePropertyName("size");
|
||||
serializer.Serialize(writer, value.size); // Use serializer to handle nested Vector3
|
||||
writer.WriteEndObject();
|
||||
}
|
||||
|
||||
public override Bounds ReadJson(JsonReader reader, Type objectType, Bounds existingValue, bool hasExistingValue, JsonSerializer serializer)
|
||||
{
|
||||
JObject jo = JObject.Load(reader);
|
||||
Vector3 center = jo["center"].ToObject<Vector3>(serializer); // Use serializer to handle nested Vector3
|
||||
Vector3 size = jo["size"].ToObject<Vector3>(serializer); // Use serializer to handle nested Vector3
|
||||
return new Bounds(center, size);
|
||||
}
|
||||
}
|
||||
|
||||
// Converter for UnityEngine.TransformHandle (Tuanjie / Unity 6 transform handle struct).
|
||||
// Reflection-based serialization tries to enumerate it (DirectChildrenEnumerator) and
|
||||
// touches childCount, which calls AssertHandleIsValid and throws when the handle is the
|
||||
// default/uninitialized value. We match by type name so the converter compiles on Unity
|
||||
// versions that don't define this type.
|
||||
public class TransformHandleConverter : JsonConverter
|
||||
{
|
||||
public override bool CanRead => false;
|
||||
public override bool CanWrite => true;
|
||||
|
||||
public override bool CanConvert(Type objectType)
|
||||
{
|
||||
return objectType != null && objectType.FullName == "UnityEngine.TransformHandle";
|
||||
}
|
||||
|
||||
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
|
||||
{
|
||||
writer.WriteNull();
|
||||
}
|
||||
|
||||
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
|
||||
// Converter for UnityEngine.Object references (GameObjects, Components, Materials, Textures, etc.)
|
||||
public class UnityEngineObjectConverter : JsonConverter<UnityEngine.Object>
|
||||
{
|
||||
public override bool CanRead => true; // We need to implement ReadJson
|
||||
public override bool CanWrite => true;
|
||||
|
||||
/// <summary>
|
||||
/// Delegate for finding UnityEngine.Object by instruction (e.g., {"find":"...", "method":"..."}).
|
||||
/// This is set by the Editor assembly at startup to avoid cross-assembly reference issues.
|
||||
/// </summary>
|
||||
public static Func<JObject, Type, UnityEngine.Object> FindObjectByInstruction { get; set; }
|
||||
|
||||
public override void WriteJson(JsonWriter writer, UnityEngine.Object value, JsonSerializer serializer)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
writer.WriteNull();
|
||||
return;
|
||||
}
|
||||
|
||||
#if UNITY_EDITOR // AssetDatabase and EditorUtility are Editor-only
|
||||
if (UnityEditor.AssetDatabase.Contains(value))
|
||||
{
|
||||
// It's an asset (Material, Texture, Prefab, etc.)
|
||||
string path = UnityEditor.AssetDatabase.GetAssetPath(value);
|
||||
if (!string.IsNullOrEmpty(path))
|
||||
{
|
||||
writer.WriteValue(path);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Asset exists but path couldn't be found? Write minimal info.
|
||||
writer.WriteStartObject();
|
||||
writer.WritePropertyName("name");
|
||||
writer.WriteValue(value.name);
|
||||
writer.WritePropertyName("instanceID");
|
||||
writer.WriteValue(value.GetStableInstanceId());
|
||||
writer.WritePropertyName("isAssetWithoutPath");
|
||||
writer.WriteValue(true);
|
||||
writer.WriteEndObject();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// It's a scene object (GameObject, Component, etc.)
|
||||
writer.WriteStartObject();
|
||||
writer.WritePropertyName("name");
|
||||
writer.WriteValue(value.name);
|
||||
writer.WritePropertyName("instanceID");
|
||||
writer.WriteValue(value.GetStableInstanceId());
|
||||
writer.WriteEndObject();
|
||||
}
|
||||
#else
|
||||
// Runtime fallback: Write basic info without AssetDatabase
|
||||
writer.WriteStartObject();
|
||||
writer.WritePropertyName("name");
|
||||
writer.WriteValue(value.name);
|
||||
writer.WritePropertyName("instanceID");
|
||||
writer.WriteValue(value.GetStableInstanceId());
|
||||
writer.WritePropertyName("warning");
|
||||
writer.WriteValue("UnityEngineObjectConverter running in non-Editor mode, asset path unavailable.");
|
||||
writer.WriteEndObject();
|
||||
#endif
|
||||
}
|
||||
|
||||
public override UnityEngine.Object ReadJson(JsonReader reader, Type objectType, UnityEngine.Object existingValue, bool hasExistingValue, JsonSerializer serializer)
|
||||
{
|
||||
if (reader.TokenType == JsonToken.Null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
#if UNITY_EDITOR
|
||||
if (reader.TokenType == JsonToken.String)
|
||||
{
|
||||
// Assume it's an asset path
|
||||
string path = reader.Value.ToString();
|
||||
return UnityEditor.AssetDatabase.LoadAssetAtPath(path, objectType);
|
||||
}
|
||||
|
||||
if (reader.TokenType == JsonToken.StartObject)
|
||||
{
|
||||
JObject jo = JObject.Load(reader);
|
||||
|
||||
// Handle {"find":"...", "method":"..."} reference lookup format
|
||||
if (jo.TryGetValue("find", out JToken findToken))
|
||||
{
|
||||
if (FindObjectByInstruction != null)
|
||||
{
|
||||
UnityEngine.Object foundObj = FindObjectByInstruction(jo, objectType);
|
||||
if (foundObj != null)
|
||||
{
|
||||
return foundObj;
|
||||
}
|
||||
// Log warning if find instruction was provided but object wasn't found
|
||||
CodelyLogger.LogWarning($"Could not find object using instruction: {jo}");
|
||||
return null;
|
||||
}
|
||||
else
|
||||
{
|
||||
CodelyLogger.LogWarning("FindObjectByInstruction delegate not registered. Cannot resolve find instruction.");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
if (jo.TryGetValue("instanceID", out JToken idToken) && idToken.Type == JTokenType.Integer)
|
||||
{
|
||||
long instanceId = idToken.ToObject<long>();
|
||||
UnityEngine.Object obj = InstanceIdExtensions.InstanceIdToObject(instanceId);
|
||||
if (obj != null && objectType.IsAssignableFrom(obj.GetType()))
|
||||
{
|
||||
return obj;
|
||||
}
|
||||
}
|
||||
// Could potentially try finding by name as a fallback if ID lookup fails/isn't present
|
||||
// but that's less reliable.
|
||||
}
|
||||
#else
|
||||
// Runtime deserialization is tricky without AssetDatabase/EditorUtility
|
||||
// Maybe log a warning and return null or existingValue?
|
||||
CodelyLogger.LogWarning("UnityEngineObjectConverter cannot deserialize complex objects in non-Editor mode.");
|
||||
// Skip the token to avoid breaking the reader
|
||||
if (reader.TokenType == JsonToken.StartObject) JObject.Load(reader);
|
||||
else if (reader.TokenType == JsonToken.String) reader.ReadAsString();
|
||||
// Return null or existing value, depending on desired behavior
|
||||
return existingValue;
|
||||
#endif
|
||||
|
||||
throw new JsonSerializationException($"Unexpected token type '{reader.TokenType}' when deserializing UnityEngine.Object");
|
||||
}
|
||||
}
|
||||
}
|
||||
-11
@@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1eb3a812e461dfa499f91f9500604ef3
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in new issue
Block a user