Merge branch 'TEngine_v_3.0.0'

This commit is contained in:
ALEXTANG
2023-05-06 13:18:40 +08:00
41 changed files with 2640 additions and 104 deletions

12
.gitignore vendored
View File

@@ -103,4 +103,16 @@ Sandbox/
#Luban
Luban/.cache.meta
GenerateDatas/
#HybridCLR
Assets/HybridCLRData.meta
UserSettings/Search.settings
#Unity UserSettings
UserSettings/Search.index
UserSettings/Layouts/default-2021.dwlt
#UnityOnlineServiceData
Assets/UnityOnlineServiceData.meta
Assets/UnityOnlineServiceData

View File

@@ -3,7 +3,8 @@
"rootNamespace": "BattleCore.Runtime",
"references": [
"GUID:aa06d4cc755c979489c256c1bcca1dfb",
"GUID:d8b63aba1907145bea998dd612889d6b"
"GUID:d8b63aba1907145bea998dd612889d6b",
"GUID:a90b2d3377c5e4a4db95cc44fb82045e"
],
"includePlatforms": [],
"excludePlatforms": [],

View File

@@ -0,0 +1,75 @@
namespace TEngine
{
/// <summary>
/// 基础LogicSys,生命周期由TEngine实现推荐给系统实现
/// 减少多余的Mono保持系统层面只有一个Update。
/// 用主Mono来驱动LogicSys的生命周期。
/// </summary>
/// <typeparam name="T">逻辑系统类型。</typeparam>
public abstract class BaseLogicSys<T> : ILogicSys where T : new()
{
private static T _instance;
public static bool HasInstance => _instance != null;
public static T Instance
{
get
{
if (null == _instance)
{
_instance = new T();
}
return _instance;
}
}
#region virtual function
public virtual bool OnInit()
{
if (null == _instance)
{
_instance = new T();
}
return true;
}
public virtual void OnStart()
{
}
public virtual void OnUpdate()
{
}
public virtual void OnLateUpdate()
{
}
public virtual void OnFixedUpdate()
{
}
public virtual void OnRoleLogout()
{
}
public virtual void OnDestroy()
{
}
public virtual void OnDrawGizmos()
{
}
public virtual void OnApplicationPause(bool pause)
{
}
public virtual void OnMapChanged()
{
}
#endregion
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: fc4ce19b17fd4277951d189b66f503e2
timeCreated: 1683120353

View File

@@ -0,0 +1,212 @@
using System.Collections.Generic;
namespace TEngine
{
/// <summary>
/// 通过LogicSys来驱动且具备Unity完整生命周期的单例不继承MonoBehaviour
/// </summary>
/// <typeparam name="T"></typeparam>
public abstract class BehaviourSingleton<T> : BaseBehaviourSingleton where T : BaseBehaviourSingleton, new()
{
private static T _instance;
public static T Instance
{
get
{
if (null == _instance)
{
_instance = new T();
Log.Assert(_instance != null);
_instance.Awake();
RegSingleton(_instance);
}
return _instance;
}
}
private static void RegSingleton(BaseBehaviourSingleton inst)
{
BehaviourSingleSystem.Instance.RegSingleton(inst);
}
}
public class BaseBehaviourSingleton
{
public bool IsStart = false;
public virtual void Active()
{
}
public virtual void Awake()
{
}
public virtual bool IsHaveLateUpdate()
{
return false;
}
public virtual void Start()
{
}
public virtual void Update()
{
}
public virtual void LateUpdate()
{
}
public virtual void Destroy()
{
}
public virtual void OnPause()
{
}
public virtual void OnResume()
{
}
public virtual void OnDrawGizmos()
{
}
}
public class BehaviourSingleSystem : BaseLogicSys<BehaviourSingleSystem>
{
private readonly List<BaseBehaviourSingleton> _listInst = new List<BaseBehaviourSingleton>();
private readonly List<BaseBehaviourSingleton> _listStart = new List<BaseBehaviourSingleton>();
private readonly List<BaseBehaviourSingleton> _listUpdate = new List<BaseBehaviourSingleton>();
private readonly List<BaseBehaviourSingleton> _listLateUpdate = new List<BaseBehaviourSingleton>();
public void RegSingleton(BaseBehaviourSingleton inst)
{
Log.Assert(!_listInst.Contains(inst));
_listInst.Add(inst);
_listStart.Add(inst);
}
public void UnRegSingleton(BaseBehaviourSingleton inst)
{
if (inst == null)
{
Log.Error($"BaseBehaviourSingleton Is Null");
return;
}
Log.Assert(_listInst.Contains(inst));
if (_listInst.Contains(inst))
{
_listInst.Remove(inst);
}
if (_listStart.Contains(inst))
{
_listStart.Remove(inst);
}
if (_listUpdate.Contains(inst))
{
_listUpdate.Remove(inst);
}
if (_listLateUpdate.Contains(inst))
{
_listLateUpdate.Remove(inst);
}
inst.Destroy();
inst = null;
}
public override void OnUpdate()
{
var listStart = _listStart;
var listToUpdate = _listUpdate;
var listToLateUpdate = _listLateUpdate;
if (listStart.Count > 0)
{
for (int i = 0; i < listStart.Count; i++)
{
var inst = listStart[i];
Log.Assert(!inst.IsStart);
inst.IsStart = true;
inst.Start();
listToUpdate.Add(inst);
if (inst.IsHaveLateUpdate())
{
listToLateUpdate.Add(inst);
}
}
listStart.Clear();
}
var listUpdateCnt = listToUpdate.Count;
for (int i = 0; i < listUpdateCnt; i++)
{
var inst = listToUpdate[i];
TProfiler.BeginFirstSample(inst.GetType().FullName);
inst.Update();
TProfiler.EndFirstSample();
}
}
public override void OnLateUpdate()
{
var listLateUpdate = _listLateUpdate;
var listLateUpdateCnt = listLateUpdate.Count;
for (int i = 0; i < listLateUpdateCnt; i++)
{
var inst = listLateUpdate[i];
TProfiler.BeginFirstSample(inst.GetType().FullName);
inst.LateUpdate();
TProfiler.EndFirstSample();
}
}
public override void OnDestroy()
{
for (int i = 0; i < _listInst.Count; i++)
{
var inst = _listInst[i];
inst.Destroy();
}
}
public override void OnApplicationPause(bool pause)
{
for (int i = 0; i < _listInst.Count; i++)
{
var inst = _listInst[i];
if (pause)
{
inst.OnPause();
}
else
{
inst.OnResume();
}
}
}
public override void OnDrawGizmos()
{
for (int i = 0; i < _listInst.Count; i++)
{
var inst = _listInst[i];
inst.OnDrawGizmos();
}
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 5c0e9c1c8c9d4ce99a1c991fb62a0256
timeCreated: 1683120460

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 1d862c80fdc1e684e8ff3b6ae7707b79
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,24 @@
using TEngine;
using UnityEngine;
#if ENABLE_URP
using UnityEngine.Rendering.Universal;
#endif
namespace GameLogic
{
public class CameraUtils
{
public static void AddCameraStack(Camera camera,Camera mainCamera)
{
#if ENABLE_URP
if (mainCamera != null)
{
// 通过脚本的方式,只要能找到 camera 不轮是否跨 base 相机的场景,都可以 Add 进 Stack
mainCamera.GetComponent<UniversalAdditionalCameraData>().cameraStack.Add(GameModule.UI.UICamera);
}
#else
Log.Fatal("Could not add camera stack because had no URP-Render-Pip");
#endif
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 6375b5490bbdcc145a24706a6c4e9cb7
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -5,7 +5,9 @@
"GUID:08c3762f54316454ca6b6fbcb22b40e5",
"GUID:a90b2d3377c5e4a4db95cc44fb82045e",
"GUID:aa06d4cc755c979489c256c1bcca1dfb",
"GUID:6055be8ebefd69e48b49212b09b47b2f"
"GUID:641632c4f8079b94f963b5284d859a12",
"GUID:6055be8ebefd69e48b49212b09b47b2f",
"GUID:15fc0a57446b3144c949da3e2b9737a9"
],
"includePlatforms": [],
"excludePlatforms": [],
@@ -14,6 +16,12 @@
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"versionDefines": [
{
"name": "com.unity.render-pipelines.universal",
"expression": "",
"define": "ENABLE_URP"
}
],
"noEngineReferences": false
}

View File

@@ -0,0 +1,65 @@
using System;
using System.Collections.Generic;
using TEngine;
namespace GameProto
{
/// <summary>
/// 指定Key委托。
/// </summary>
/// <typeparam name="TKey">键。</typeparam>
/// <typeparam name="TValue">值。</typeparam>
public delegate TKey ConvertDictionaryKey<out TKey, in TValue>(TValue val);
/// <summary>
/// 配置表辅助工具。
/// </summary>
public static class ConfigUtility
{
/// <summary>
/// 生成64long的主键。
/// </summary>
/// <param name="key1">键1。</param>
/// <param name="key2">键2。</param>
/// <returns>64long的主键。</returns>
public static UInt64 Make64Key(uint key1, uint key2)
{
return ((UInt64)key1 << 32) | key2;
}
/// <summary>
/// 拷贝配置表字典。
/// </summary>
/// <param name="dict">拷贝地址。</param>
/// <param name="source">拷贝源。</param>
/// <param name="convKey">指定主键。</param>
/// <typeparam name="TKey">键。</typeparam>
/// <typeparam name="TValue">值。</typeparam>
/// <returns>是否拷贝成功。</returns>
public static bool CopyConfigDict<TKey, TValue>(ref Dictionary<TKey, TValue> dict,List<TValue> source, ConvertDictionaryKey<TKey, TValue> convKey)
{
if (source == null)
{
return false;
}
dict.Clear();
bool failed = false;
for (int i = 0; i < source.Count; i++)
{
var data = source[i];
TKey key = convKey(data);
if (dict.ContainsKey(key))
{
Log.Fatal("Copy Config Failed: {0} IndexOf {1} Had Repeated Key: {2} ", typeof(TValue).Name, i + 1, key);
failed = true;
break;
}
dict.Add(key, data);
}
return !failed;
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: e278e636820842f293e2a765962ad4f8
timeCreated: 1683300170

View File

@@ -28,6 +28,7 @@ RectTransform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1633508802563447727}
m_RootOrder: 0
@@ -104,6 +105,7 @@ RectTransform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 947380016692030854}
m_Father: {fileID: 1633508802563447727}
@@ -229,6 +231,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4232232858152633415}
m_RootOrder: 0
@@ -309,6 +312,7 @@ RectTransform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1633508802563447727}
m_RootOrder: 2
@@ -404,6 +408,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1183389821019440696}
m_Father: {fileID: 1753386200549547019}
@@ -505,7 +510,6 @@ GameObject:
serializedVersion: 6
m_Component:
- component: {fileID: 1753386200549547019}
- component: {fileID: 2395469539571654547}
m_Layer: 5
m_Name: TopNode
m_TagString: Untagged
@@ -523,6 +527,7 @@ RectTransform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 4232232858152633415}
- {fileID: 3038352660368000718}
@@ -535,18 +540,6 @@ RectTransform:
m_AnchoredPosition: {x: 0, y: -100}
m_SizeDelta: {x: 0, y: 200}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &2395469539571654547
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4664656392582353123}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: c0a563c3e931db74f94f9991270a2dee, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &7836612998133337201
GameObject:
m_ObjectHideFlags: 0
@@ -573,6 +566,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 3254196395727856927}
m_Father: {fileID: 2347891492826839465}
@@ -612,6 +606,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1753386200549547019}
m_RootOrder: 2
@@ -706,6 +701,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 947380016692030854}
m_RootOrder: 0
@@ -780,6 +776,7 @@ RectTransform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 4652061626151979521}
- {fileID: 2347891492826839465}
@@ -839,6 +836,7 @@ RectTransform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1753386200549547019}
m_RootOrder: 1

View File

@@ -150,6 +150,7 @@ Transform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 2061060682}
m_RootOrder: 2
@@ -228,6 +229,7 @@ Transform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 2061060682}
m_RootOrder: 0
@@ -277,6 +279,7 @@ RectTransform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0, y: 0, z: 0}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 828420966}
m_RootOrder: 0
@@ -374,6 +377,7 @@ Transform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 828420966}
m_RootOrder: 1
@@ -448,6 +452,7 @@ Transform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 2061060682}
m_RootOrder: 10
@@ -492,6 +497,7 @@ Transform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 88107082}
- {fileID: 110205811}
@@ -527,6 +533,7 @@ Transform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 828420966}
m_RootOrder: 2
@@ -543,6 +550,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3}
m_Name:
m_EditorClassIdentifier:
m_SendPointerHoverToParent: 1
m_HorizontalAxis: Horizontal
m_VerticalAxis: Vertical
m_SubmitButton: Submit
@@ -592,6 +600,7 @@ Transform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 2061060682}
m_RootOrder: 8
@@ -635,6 +644,7 @@ Transform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 2061060682}
m_RootOrder: 4
@@ -680,6 +690,7 @@ Transform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 2061060682}
m_RootOrder: 7
@@ -738,6 +749,7 @@ Transform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 2061060682}
m_RootOrder: 3
@@ -793,6 +805,7 @@ Transform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 2061060682}
m_Father: {fileID: 0}
@@ -825,6 +838,7 @@ Transform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 2061060682}
m_RootOrder: 1
@@ -868,6 +882,7 @@ Transform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 2061060682}
m_RootOrder: 9
@@ -964,6 +979,7 @@ Transform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: -10}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
@@ -995,6 +1011,7 @@ Transform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 2061060682}
m_RootOrder: 6
@@ -1047,6 +1064,7 @@ Transform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 43232120}
- {fileID: 1823887563}
@@ -1112,6 +1130,7 @@ Transform:
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 2061060682}
m_RootOrder: 5
@@ -1155,6 +1174,7 @@ Transform:
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 2061060682}
m_RootOrder: 11

View File

@@ -0,0 +1,448 @@
using System;
using UnityEditor;
using UnityEngine;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml;
using TEngine;
using TEngine.Editor;
using Debug = UnityEngine.Debug;
class GenNetScriptWindow : EditorWindow
{
private static GenNetScriptWindow _window = null;
//绑定通知协议
private StringBuilder _strBindNotify;
//枚举对应协议号
private readonly Dictionary<string, int> _dicName2ID = new Dictionary<string, int>();
//xxx.xml下的协议枚举list
private readonly Dictionary<string, List<string>> _dicPath2Name = new Dictionary<string, List<string>>();
//协议号有没有被勾选
private readonly Dictionary<int, bool> _dicID2Select = new Dictionary<int, bool>();
//记录回包协议号
private readonly Dictionary<int, int> _dicID2ID = new Dictionary<int, int>();
private Vector2 _scrollPos;
private Vector2 _fileListScrollPos;
private string _path = @"G:\github\TEngine\Luban\Proto\pb_schemas\";
private readonly List<string> _filePathList = new List<string>();
private string _curSelectFile = string.Empty;
private string _filterFileName = string.Empty;
private string _filterProName = string.Empty;
[MenuItem("TEngine/协议生成工具|Protobuf Tools")]
static void OpenGenNetScriptWindow()
{
if (!_window)
{
_window = ScriptableObject.CreateInstance<GenNetScriptWindow>();
_window.maxSize = new Vector2(1000, 800);
_window.minSize = _window.maxSize / 2;
_window.LoadLastPath();
}
_window.ShowUtility();
}
void OnGUI()
{
EditorGUILayout.PrefixLabel("protoPath");
_path = EditorGUILayout.TextField(_path);
var r = EditorGUILayout.BeginHorizontal("Button");
if (GUI.Button(r, GUIContent.none))
{
ReadPath();
}
GUILayout.Label("Search");
EditorGUILayout.EndHorizontal();
//加个文件筛选
//EditorGUILayout.BeginHorizontal();
GUILayout.Label("filter file:");
_filterFileName = GUILayout.TextField(_filterFileName);
//EditorGUILayout.EndHorizontal();
//显示文件名部分
if (_filePathList.Count > 0)
{
_fileListScrollPos = EditorGUILayout.BeginScrollView(_fileListScrollPos, GUILayout.Width(r.width), GUILayout.Height(200));
for (int i = 0; i < _filePathList.Count; ++i)
{
var fileName = Path.GetFileNameWithoutExtension(_filePathList[i]);
if (!string.IsNullOrEmpty(_filterFileName) && fileName.IndexOf(_filterFileName, StringComparison.Ordinal) == -1)
{
continue;
}
if (GUILayout.Button(fileName))
{
_curSelectFile = _filePathList[i];
LoadSelectFile();
}
}
EditorGUILayout.EndScrollView();
}
GUILayout.Label("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------");
if (!string.IsNullOrEmpty(_curSelectFile))
{
//加个协议筛选
GUILayout.Label("filter proto:");
_filterProName = GUILayout.TextField(_filterProName);
_scrollPos = EditorGUILayout.BeginScrollView(_scrollPos, GUILayout.Width(r.width), GUILayout.Height(200));
var fileName2 = Path.GetFileNameWithoutExtension(_curSelectFile);
List<string> list;
if (_dicPath2Name.TryGetValue(fileName2, out list))
{
EditorGUI.indentLevel++;
for (int i = 0; i < list.Count; ++i)
{
var cmdName = list[i];
//筛选一下,忽略大小写
if (!string.IsNullOrEmpty(_filterProName) && cmdName.ToLower().IndexOf(_filterProName.ToLower()) == -1)
continue;
var cmdID = _dicName2ID[cmdName];
EditorGUILayout.BeginHorizontal(GUIStyle.none);
//协议名
EditorGUILayout.LabelField(cmdName);
//toggle
if (!_dicID2Select.ContainsKey(cmdID))
_dicID2Select[cmdID] = false;
_dicID2Select[cmdID] = EditorGUILayout.Toggle(cmdID.ToString(),_dicID2Select[cmdID]);
//回包协议号
if (!_dicID2ID.ContainsKey(cmdID))
{
if (cmdName.EndsWith("REQ"))
_dicID2ID[cmdID] = cmdID + 1;
else
_dicID2ID[cmdID] = 0;
}
_dicID2ID[cmdID] = EditorGUILayout.IntField(_dicID2ID[cmdID]);
EditorGUILayout.EndHorizontal();
}
EditorGUI.indentLevel--;
}
EditorGUILayout.EndScrollView();
}
if (!string.IsNullOrEmpty(_curSelectFile))
{
if (GUILayout.Button("GenSelect"))
{
OnClickGenBtn(false);
}
if (GUILayout.Button("GenAll"))
{
OnClickGenBtn(true);
}
}
if (GUILayout.Button("导出Proto To Csharp|Export Proto To Csharp"))
{
ExportProto();
}
}
#region
private void LoadLastPath()
{
if (PlayerPrefs.HasKey("GenNetScriptWindow.Path"))
{
_path = PlayerPrefs.GetString("GenNetScriptWindow.Path");
}
ReadPath();
}
private void ReadPath()
{
PlayerPrefs.SetString("GenNetScriptWindow.Path", _path);
_filePathList.Clear();
_curSelectFile = String.Empty;
JustLoadFileList(_filePathList, _path);
}
private void JustLoadFileList(List<string> exportList, string folderPath, bool deep = false)
{
if (!LoadFoldChildFileList(exportList, folderPath, deep))
{
EditorUtility.DisplayDialog("folder not exist", "folder not exist:"+_path, "ok");
}
}
private void LoadSelectFile()
{
_dicID2Select.Clear();
_dicID2ID.Clear();
_dicName2ID.Clear();
var xmlFilePath = _curSelectFile;
var fileName = Path.GetFileNameWithoutExtension(xmlFilePath);
var protocolNameList = new List<string>();
//读xml
if (fileName.StartsWith("proto_cs"))
{
Debug.Log("load xml.name:" + fileName);
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xmlFilePath);
GenProtocolNameList(xmlDoc.ChildNodes, protocolNameList);
_dicPath2Name[fileName] = protocolNameList;
Debug.Log(fileName + " success.");
}
}
private bool LoadFoldChildFileList(List<string> exportList, string folderPath, bool deep = false)
{
if (!Directory.Exists(folderPath))
{
Log.Error("folder not exist: {0}", folderPath);
return false;
}
string[] subFile = Directory.GetFiles(folderPath);
foreach (string fileName in subFile)
{
//有些筛选条件,直接写死这里了。方便
var name = Path.GetFileNameWithoutExtension(fileName);
if (name.StartsWith("proto_cs"))
exportList.Add(fileName);
}
if (deep)
{
string[] subFolders = Directory.GetDirectories(folderPath);
foreach (string folderName in subFolders)
{
LoadFoldChildFileList(exportList, folderName);
}
}
return true;
}
//把macro里的协议号和协议枚举名对应起来
private void GenProtocolNameList(XmlNodeList nodeList, List<string> nameList)
{
foreach (XmlNode node in nodeList)
{
if (node.Attributes == null)
continue;
if (node.Name == "macro")
{
var name = node.Attributes.GetNamedItem("name").Value;
if (name.StartsWith("CS_CMD") || name.StartsWith("CS_NOTIFY"))
{
var id = Convert.ToInt32(node.Attributes.GetNamedItem("value").Value);
_dicName2ID[name] = id;
if (nameList != null)
nameList.Add(name);
}
}
GenProtocolNameList(node.ChildNodes, nameList);
}
}
#endregion
#region
private void OnClickGenBtn(bool genAll)
{
_strBindNotify = new StringBuilder();
bool needRegCmdHandle = false;
StringBuilder sb = new StringBuilder();
List<int> listGenId = new List<int>();
var iter = _dicID2Select.GetEnumerator();
while (iter.MoveNext())
{
if (iter.Current.Value || genAll)
{
int resId = iter.Current.Key;
int resID;
if (_dicID2ID.TryGetValue(resId, out resID))
{
if (resID != 0)
{
var oneStr = GenOneReq(resId, resID);
sb.Append(oneStr);
sb.Append("\n\n");
listGenId.Add(resId);
listGenId.Add(resID);
}
else if (!listGenId.Contains(resId))
{
needRegCmdHandle = true;
var oneStr = GenOneReq(0, resId);
sb.Append(oneStr);
sb.Append("\n\n");
listGenId.Add(resId);
}
}
}
}
if (needRegCmdHandle)
{
sb.Append("public void RegCmdHandle()\n");
sb.Append("{\n");
sb.Append(_strBindNotify);
sb.Append("}\n");
}
TextEditor te = new TextEditor();
te.text = sb.ToString();
te.SelectAll();
te.Copy();
}
private static readonly Dictionary<string, string> TempParamDic = new Dictionary<string, string>();
private static string _reqClassName = string.Empty;
private static string _resClassName = string.Empty;
private static string _reqEnumName = string.Empty;
private static string _resEnumName = string.Empty;
private static string _reqDesc = string.Empty;
private static bool _resResult;
private string GenOneReq(int reqId, int resId)
{
TempParamDic.Clear();
_reqClassName = string.Empty;
_resClassName = string.Empty;
_reqEnumName = string.Empty;
_resEnumName = string.Empty;
_resResult = false;
var xmlFilePath = _curSelectFile;
var fileName = Path.GetFileNameWithoutExtension(xmlFilePath);
//读xml
if (fileName.StartsWith("proto_cs"))
{
Debug.Log("load xml.name:" + fileName);
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xmlFilePath);
_GenOneReq(xmlDoc.ChildNodes, reqId,resId);
Debug.Log(fileName + " success.");
var sb = new StringBuilder();
sb.Append("#region ");
sb.Append(_reqDesc);
sb.Append(string.Format("\n//{0}\n", _reqDesc));
if (reqId != 0)
{
sb.Append("public void ");
sb.Append(_reqClassName.Substring(2));
sb.Append("(");
foreach (var item in TempParamDic)
{
sb.Append(string.Format("{0} {1}, ", item.Value, item.Key));
}
sb.Remove(sb.Length - 2, 2);//把多余的逗号和空格删了
sb.Append(")\n{\n");
sb.Append(string.Format("\tCSPkg reqPkg = ProtoUtil.BuildCSMsg(netMacros.{0});\n", _reqEnumName));
sb.Append(string.Format("\t{0} reqData = reqPkg.Body.{1};\n", _reqClassName, _reqClassName.Substring(2)));
foreach (var item in TempParamDic)
{
sb.Append(string.Format("\treqData.{0} = {0};\n", item.Key));
}
sb.Append("\n");
sb.Append(string.Format("\tGameClient.Instance.SendCSMsg(reqPkg, netMacros.{0}, {1});\n", _resEnumName,
_resClassName.Substring(2)));
sb.Append("}\n\n");
}
else
{
_strBindNotify.Append(string.Format("\t\tGameClient.Instance.RegCmdHandle(netMacros.{0}, {1});\n", _resEnumName, _resClassName.Substring(2)));
}
//回包
sb.Append(string.Format("private void {0}(CSMsgResult result, CSPkg msg)\n", _resClassName.Substring(2)));
sb.Append("{\n");
sb.Append(string.Format("\tif (DodUtil.CheckHaveError(result, msg, typeof({0})))\n", _resClassName));
sb.Append("\t\treturn;\n\n");
sb.Append(string.Format("\t{0} resData = msg.Body.{1};\n", _resClassName, _resClassName.Substring(2)));
if (_resResult)
{
sb.Append("\tif (resData.Result.Ret != 0)\n");
sb.Append("\t{\n");
sb.Append("\t\tUISys.Mgr.ShowTipMsg(resData.Result);\n");
sb.Append("\t\treturn;\n");
sb.Append("\t}\n");
}
sb.Append("\t//todo\n");
sb.Append("}\n#endregion");
return sb.ToString();
}
return null;
}
private void _GenOneReq(XmlNodeList nodeList, int reqId,int resId)
{
foreach (XmlNode node in nodeList)
{
if (node.Attributes == null)
continue;
if (node.Name.Equals("macro"))
{
var name = node.Attributes.GetNamedItem("name").Value;
if (name.StartsWith("CS_CMD") || name.StartsWith("CS_NOTIFY"))
{
var id = Convert.ToInt32(node.Attributes.GetNamedItem("value").Value);
if (id == reqId)
_reqEnumName = name;
if (id == resId)
_resEnumName = name;
}
}
if (node.Name.Equals("struct"))
{
if (node.Attributes.GetNamedItem("id") == null)
continue;
var enumName = node.Attributes.GetNamedItem("id").Value;
if (enumName.Equals(_reqEnumName))
{
var name = node.Attributes.GetNamedItem("name").Value;
_reqClassName = name;
if (node.Attributes.GetNamedItem("name") != null)
{
_reqDesc = node.Attributes.GetNamedItem("desc").Value;
}
foreach (XmlNode childNode in node.ChildNodes)
{
if (childNode != null && childNode.Name.Equals("entry"))
{
var paramName = childNode.Attributes.GetNamedItem("name").Value;
var paramType = childNode.Attributes.GetNamedItem("type").Value;
TempParamDic.Add(paramName, paramType);
}
}
}
if (enumName.Equals(_resEnumName))
{
var className = node.Attributes.GetNamedItem("name").Value;
_resClassName = className;
}
}
_GenOneReq(node.ChildNodes, reqId, resId);
}
}
#endregion
#region ToCsharp
private void ExportProto()
{
ProtoGenTools.Export();
}
#endregion
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 989d4686a599e7047bba6f0cbb1bb5e7
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -15,7 +15,7 @@ namespace TEngine.Editor.UI
Generate(false);
}
[MenuItem("GameObject/ScriptGenerator/UIProperty UniTask", priority = 43)]
[MenuItem("GameObject/ScriptGenerator/UIProperty - UniTask", priority = 43)]
public static void MemberPropertyUniTask()
{
Generate(false, true);
@@ -27,7 +27,7 @@ namespace TEngine.Editor.UI
Generate(true);
}
[MenuItem("GameObject/ScriptGenerator/UIPropertyAndListener UniTask", priority = 44)]
[MenuItem("GameObject/ScriptGenerator/UIPropertyAndListener - UniTask", priority = 44)]
public static void MemberPropertyAndListenerUniTask()
{
Generate(true, true);

View File

@@ -42,9 +42,9 @@ MonoBehaviour:
m_Gitee: 1
HotUpdateAssemblies:
- GameBase.dll
- GameLogic.dll
- GameProto.dll
- BattleCore.Runtime.dll
- GameLogic.dll
AOTMetaAssemblies:
- mscorlib.dll
- System.dll

View File

@@ -30,7 +30,7 @@ public class HybridCLRCustomGlobalSettings
[Header("Auto sync with [HybridCLRGlobalSettings]")]
[Tooltip("You should modify the file form file path [Assets/CustomHybridCLR/Settings/HybridCLRGlobalSettings.asset]")]
public List<string> HotUpdateAssemblies = new List<string>() { "GameBase.dll","GameLogic.dll","GameProto.dll","BattleCore.Runtime.dll","Assembly-CSharp.dll"};
public List<string> HotUpdateAssemblies = new List<string>() { "GameBase.dll","GameProto.dll","BattleCore.Runtime.dll","GameLogic.dll"};
[Header("Need manual setting!")] public List<string> AOTMetaAssemblies= new List<string>() {"mscorlib.dll","System.dll","System.Core.dll" };

View File

@@ -0,0 +1,107 @@
using System.Text;
namespace TEngine
{
public static class ByteHelper
{
public static string ToHex(this byte b)
{
return b.ToString("X2");
}
public static string ToHex(this byte[] bytes)
{
StringBuilder stringBuilder = new StringBuilder();
foreach (byte b in bytes)
{
stringBuilder.Append(b.ToString("X2"));
}
return stringBuilder.ToString();
}
public static string ToHex(this byte[] bytes, string format)
{
StringBuilder stringBuilder = new StringBuilder();
foreach (byte b in bytes)
{
stringBuilder.Append(b.ToString(format));
}
return stringBuilder.ToString();
}
public static string ToHex(this byte[] bytes, int offset, int count)
{
StringBuilder stringBuilder = new StringBuilder();
for (int i = offset; i < offset + count; ++i)
{
stringBuilder.Append(bytes[i].ToString("X2"));
}
return stringBuilder.ToString();
}
public static string ToStr(this byte[] bytes)
{
return Encoding.Default.GetString(bytes);
}
public static string ToStr(this byte[] bytes, int index, int count)
{
return Encoding.Default.GetString(bytes, index, count);
}
public static string Utf8ToStr(this byte[] bytes)
{
return Encoding.UTF8.GetString(bytes);
}
public static string Utf8ToStr(this byte[] bytes, int index, int count)
{
return Encoding.UTF8.GetString(bytes, index, count);
}
public static void WriteTo(this byte[] bytes, int offset, uint num)
{
bytes[offset] = (byte)(num & 0xff);
bytes[offset + 1] = (byte)((num & 0xff00) >> 8);
bytes[offset + 2] = (byte)((num & 0xff0000) >> 16);
bytes[offset + 3] = (byte)((num & 0xff000000) >> 24);
}
public static void WriteTo(this byte[] bytes, int offset, int num)
{
bytes[offset] = (byte)(num & 0xff);
bytes[offset + 1] = (byte)((num & 0xff00) >> 8);
bytes[offset + 2] = (byte)((num & 0xff0000) >> 16);
bytes[offset + 3] = (byte)((num & 0xff000000) >> 24);
}
public static void WriteTo(this byte[] bytes, int offset, byte num)
{
bytes[offset] = num;
}
public static void WriteTo(this byte[] bytes, int offset, short num)
{
bytes[offset] = (byte)(num & 0xff);
bytes[offset + 1] = (byte)((num & 0xff00) >> 8);
}
public static void WriteTo(this byte[] bytes, int offset, ushort num)
{
bytes[offset] = (byte)(num & 0xff);
bytes[offset + 1] = (byte)((num & 0xff00) >> 8);
}
public static unsafe void WriteTo(this byte[] bytes, int offset, long num)
{
byte* bPoint = (byte*)&num;
for (int i = 0; i < sizeof(long); ++i)
{
bytes[offset + i] = bPoint[i];
}
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: c577d22a071e44c6bf0c2a0ed5964fbe
timeCreated: 1682418991

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 0db55501a091a6e429dd80459f36b6af
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: b94472036d46ad5498116fcc1cbf4dfe
folderAsset: yes
timeCreated: 1510262153
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,136 @@
/*------------------------------------------------------------------------------
Original Author: Pikachuxxxx
Adapted By: Brandon Lyman
This script is an adaptation of Pikachuxxxx's utiltiy to reverse an animation
clip in Unity. Please find the original Github Gist here:
https://gist.github.com/8101da6d14a5afde80c7c180e3a43644.git
ABSOLUTELY ALL CREDIT FOR THIS SCRIPT goes to Pikachuxxxx. Thank you so much for
your original script!
Unfortunately, their method that utilizes
"AnimationUtility.GetAllCurves()" is obsolete, according to the official
unity documentation:
https://docs.unity3d.com/ScriptReference/AnimationUtility.GetAllCurves.html
The editor suggests using "AnimationUtility.GetCurveBindings()" in its stead,
and this script reveals how that can be accomplished as it is slightly
different from the original methodology. I also added in some logic to
differentiate between the original clip and the new clip being created, as
I experienced null reference exceptions after the original "ClearAllCurves()"
call. Additionally, I placed the script's logic in a ScriptableWizard class to
fit the needs for my project. For more information on ScriptableWizards, please
refer to this Unity Learn Tutorial:
https://learn.unity.com/tutorial/creating-basic-editor-tools#5cf6c8f2edbc2a160a8a0951
Hope this helps and please comment with any questions. Thanks!
------------------------------------------------------------------------------*/
using UnityEngine;
using UnityEditor;
using System.IO;
using System.Collections.Generic;
//using static DG.DemiEditor.DeGUIKey;
public class SpiteAnimationClip : ScriptableWizard
{
public string NewFileName = "";
public float BeginTime = 0;
public float EndTime = 1;
[MenuItem("Tools/SplitAnimationClip...")]
private static void SplitAnimationClipShow()
{
ScriptableWizard.DisplayWizard<SpiteAnimationClip>("SpiteAnimationClip...", "splite");
}
private void OnWizardCreate()
{
string directoryPath =
Path.GetDirectoryName(AssetDatabase.GetAssetPath(Selection.activeObject));
string fileName =
Path.GetFileName(AssetDatabase.GetAssetPath(Selection.activeObject));
string fileExtension =
Path.GetExtension(AssetDatabase.GetAssetPath(Selection.activeObject));
fileName = fileName.Split('.')[0];
string copiedFilePath = "";
if (NewFileName != null && NewFileName != "")
{
copiedFilePath = directoryPath + Path.DirectorySeparatorChar + NewFileName + fileExtension;
}
else
{
copiedFilePath = directoryPath + Path.DirectorySeparatorChar + fileName + $"_split_{BeginTime}_{EndTime}" + fileExtension;
}
AnimationClip originalClip = GetSelectedClip();
AssetDatabase.CopyAsset(AssetDatabase.GetAssetPath(Selection.activeObject), copiedFilePath);
AnimationClip reversedClip = (AnimationClip)AssetDatabase.LoadAssetAtPath(copiedFilePath, typeof(AnimationClip));
if (originalClip == null)
{
return;
}
float clipLength = originalClip.length;
EditorCurveBinding[] curveBindings = AnimationUtility.GetCurveBindings(originalClip);
Debug.Log(curveBindings.Length);
reversedClip.ClearCurves();
float timeOffset = -1;
foreach (EditorCurveBinding binding in curveBindings)
{
AnimationCurve curve = AnimationUtility.GetEditorCurve(originalClip, binding);
var keys = new List<Keyframe>();// curve.keys;
int keyCount = curve.keys.Length;
for (int i = 0; i < keyCount; i++)
{
Keyframe K = curve.keys[i];
if (K.time >= BeginTime && K.time <= EndTime)
{
if (timeOffset < 0)
{
timeOffset = K.time;
}
K.time = K.time - timeOffset;
keys.Add(K);
Debug.LogError("time " + clipLength + " index " + i + " time " + K.time);
}
}
curve.keys = keys.ToArray() ;
reversedClip.SetCurve(binding.path, binding.type, binding.propertyName, curve);
}
AnimationEvent[] events = AnimationUtility.GetAnimationEvents(originalClip);
var eventsList= new List<AnimationEvent>();
if (events.Length > 0)
{
for (int i = 0; i < events.Length; i++)
{
var eventTemp = events[i];
if (eventTemp.time <= BeginTime && eventTemp.time >= EndTime)
{
eventTemp.time = eventTemp.time - timeOffset;
eventsList.Add(eventTemp);
}
}
AnimationUtility.SetAnimationEvents(reversedClip, eventsList.ToArray());
}
Debug.Log("[[ReverseAnimationClip.cs]] Successfully reversed " +
"animation clip " + fileName + ".");
}
private AnimationClip GetSelectedClip()
{
Object[] clips = Selection.GetFiltered(typeof(AnimationClip), SelectionMode.Assets);
if (clips.Length > 0)
{
return clips[0] as AnimationClip;
}
return null;
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 9368fbead1d3043419793a2c9c3ef030
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 8be52d198504f814db7f9d88b54c5a44
timeCreated: 1510337152
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,36 @@
syntax = "proto3";
package GameProto;
// 这个文件只放协议,和协议头
// 消息协议
message CSPkg
{
CSPkgHead Head = 1; //消息协议头
CSPkgBody Body = 2; //消息协议体
}
// 消息协议头
message CSPkgHead
{
uint32 MsgId = 1; //协议号
uint32 MsgLength = 2; //协议长度
uint32 MsgVersion = 3; //协议版本
uint32 Echo = 4; //回带字段
uint32 SvrTime = 5; //服务器时间
}
// 消息协议体
message CSPkgBody
{
}
// 协议ID
enum CSMsgID
{
CS_START = 0;
CS_HeartBeat = 10001;
CS_END = 10000;
}

View File

@@ -1,20 +1,20 @@
{
"dependencies": {
"com.focus-creative-games.hybridclr_unity": "2.1.0",
"com.unity.2d.animation": "5.2.0",
"com.unity.2d.pixel-perfect": "4.0.1",
"com.unity.2d.psdimporter": "4.3.0",
"com.unity.2d.animation": "7.0.9",
"com.unity.2d.pixel-perfect": "5.0.3",
"com.unity.2d.psdimporter": "6.0.7",
"com.unity.2d.sprite": "1.0.0",
"com.unity.2d.spriteshape": "5.3.0",
"com.unity.2d.spriteshape": "7.0.6",
"com.unity.2d.tilemap": "1.0.0",
"com.unity.collab-proxy": "1.15.15",
"com.unity.ide.rider": "2.0.7",
"com.unity.ide.visualstudio": "2.0.14",
"com.unity.collab-proxy": "2.0.1",
"com.unity.ide.rider": "3.0.18",
"com.unity.ide.visualstudio": "2.0.17",
"com.unity.ide.vscode": "1.2.5",
"com.unity.scriptablebuildpipeline": "1.19.6",
"com.unity.scriptablebuildpipeline": "1.20.1",
"com.unity.test-framework": "1.1.31",
"com.unity.textmeshpro": "3.0.6",
"com.unity.timeline": "1.4.8",
"com.unity.timeline": "1.6.4",
"com.unity.ugui": "1.0.0",
"com.unity.modules.ai": "1.0.0",
"com.unity.modules.androidjni": "1.0.0",
@@ -58,4 +58,4 @@
]
}
]
}
}

View File

@@ -8,12 +8,11 @@
"url": "https://package.openupm.cn"
},
"com.unity.2d.animation": {
"version": "5.2.0",
"version": "7.0.9",
"depth": 0,
"source": "registry",
"dependencies": {
"com.unity.2d.common": "4.2.0",
"com.unity.mathematics": "1.1.0",
"com.unity.2d.common": "6.0.6",
"com.unity.2d.sprite": "1.0.0",
"com.unity.modules.animation": "1.0.0",
"com.unity.modules.uielements": "1.0.0"
@@ -21,36 +20,38 @@
"url": "https://packages.unity.cn"
},
"com.unity.2d.common": {
"version": "4.2.0",
"version": "6.0.6",
"depth": 1,
"source": "registry",
"dependencies": {
"com.unity.2d.sprite": "1.0.0",
"com.unity.modules.uielements": "1.0.0"
"com.unity.mathematics": "1.1.0",
"com.unity.modules.uielements": "1.0.0",
"com.unity.burst": "1.5.1"
},
"url": "https://packages.unity.cn"
},
"com.unity.2d.path": {
"version": "4.0.2",
"version": "5.0.2",
"depth": 1,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.cn"
},
"com.unity.2d.pixel-perfect": {
"version": "4.0.1",
"version": "5.0.3",
"depth": 0,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.cn"
},
"com.unity.2d.psdimporter": {
"version": "4.3.0",
"version": "6.0.7",
"depth": 0,
"source": "registry",
"dependencies": {
"com.unity.2d.common": "4.2.0",
"com.unity.2d.animation": "5.2.0",
"com.unity.2d.animation": "7.0.9",
"com.unity.2d.common": "6.0.6",
"com.unity.2d.sprite": "1.0.0"
},
"url": "https://packages.unity.cn"
@@ -62,13 +63,13 @@
"dependencies": {}
},
"com.unity.2d.spriteshape": {
"version": "5.3.0",
"version": "7.0.6",
"depth": 0,
"source": "registry",
"dependencies": {
"com.unity.mathematics": "1.1.0",
"com.unity.2d.common": "4.2.0",
"com.unity.2d.path": "4.0.2",
"com.unity.2d.common": "6.0.4",
"com.unity.2d.path": "5.0.2",
"com.unity.modules.physics2d": "1.0.0"
},
"url": "https://packages.unity.cn"
@@ -79,15 +80,22 @@
"source": "builtin",
"dependencies": {}
},
"com.unity.collab-proxy": {
"version": "1.15.15",
"depth": 0,
"com.unity.burst": {
"version": "1.6.6",
"depth": 2,
"source": "registry",
"dependencies": {
"com.unity.services.core": "1.0.1"
"com.unity.mathematics": "1.2.1"
},
"url": "https://packages.unity.cn"
},
"com.unity.collab-proxy": {
"version": "2.0.1",
"depth": 0,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.cn"
},
"com.unity.ext.nunit": {
"version": "1.0.6",
"depth": 1,
@@ -96,16 +104,16 @@
"url": "https://packages.unity.cn"
},
"com.unity.ide.rider": {
"version": "2.0.7",
"version": "3.0.18",
"depth": 0,
"source": "registry",
"dependencies": {
"com.unity.test-framework": "1.1.1"
"com.unity.ext.nunit": "1.0.6"
},
"url": "https://packages.unity.cn"
},
"com.unity.ide.visualstudio": {
"version": "2.0.14",
"version": "2.0.17",
"depth": 0,
"source": "registry",
"dependencies": {
@@ -121,28 +129,19 @@
"url": "https://packages.unity.cn"
},
"com.unity.mathematics": {
"version": "1.1.0",
"version": "1.2.6",
"depth": 1,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.cn"
},
"com.unity.scriptablebuildpipeline": {
"version": "1.19.6",
"version": "1.20.1",
"depth": 0,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.cn"
},
"com.unity.services.core": {
"version": "1.0.1",
"depth": 1,
"source": "registry",
"dependencies": {
"com.unity.modules.unitywebrequest": "1.0.0"
},
"url": "https://packages.unity.cn"
},
"com.unity.test-framework": {
"version": "1.1.31",
"depth": 0,
@@ -164,7 +163,7 @@
"url": "https://packages.unity.cn"
},
"com.unity.timeline": {
"version": "1.4.8",
"version": "1.6.4",
"depth": 0,
"source": "registry",
"dependencies": {

View File

@@ -0,0 +1,17 @@
{
"MonoBehaviour": {
"Version": 4,
"EnableBurstCompilation": true,
"EnableOptimisations": true,
"EnableSafetyChecks": false,
"EnableDebugInAllBuilds": false,
"UsePlatformSDKLinker": false,
"CpuMinTargetX32": 0,
"CpuMaxTargetX32": 0,
"CpuMinTargetX64": 0,
"CpuMaxTargetX64": 0,
"CpuTargetsX32": 6,
"CpuTargetsX64": 72,
"OptimizeFor": 0
}
}

View File

@@ -0,0 +1,6 @@
{
"MonoBehaviour": {
"Version": 4,
"DisabledWarnings": ""
}
}

View File

@@ -18,9 +18,9 @@ MonoBehaviour:
il2cppPlusRepoURL: https://gitee.com/focus-creative-games/il2cpp_plus
hotUpdateAssemblyDefinitions:
- {fileID: 5897886265953266890, guid: 08c3762f54316454ca6b6fbcb22b40e5, type: 3}
- {fileID: 5897886265953266890, guid: acd6baa97ba40d3478c29cd9c76ff9e3, type: 3}
- {fileID: 5897886265953266890, guid: a90b2d3377c5e4a4db95cc44fb82045e, type: 3}
- {fileID: 5897886265953266890, guid: 641632c4f8079b94f963b5284d859a12, type: 3}
- {fileID: 5897886265953266890, guid: acd6baa97ba40d3478c29cd9c76ff9e3, type: 3}
hotUpdateAssemblies: []
preserveHotUpdateAssemblies: []
hotUpdateDllCompileOutputRootDir: HybridCLRData/HotUpdateDlls

View File

@@ -0,0 +1,35 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!387306366 &1
MemorySettings:
m_ObjectHideFlags: 0
m_EditorMemorySettings:
m_MainAllocatorBlockSize: -1
m_ThreadAllocatorBlockSize: -1
m_MainGfxBlockSize: -1
m_ThreadGfxBlockSize: -1
m_CacheBlockSize: -1
m_TypetreeBlockSize: -1
m_ProfilerBlockSize: -1
m_ProfilerEditorBlockSize: -1
m_BucketAllocatorGranularity: -1
m_BucketAllocatorBucketsCount: -1
m_BucketAllocatorBlockSize: -1
m_BucketAllocatorBlockCount: -1
m_ProfilerBucketAllocatorGranularity: -1
m_ProfilerBucketAllocatorBucketsCount: -1
m_ProfilerBucketAllocatorBlockSize: -1
m_ProfilerBucketAllocatorBlockCount: -1
m_TempAllocatorSizeMain: -1
m_JobTempAllocatorBlockSize: -1
m_BackgroundJobTempAllocatorBlockSize: -1
m_JobTempAllocatorReducedBlockSize: -1
m_TempAllocatorSizeGIBakingWorker: -1
m_TempAllocatorSizeNavMeshWorker: -1
m_TempAllocatorSizeAudioWorker: -1
m_TempAllocatorSizeCloudWorker: -1
m_TempAllocatorSizeGfx: -1
m_TempAllocatorSizeJobWorker: -1
m_TempAllocatorSizeBackgroundWorker: -1
m_TempAllocatorSizePreloadManager: -1
m_PlatformMemorySettings: {}

View File

@@ -12,10 +12,11 @@ MonoBehaviour:
m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_EnablePreviewPackages: 1
m_EnablePreReleasePackages: 0
m_EnablePackageDependencies: 1
m_AdvancedSettingsExpanded: 1
m_ScopedRegistriesSettingsExpanded: 1
m_SeeAllPackageVersions: 0
oneTimeWarningShown: 1
m_Registries:
- m_Id: main
@@ -24,28 +25,20 @@ MonoBehaviour:
m_Scopes: []
m_IsDefault: 1
m_Capabilities: 7
- m_Id: scoped:hybridclr_unity
m_ConfigSource: 0
- m_Id: scoped:project:hybridclr_unity
m_Name: hybridclr_unity
m_Url: https://package.openupm.cn
m_Scopes:
- com.focus-creative-games.hybridclr_unity
m_IsDefault: 0
m_Capabilities: 0
m_UserSelectedRegistryName:
m_ConfigSource: 4
m_UserSelectedRegistryName: hybridclr_unity
m_UserAddingNewScopedRegistry: 0
m_RegistryInfoDraft:
m_ErrorMessage:
m_Original:
m_Id: scoped:hybridclr_unity
m_Name: hybridclr_unity
m_Url: https://package.openupm.cn
m_Scopes:
- com.focus-creative-games.hybridclr_unity
m_IsDefault: 0
m_Capabilities: 0
m_Modified: 0
m_Name: hybridclr_unity
m_Url: https://package.openupm.cn
m_Scopes:
- com.focus-creative-games.hybridclr_unity
m_SelectedScopeIndex: 0
m_ErrorMessage:
m_UserModificationsInstanceId: -832
m_OriginalInstanceId: -836
m_LoadAssets: 0

View File

@@ -3,7 +3,7 @@
--- !u!129 &1
PlayerSettings:
m_ObjectHideFlags: 0
serializedVersion: 22
serializedVersion: 24
productGUID: 31414a79c236a5c45a5b9a6d85d8615c
AndroidProfiler: 0
AndroidFilterTouchesWhenObscured: 0
@@ -156,11 +156,13 @@ PlayerSettings:
enable360StereoCapture: 0
isWsaHolographicRemotingEnabled: 0
enableFrameTimingStats: 0
enableOpenGLProfilerGPURecorders: 1
useHDRDisplay: 0
D3DHDRBitDepth: 0
m_ColorGamuts: 00000000
targetPixelDensity: 30
resolutionScalingMode: 0
resetResolutionOnWindowResize: 0
androidSupportedAspectRatio: 1
androidMaxAspectRatio: 2.1
applicationIdentifier:
@@ -173,7 +175,7 @@ PlayerSettings:
tvOS: 0
overrideDefaultApplicationIdentifier: 1
AndroidBundleVersionCode: 1
AndroidMinSdkVersion: 19
AndroidMinSdkVersion: 22
AndroidTargetSdkVersion: 0
AndroidPreferredInstallLocation: 1
aotOptions:
@@ -229,6 +231,7 @@ PlayerSettings:
iOSLaunchScreeniPadCustomStoryboardPath:
iOSDeviceRequirements: []
iOSURLSchemes: []
macOSURLSchemes: []
iOSBackgroundModes: 0
iOSMetalForceHardShadows: 0
metalEditorSupport: 1
@@ -374,7 +377,7 @@ PlayerSettings:
m_Kind: 1
m_SubKind:
m_BuildTargetBatching: []
m_BuildTargetSecurityBuild: []
m_BuildTargetShaderSettings: []
m_BuildTargetGraphicsJobs:
- m_BuildTarget: MacStandaloneSupport
m_GraphicsJobs: 0
@@ -406,11 +409,13 @@ PlayerSettings:
m_BuildTargetGraphicsAPIs:
- m_BuildTarget: AndroidPlayer
m_APIs: 150000000b000000
m_Automatic: 0
m_Automatic: 1
- m_BuildTarget: iOSSupport
m_APIs: 10000000
m_Automatic: 1
m_BuildTargetVRSettings: []
m_DefaultShaderChunkSizeInMB: 16
m_DefaultShaderChunkCount: 0
openGLRequireES31: 0
openGLRequireES31AEP: 0
openGLRequireES32: 0
@@ -422,6 +427,7 @@ PlayerSettings:
m_BuildTargetGroupLightmapEncodingQuality: []
m_BuildTargetGroupLightmapSettings: []
m_BuildTargetNormalMapEncoding: []
m_BuildTargetDefaultTextureCompressionFormat: []
playModeTestRunnerEnabled: 0
runPlayModeTestAsEditModeTest: 0
actionOnDotNetUnhandledException: 1
@@ -431,7 +437,7 @@ PlayerSettings:
cameraUsageDescription: "\u662F\u5426\u5141\u8BB8\u6253\u5F00\u6444\u50CF\u5934"
locationUsageDescription: "\u662F\u5426\u5141\u8BB8\u8BBF\u95EE\u5B9A\u4F4D"
microphoneUsageDescription: "\u662F\u5426\u5141\u8BB8\u8BBF\u95EE\u7535\u8BDD"
bluetoothUsageDescription:
bluetoothUsageDescription: "\u662F\u5426\u5141\u8BB8\u8BBF\u95EE\u84DD\u7259"
switchNMETAOverride:
switchNetLibKey:
switchSocketMemoryPoolSize: 6144
@@ -440,6 +446,7 @@ PlayerSettings:
switchScreenResolutionBehavior: 2
switchUseCPUProfiler: 0
switchUseGOLDLinker: 0
switchLTOSetting: 0
switchApplicationID: 0x01004b9000490000
switchNSODependencies:
switchTitleNames_0:
@@ -515,7 +522,6 @@ PlayerSettings:
switchReleaseVersion: 0
switchDisplayVersion: 1.0.0
switchStartupUserAccount: 0
switchTouchScreenUsage: 0
switchSupportedLanguagesMask: 0
switchLogoType: 0
switchApplicationErrorCodeCategory:
@@ -557,6 +563,7 @@ PlayerSettings:
switchNativeFsCacheSize: 32
switchIsHoldTypeHorizontal: 0
switchSupportedNpadCount: 8
switchEnableTouchScreen: 1
switchSocketConfigEnabled: 0
switchTcpInitialSendBufferSize: 32
switchTcpInitialReceiveBufferSize: 64
@@ -569,6 +576,7 @@ PlayerSettings:
switchNetworkInterfaceManagerInitializeEnabled: 1
switchPlayerConnectionEnabled: 1
switchUseNewStyleFilepaths: 0
switchUseLegacyFmodPriorities: 1
switchUseMicroSleepForYield: 1
switchEnableRamDiskSupport: 0
switchMicroSleepForYieldTime: 25
@@ -668,12 +676,13 @@ PlayerSettings:
webGLLinkerTarget: 1
webGLThreadsSupport: 0
webGLDecompressionFallback: 0
webGLPowerPreference: 2
scriptingDefineSymbols:
1: ENABLE_LOG
4: ENABLE_LOG
7: ENABLE_LOG
13: ENABLE_LOG
14: ENABLE_LOG
Android: ENABLE_LOG
Standalone: ENABLE_LOG
WebGL: ENABLE_LOG
Windows Store Apps: ENABLE_LOG
iPhone: ENABLE_LOG
additionalCompilerArguments: {}
platformArchitecture: {}
scriptingBackend:
@@ -685,8 +694,8 @@ PlayerSettings:
suppressCommonWarnings: 1
allowUnsafeCode: 1
useDeterministicCompilation: 1
useReferenceAssemblies: 1
enableRoslynAnalyzers: 1
selectedPlatform: 0
additionalIl2CppArgs:
scriptingRuntimeVersion: 1
gcIncremental: 0
@@ -766,6 +775,7 @@ PlayerSettings:
m_VersionName:
apiCompatibilityLevel: 6
activeInputHandler: 0
windowsGamepadBackendHint: 0
cloudProjectId: 323deeed-4aa5-498b-9105-0efdb8cce118
framebufferDepthMemorylessMode: 0
qualitySettingsNames: []
@@ -773,4 +783,6 @@ PlayerSettings:
organizationId:
cloudEnabled: 0
legacyClampBlendShapeWeights: 0
playerDataPath:
forceSRGBBlit: 1
virtualTexturingSupportEnabled: 0

View File

@@ -1,2 +1,2 @@
m_EditorVersion: 2020.3.33f1c2
m_EditorVersionWithRevision: 2020.3.33f1c2 (8e753a737e7b)
m_EditorVersion: 2021.3.20f1c1
m_EditorVersionWithRevision: 2021.3.20f1c1 (7cf0fbd73406)

View File

@@ -0,0 +1,167 @@
{
"templatePinStates": [],
"dependencyTypeInfos": [
{
"userAdded": false,
"type": "UnityEngine.AnimationClip",
"ignore": false,
"defaultInstantiationMode": 0,
"supportsModification": true
},
{
"userAdded": false,
"type": "UnityEditor.Animations.AnimatorController",
"ignore": false,
"defaultInstantiationMode": 0,
"supportsModification": true
},
{
"userAdded": false,
"type": "UnityEngine.AnimatorOverrideController",
"ignore": false,
"defaultInstantiationMode": 0,
"supportsModification": true
},
{
"userAdded": false,
"type": "UnityEditor.Audio.AudioMixerController",
"ignore": false,
"defaultInstantiationMode": 0,
"supportsModification": true
},
{
"userAdded": false,
"type": "UnityEngine.ComputeShader",
"ignore": true,
"defaultInstantiationMode": 1,
"supportsModification": true
},
{
"userAdded": false,
"type": "UnityEngine.Cubemap",
"ignore": false,
"defaultInstantiationMode": 0,
"supportsModification": true
},
{
"userAdded": false,
"type": "UnityEngine.GameObject",
"ignore": false,
"defaultInstantiationMode": 0,
"supportsModification": true
},
{
"userAdded": false,
"type": "UnityEditor.LightingDataAsset",
"ignore": false,
"defaultInstantiationMode": 0,
"supportsModification": false
},
{
"userAdded": false,
"type": "UnityEngine.LightingSettings",
"ignore": false,
"defaultInstantiationMode": 0,
"supportsModification": true
},
{
"userAdded": false,
"type": "UnityEngine.Material",
"ignore": false,
"defaultInstantiationMode": 0,
"supportsModification": true
},
{
"userAdded": false,
"type": "UnityEditor.MonoScript",
"ignore": true,
"defaultInstantiationMode": 1,
"supportsModification": true
},
{
"userAdded": false,
"type": "UnityEngine.PhysicMaterial",
"ignore": false,
"defaultInstantiationMode": 0,
"supportsModification": true
},
{
"userAdded": false,
"type": "UnityEngine.PhysicsMaterial2D",
"ignore": false,
"defaultInstantiationMode": 0,
"supportsModification": true
},
{
"userAdded": false,
"type": "UnityEngine.Rendering.PostProcessing.PostProcessProfile",
"ignore": false,
"defaultInstantiationMode": 0,
"supportsModification": true
},
{
"userAdded": false,
"type": "UnityEngine.Rendering.PostProcessing.PostProcessResources",
"ignore": false,
"defaultInstantiationMode": 0,
"supportsModification": true
},
{
"userAdded": false,
"type": "UnityEngine.Rendering.VolumeProfile",
"ignore": false,
"defaultInstantiationMode": 0,
"supportsModification": true
},
{
"userAdded": false,
"type": "UnityEditor.SceneAsset",
"ignore": false,
"defaultInstantiationMode": 0,
"supportsModification": false
},
{
"userAdded": false,
"type": "UnityEngine.Shader",
"ignore": true,
"defaultInstantiationMode": 1,
"supportsModification": true
},
{
"userAdded": false,
"type": "UnityEngine.ShaderVariantCollection",
"ignore": true,
"defaultInstantiationMode": 1,
"supportsModification": true
},
{
"userAdded": false,
"type": "UnityEngine.Texture",
"ignore": false,
"defaultInstantiationMode": 0,
"supportsModification": true
},
{
"userAdded": false,
"type": "UnityEngine.Texture2D",
"ignore": false,
"defaultInstantiationMode": 0,
"supportsModification": true
},
{
"userAdded": false,
"type": "UnityEngine.Timeline.TimelineAsset",
"ignore": false,
"defaultInstantiationMode": 0,
"supportsModification": true
}
],
"defaultDependencyTypeInfo": {
"userAdded": false,
"type": "<default_scene_template_dependencies>",
"ignore": false,
"defaultInstantiationMode": 1,
"supportsModification": true
},
"newSceneOverride": 0
}

View File

@@ -13,3 +13,4 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
assetDefaultFramerate: 60
m_DefaultFrameRate: 60

View File

View File

@@ -5,33 +5,36 @@ EditorUserSettings:
m_ObjectHideFlags: 0
serializedVersion: 4
m_ConfigSettings:
RecentlyUsedScenePath-0:
value: 2242470311464677080f021607265a1e5932002b21382a353e662e30e7ee312badc033e7e2283e300a0be22c083b3436bc1f0702e212
RecentlyUsedSceneGuid-0:
value: 0557570353005959590f5f7b48700744174f417c7e717165797b1835b2b96d6a
flags: 0
RecentlyUsedScenePath-1:
RecentlyUsedScenePath-0:
value: 2242470311464677080f021607265a1e5932002b21382a353e662e30e7ee312badd333faf333313b032eea3b053d181aea1e471ef8021e12
flags: 0
RecentlyUsedScenePath-2:
RecentlyUsedScenePath-1:
value: 2242470311464677080f021607265a1e5932002b21382a353e662e30e7ee312badc033e7e2283e301c03fc350a393526e20f1a45e305031f08
flags: 0
RecentlyUsedScenePath-3:
RecentlyUsedScenePath-2:
value: 2242470311464677080f021607265a1e5932002b21382a353e663c21e1e83d2ee7e379dde2292b353705dd350337053dfd0e1028c5451f05181ae4
flags: 0
RecentlyUsedScenePath-4:
RecentlyUsedScenePath-3:
value: 2242470311464677080f021607265a1e5932002b21382a353e663c21e1e83d2ee7e379c6eb3e18091027f73d092e0d3ae1293a45e305031f08
flags: 0
RecentlyUsedScenePath-5:
RecentlyUsedScenePath-4:
value: 2242470311464677080f021607265a1e5932002b21382a353e662e30e7ee312badd737fdef092f30300cea190a3a0d3ae119471ef8021e12
flags: 0
RecentlyUsedScenePath-6:
RecentlyUsedScenePath-5:
value: 2242470311464677080f021607265a1e5932002b21382a353e662e30e7ee312badcb39eee81936323c0fee280d3d4f2afc031d12
flags: 0
RecentlyUsedScenePath-7:
RecentlyUsedScenePath-6:
value: 22424703114646680e0b0227036c5e020204553f256522353e201a3dacf53a31f6fe
flags: 0
RecentlyUsedScenePath-8:
RecentlyUsedScenePath-7:
value: 224247031146467a2c3a092f006c4b151b07563f22213229
flags: 0
RecentlyUsedScenePath-8:
value: 224247031146467a2c3a092f006c6b15050357012f3812353e3d5218e1f0003df1f378fce9332b25
flags: 0
RecentlyUsedScenePath-9:
value: 22424703114646680e0b0227036c52111f19563f22213229
flags: 0
@@ -43,9 +46,13 @@ EditorUserSettings:
m_VCDebugCmd: 0
m_VCDebugOut: 0
m_SemanticMergeMode: 2
m_DesiredImportWorkerCount: 1
m_StandbyImportWorkerCount: 1
m_IdleImportWorkerShutdownDelay: 60000
m_VCShowFailedCheckout: 1
m_VCOverwriteFailedCheckoutAssets: 1
m_VCProjectOverlayIcons: 1
m_VCHierarchyOverlayIcons: 1
m_VCOtherOverlayIcons: 1
m_VCAllowAsyncUpdate: 1
m_ArtifactGarbageCollection: 1