浏览代码

Merge branch 'master' of http://192.168.123.2:3000/ck/XiuXianGame

李桃 2 天之前
父节点
当前提交
2d9178b7d7
共有 64 个文件被更改,包括 3300 次插入362 次删除
  1. 9 78
      Assets/Art/Environment/fukong dao2.prefab
  2. 9 66
      Assets/Art/Environment/fukong dao3.prefab
  3. 9 78
      Assets/Art/Environment/fukong dao4.prefab
  4. 18 11
      Assets/New Material.mat
  5. 5 0
      Assets/Plugins/Android.meta
  6. 二进制
      Assets/Plugins/Android/Crasheye.jar
  7. 32 0
      Assets/Plugins/Android/Crasheye.jar.meta
  8. 503 0
      Assets/Plugins/Android/CrasheyeForAndroid.cs
  9. 12 0
      Assets/Plugins/Android/CrasheyeForAndroid.cs.meta
  10. 0 0
      Assets/Plugins/Android/MainActivity.java
  11. 37 0
      Assets/Plugins/Android/MainActivity.java.meta
  12. 二进制
      Assets/Plugins/Android/MonoCrasheye.jar
  13. 32 0
      Assets/Plugins/Android/MonoCrasheye.jar.meta
  14. 8 0
      Assets/Plugins/Android/libs.meta
  15. 8 0
      Assets/Plugins/Android/libs/arm64-v8a.meta
  16. 二进制
      Assets/Plugins/Android/libs/arm64-v8a/libCrasheyeNDK.so
  17. 7 0
      Assets/Plugins/Android/libs/arm64-v8a/libCrasheyeNDK.so.meta
  18. 8 0
      Assets/Plugins/Android/libs/armeabi-v7a.meta
  19. 二进制
      Assets/Plugins/Android/libs/armeabi-v7a/libCrasheyeNDK.so
  20. 7 0
      Assets/Plugins/Android/libs/armeabi-v7a/libCrasheyeNDK.so.meta
  21. 8 0
      Assets/Plugins/Android/libs/armeabi.meta
  22. 二进制
      Assets/Plugins/Android/libs/armeabi/libCrasheyeNDK.so
  23. 32 0
      Assets/Plugins/Android/libs/armeabi/libCrasheyeNDK.so.meta
  24. 8 0
      Assets/Plugins/Android/libs/x86.meta
  25. 二进制
      Assets/Plugins/Android/libs/x86/libCrasheyeNDK.so
  26. 33 0
      Assets/Plugins/Android/libs/x86/libCrasheyeNDK.so.meta
  27. 8 0
      Assets/Plugins/Android/libs/x86_64.meta
  28. 二进制
      Assets/Plugins/Android/libs/x86_64/libCrasheyeNDK.so
  29. 33 0
      Assets/Plugins/Android/libs/x86_64/libCrasheyeNDK.so.meta
  30. 729 0
      Assets/Plugins/Crasheye.cs
  31. 8 0
      Assets/Plugins/Crasheye.cs.meta
  32. 二进制
      Assets/Plugins/CrasheyeLib.dll
  33. 33 0
      Assets/Plugins/CrasheyeLib.dll.meta
  34. 二进制
      Assets/Plugins/LibForAndroid.dll
  35. 33 0
      Assets/Plugins/LibForAndroid.dll.meta
  36. 二进制
      Assets/Plugins/LibForiOS.dll
  37. 33 0
      Assets/Plugins/LibForiOS.dll.meta
  38. 5 0
      Assets/Plugins/iOS.meta
  39. 113 0
      Assets/Plugins/iOS/Crasheye.h
  40. 33 0
      Assets/Plugins/iOS/Crasheye.h.meta
  41. 336 0
      Assets/Plugins/iOS/CrasheyeForIOS.cs
  42. 11 0
      Assets/Plugins/iOS/CrasheyeForIOS.cs.meta
  43. 二进制
      Assets/Plugins/iOS/libCrasheye.a
  44. 33 0
      Assets/Plugins/iOS/libCrasheye.a.meta
  45. 8 0
      Assets/Plugins/x86_64.meta
  46. 二进制
      Assets/Plugins/x86_64/Crasheye64.dll
  47. 70 0
      Assets/Plugins/x86_64/Crasheye64.dll.meta
  48. 二进制
      Assets/Plugins/x86_64/CrasheyeReport64.exe
  49. 7 0
      Assets/Plugins/x86_64/CrasheyeReport64.exe.meta
  50. 388 0
      Assets/Plugins/x86_64/DumpForPC.cs
  51. 11 0
      Assets/Plugins/x86_64/DumpForPC.cs.meta
  52. 8 0
      Assets/Plugins/x86_64/include.meta
  53. 478 0
      Assets/Plugins/x86_64/include/Crasheye.hpp
  54. 7 0
      Assets/Plugins/x86_64/include/Crasheye.hpp.meta
  55. 113 113
      Assets/Res/Config/SkillConfig.json
  56. 1 1
      Assets/Resources/Shader/Shader Graphs_ShengShiShader.mat
  57. 1 1
      Assets/Scripts/GameData/ExcelConfig/SkillConfig.cs
  58. 1 1
      Assets/Scripts/GameData/ExcelConfig/SkillConstant.cs
  59. 1 1
      Assets/Scripts/GameData/ExcelConfig/SkillPowerupConfig.cs
  60. 2 2
      Assets/Scripts/GameLogic/Combat/CombatTool/SceneTool/SceneCJ2MonoConfig.cs
  61. 11 10
      Assets/Scripts/GameUI/UI/CombatPanel/HeroHpWidget.cs
  62. 0 0
      Assets/StreamingAssets/assetConfig.txt
  63. 二进制
      Excel2Json/Excel/HeroModel.xlsx
  64. 二进制
      Excel2Json/Excel/skill.xlsx

+ 9 - 78
Assets/Art/Environment/fukong dao2.prefab

@@ -36,8 +36,8 @@ Transform:
 --- !u!1 &3515542236926725537
 GameObject:
   m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 3729367683394581911, guid: 77e0e1e49e343a4488ae529b0fecc739, type: 3}
-  m_PrefabInstance: {fileID: 1922033871240831382}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   serializedVersion: 7
   m_Component:
@@ -55,13 +55,13 @@ GameObject:
 --- !u!4 &2635808446306131277
 Transform:
   m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 4074262922870550317, guid: 77e0e1e49e343a4488ae529b0fecc739, type: 3}
-  m_PrefabInstance: {fileID: 1922033871240831382}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 3515542236926725537}
   serializedVersion: 2
   m_LocalRotation: {x: -0.2571829, y: 0.65867823, z: 0.65867823, w: 0.2571829}
-  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalPosition: {x: 0, y: -3.37, z: 0}
   m_LocalScale: {x: 3.2728, y: 3.2728, z: 3.2728}
   m_ConstrainProportionsScale: 0
   m_Children: []
@@ -70,16 +70,16 @@ Transform:
 --- !u!33 &7422373066537718526
 MeshFilter:
   m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 1091396269776134280, guid: 77e0e1e49e343a4488ae529b0fecc739, type: 3}
-  m_PrefabInstance: {fileID: 1922033871240831382}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 3515542236926725537}
   m_Mesh: {fileID: 3223647848749318582, guid: ebe13b67332437f478e3ba635a061233, type: 3}
 --- !u!23 &275904094642747149
 MeshRenderer:
   m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 2936800325524362306, guid: 77e0e1e49e343a4488ae529b0fecc739, type: 3}
-  m_PrefabInstance: {fileID: 1922033871240831382}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 3515542236926725537}
   m_Enabled: 1
@@ -120,72 +120,3 @@ MeshRenderer:
   m_SortingLayer: 0
   m_SortingOrder: 0
   m_AdditionalVertexStreams: {fileID: 0}
---- !u!1001 &1922033871240831382
-PrefabInstance:
-  m_ObjectHideFlags: 0
-  serializedVersion: 2
-  m_Modification:
-    serializedVersion: 3
-    m_TransformParent: {fileID: 6531860447979389797}
-    m_Modifications:
-    - target: {fileID: 0}
-      propertyPath: m_Name
-      value: fukong dao2 (2)
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalScale.x
-      value: 3.2728
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalScale.y
-      value: 3.2728
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalScale.z
-      value: 3.2728
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalPosition.x
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalPosition.y
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalPosition.z
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalRotation.w
-      value: 0.2571829
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalRotation.x
-      value: -0.2571829
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalRotation.y
-      value: 0.65867823
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalRotation.z
-      value: 0.65867823
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalEulerAnglesHint.x
-      value: -90
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalEulerAnglesHint.y
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalEulerAnglesHint.z
-      value: 137.343
-      objectReference: {fileID: 0}
-    m_RemovedComponents: []
-    m_RemovedGameObjects: []
-    m_AddedGameObjects: []
-    m_AddedComponents: []
-  m_SourcePrefab: {fileID: 0}

+ 9 - 66
Assets/Art/Environment/fukong dao3.prefab

@@ -3,8 +3,8 @@
 --- !u!1 &765340368279689263
 GameObject:
   m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 3905164629616407330, guid: 0685c296e9c07cd498a8a553f623bebe, type: 3}
-  m_PrefabInstance: {fileID: 8029598009332787400}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   serializedVersion: 7
   m_Component:
@@ -22,13 +22,13 @@ GameObject:
 --- !u!4 &4947522758557136696
 Transform:
   m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 4429921519942298008, guid: 0685c296e9c07cd498a8a553f623bebe, type: 3}
-  m_PrefabInstance: {fileID: 8029598009332787400}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 765340368279689263}
   serializedVersion: 2
   m_LocalRotation: {x: -0.24617667, y: -0.66287035, z: -0.66287035, w: 0.24617667}
-  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalPosition: {x: 0, y: -2.67, z: 0}
   m_LocalScale: {x: 4, y: 4, z: 4}
   m_ConstrainProportionsScale: 0
   m_Children: []
@@ -37,16 +37,16 @@ Transform:
 --- !u!33 &3445450105515365864
 MeshFilter:
   m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 780782669881140797, guid: 0685c296e9c07cd498a8a553f623bebe, type: 3}
-  m_PrefabInstance: {fileID: 8029598009332787400}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 765340368279689263}
   m_Mesh: {fileID: -6909115843317292050, guid: deaf9329040a1614a8e54df31a46a5de, type: 3}
 --- !u!23 &3727334830803835583
 MeshRenderer:
   m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 3256404872649183991, guid: 0685c296e9c07cd498a8a553f623bebe, type: 3}
-  m_PrefabInstance: {fileID: 8029598009332787400}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 765340368279689263}
   m_Enabled: 1
@@ -120,60 +120,3 @@ Transform:
   - {fileID: 4947522758557136696}
   m_Father: {fileID: 0}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1001 &8029598009332787400
-PrefabInstance:
-  m_ObjectHideFlags: 0
-  serializedVersion: 2
-  m_Modification:
-    serializedVersion: 3
-    m_TransformParent: {fileID: 4160862028817849242}
-    m_Modifications:
-    - target: {fileID: 0}
-      propertyPath: m_Name
-      value: fukong dao3
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalPosition.x
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalPosition.y
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalPosition.z
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalRotation.w
-      value: 0.24617667
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalRotation.x
-      value: -0.24617667
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalRotation.y
-      value: -0.66287035
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalRotation.z
-      value: -0.66287035
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalEulerAnglesHint.x
-      value: -90
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalEulerAnglesHint.y
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalEulerAnglesHint.z
-      value: -139.252
-      objectReference: {fileID: 0}
-    m_RemovedComponents: []
-    m_RemovedGameObjects: []
-    m_AddedGameObjects: []
-    m_AddedComponents: []
-  m_SourcePrefab: {fileID: 0}

+ 9 - 78
Assets/Art/Environment/fukong dao4.prefab

@@ -3,8 +3,8 @@
 --- !u!1 &1224579573862923457
 GameObject:
   m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 3703108956536512397, guid: cdcc1e72df788f34092ee9d092668bbf, type: 3}
-  m_PrefabInstance: {fileID: 8365091946876407639}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   serializedVersion: 7
   m_Component:
@@ -22,13 +22,13 @@ GameObject:
 --- !u!4 &6140134704763648785
 Transform:
   m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 4048671560039220535, guid: cdcc1e72df788f34092ee9d092668bbf, type: 3}
-  m_PrefabInstance: {fileID: 8365091946876407639}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1224579573862923457}
   serializedVersion: 2
   m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068}
-  m_LocalPosition: {x: 0, y: 4.2, z: 0}
+  m_LocalPosition: {x: 0, y: 2.66, z: 0}
   m_LocalScale: {x: 6.3410997, y: 6.3410997, z: 6.3410997}
   m_ConstrainProportionsScale: 0
   m_Children: []
@@ -37,16 +37,16 @@ Transform:
 --- !u!33 &739692015363110405
 MeshFilter:
   m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 1116926517609384594, guid: cdcc1e72df788f34092ee9d092668bbf, type: 3}
-  m_PrefabInstance: {fileID: 8365091946876407639}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1224579573862923457}
   m_Mesh: {fileID: 6153351672944578211, guid: 63677335207fa85458d422635ffac560, type: 3}
 --- !u!23 &7936720611081973566
 MeshRenderer:
   m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 2910708037704662616, guid: cdcc1e72df788f34092ee9d092668bbf, type: 3}
-  m_PrefabInstance: {fileID: 8365091946876407639}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1224579573862923457}
   m_Enabled: 1
@@ -120,72 +120,3 @@ Transform:
   - {fileID: 6140134704763648785}
   m_Father: {fileID: 0}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1001 &8365091946876407639
-PrefabInstance:
-  m_ObjectHideFlags: 0
-  serializedVersion: 2
-  m_Modification:
-    serializedVersion: 3
-    m_TransformParent: {fileID: 411656382419835695}
-    m_Modifications:
-    - target: {fileID: 0}
-      propertyPath: m_Name
-      value: fukong dao4
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalScale.x
-      value: 6.3410997
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalScale.y
-      value: 6.3410997
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalScale.z
-      value: 6.3410997
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalPosition.x
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalPosition.y
-      value: 4.2
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalPosition.z
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalRotation.w
-      value: 0.7071068
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalRotation.x
-      value: -0.7071068
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalRotation.y
-      value: -0
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalRotation.z
-      value: -0
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalEulerAnglesHint.x
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalEulerAnglesHint.y
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 0}
-      propertyPath: m_LocalEulerAnglesHint.z
-      value: 0
-      objectReference: {fileID: 0}
-    m_RemovedComponents: []
-    m_RemovedGameObjects: []
-    m_AddedGameObjects: []
-    m_AddedComponents: []
-  m_SourcePrefab: {fileID: 0}

+ 18 - 11
Assets/New Material.mat

@@ -8,18 +8,24 @@ Material:
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_Name: New Material
-  m_Shader: {fileID: 211, guid: 0000000000000000f000000000000000, type: 0}
+  m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
   m_Parent: {fileID: 0}
   m_ModifiedSerializedProperties: 0
-  m_ValidKeywords: []
+  m_ValidKeywords:
+  - _ALPHAPREMULTIPLY_ON
+  - _ALPHATEST_ON
+  - _EMISSION
+  - _SURFACE_TYPE_TRANSPARENT
   m_InvalidKeywords: []
   m_LightmapFlags: 0
   m_EnableInstancingVariants: 0
   m_DoubleSidedGI: 0
-  m_CustomRenderQueue: -1
-  stringTagMap: {}
+  m_CustomRenderQueue: 3000
+  stringTagMap:
+    RenderType: Transparent
   disabledShaderPasses:
-  - GRABPASS
+  - DepthOnly
+  - SHADOWCASTER
   m_LockedProperties: 
   m_SavedProperties:
     serializedVersion: 3
@@ -82,7 +88,7 @@ Material:
         m_Offset: {x: 0, y: 0}
     m_Ints: []
     m_Floats:
-    - _AlphaClip: 0
+    - _AlphaClip: 1
     - _AlphaToMask: 0
     - _Blend: 0
     - _BlendModePreserveSpecular: 1
@@ -102,8 +108,8 @@ Material:
     - _DistortionEnabled: 0
     - _DistortionStrength: 1
     - _DistortionStrengthScaled: 0
-    - _DstBlend: 0
-    - _DstBlendAlpha: 0
+    - _DstBlend: 10
+    - _DstBlendAlpha: 10
     - _EmissionEnabled: 0
     - _EnvironmentReflections: 1
     - _FlipbookMode: 0
@@ -112,7 +118,7 @@ Material:
     - _GlossyReflections: 0
     - _LightingEnabled: 0
     - _Metallic: 0
-    - _Mode: 0
+    - _Mode: 3
     - _OcclusionStrength: 1
     - _Parallax: 0.005
     - _QueueOffset: 0
@@ -125,9 +131,10 @@ Material:
     - _SpecularHighlights: 1
     - _SrcBlend: 1
     - _SrcBlendAlpha: 1
-    - _Surface: 0
+    - _Surface: 1
+    - _UVSec: 0
     - _WorkflowMode: 1
-    - _ZWrite: 1
+    - _ZWrite: 0
     m_Colors:
     - _BaseColor: {r: 1, g: 1, b: 1, a: 1}
     - _CameraFadeParams: {r: 0, g: Infinity, b: 0, a: 0}

+ 5 - 0
Assets/Plugins/Android.meta

@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: a5b4f30be6e55044d9386e6de7b73d50
+folderAsset: yes
+DefaultImporter:
+  userData: 

二进制
Assets/Plugins/Android/Crasheye.jar


+ 32 - 0
Assets/Plugins/Android/Crasheye.jar.meta

@@ -0,0 +1,32 @@
+fileFormatVersion: 2
+guid: c24337c59cc019b45b2b44399d5de6d3
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      Android: Android
+    second:
+      enabled: 1
+      settings: {}
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 0
+      settings:
+        DefaultValueInitialized: true
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 503 - 0
Assets/Plugins/Android/CrasheyeForAndroid.cs

@@ -0,0 +1,503 @@
+using UnityEngine;
+using System.Collections;
+#if !UNITY_STANDALONE_WIN
+using com.xsj.Crasheye.U3D;
+#endif
+using System;
+using System.Text;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+using System.IO;
+using System.Runtime.CompilerServices;
+
+public class CrasheyeForAndroid : MonoBehaviour
+{
+#if UNITY_ANDROID && !UNITY_STANDALONE_WIN
+
+    /// <summary> 通过JNI调用Java添加自定义数据
+    /// </summary>
+    /// <param name="key"></param>
+    /// <param name="value"></param>
+    [DllImport("CrasheyeNDK")]
+    private static extern void SetCustomData(string key, string value);
+
+    /// <summary> 通过JNI调用
+    /// </summary>
+    /// <param name="key"></param>
+    /// <returns></returns>
+    [DllImport("CrasheyeNDK")]
+    private static extern string GetCustomData(string key);
+
+    /// <summary> 通过JNI移除自定义数据
+    /// </summary>
+    /// <param name="pKey"></param>
+    [DllImport("CrasheyeNDK")]
+    private static extern void RemoveCustomData(string pKey);
+
+    /// <summary> 通过JNI清除自定义数据
+    /// </summary>
+    [DllImport("CrasheyeNDK")]
+    private static extern void CleanCustomData();
+
+    /// <summary> 通过JNI调用Java添加打点信息
+    /// </summary>
+    /// <param name="breadcrumb"></param>
+    [DllImport("CrasheyeNDK")]
+    private static extern void LeaveBreadcrumbData(string breadcrumb);
+            
+    /// <summary>
+    /// 崩溃回溯C#堆栈信息
+    /// </summary>
+    private static bool CSharpStackTrace = false;
+
+    /// <summary>
+    /// 用于调用java函数
+    /// </summary>
+    private static AndroidJavaClass dumpcls;
+
+    /// <summary>
+    /// 设置AppVersion信息
+    /// </summary>
+    private static string YourAppVersion = "NA";
+
+    /// <summary>
+    /// 设置渠道号
+    /// </summary>
+    private static string YourChannelId = "NA";
+
+    /// <summary>
+    /// 设置是否只在wifi下往服务器发送数据
+    /// </summary>
+    private static bool FlushOnlyOverWiFi = false;
+    
+    /// <summary>
+    /// Android的初始化
+    /// </summary>
+    /// <param name="appKeyForAndroid"></param>
+    /// <param name="channIdForAndroid"></param>
+    public static void Init(string appKeyForAndroid, string channIdForAndroid)
+    {
+        if (string.IsNullOrEmpty(appKeyForAndroid))
+        {
+            return;
+        }
+
+        AndroidJavaClass cls = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
+        AndroidJavaObject javaObj = cls.GetStatic<AndroidJavaObject>("currentActivity");
+
+        EnableDebug();
+
+        dumpcls = new AndroidJavaClass("com.xsj.crasheye.Crasheye");
+
+        if (!YourAppVersion.Equals("NA"))
+        {
+            dumpcls.CallStatic("setAppVersion", new object[] { YourAppVersion });
+        }
+
+        if (FlushOnlyOverWiFi)
+        {   // 默认什为false
+            dumpcls.CallStatic("setFlushOnlyOverWiFi", new object[] { FlushOnlyOverWiFi });
+        }
+
+        dumpcls.CallStatic("setChannelID", new object[] { channIdForAndroid });
+        dumpcls.CallStatic("initWithNativeHandleUserspaceSig", new object[] { javaObj, appKeyForAndroid });
+
+        if (CSharpStackTrace)
+        {
+            Crasheye.crasheyeLib.InitCrasheyeLib();
+        }        
+        Crasheye.crasheyeLib.SetExceptionCallback();
+    }
+
+    /// <summary>
+    /// 如果启动了C#堆栈回溯可能会导致某些机型出现宕机
+    /// </summary>
+    public static void EnableCSharpStackTrace()
+    {
+        CSharpStackTrace = true;
+    }
+
+    /// <summary> 设置版本号信息
+    /// </summary>
+    /// <param name="yourAppVersion"></param>
+    public static void SetAppVersion(string yourAppVersion)
+    {
+        if (yourAppVersion == null)
+        {
+            return;
+        }
+        YourAppVersion = yourAppVersion;
+    }
+
+    /// <summary> 获取SDK版本信息
+    /// </summary>
+    /// <returns>返回sdk版本号</returns>
+    public static string GetAppVersion()
+    {
+        try
+        {
+            dumpcls = new AndroidJavaClass("com.xsj.crasheye.Crasheye");
+            if (dumpcls == null)
+            {
+                return "NA";
+            }
+
+            string sdkVersion = dumpcls.CallStatic<string>("getSDKVersion", new object[] { });
+            if (string.IsNullOrEmpty(sdkVersion))
+            {
+                return "NA";
+            }
+
+            return sdkVersion;
+        }
+        catch (Exception ex)
+        {
+            Debug.LogError(ex.Message);
+            return "NA";
+        }
+    }
+
+    /// <summary> 设置用户信息
+    /// </summary>
+    /// <param name="userIdentifier"></param>
+    public static void SetUserIdentifier(string userIdentifier)
+    {
+        if (String.IsNullOrEmpty(userIdentifier))
+        {
+            Debug.LogError("set user identifier is null or empty!");
+            return;
+        }
+
+        try
+        {
+            dumpcls = new AndroidJavaClass("com.xsj.crasheye.Crasheye");
+            if (dumpcls == null)
+            {
+                return;
+            }
+
+            dumpcls.CallStatic("setUserIdentifier", new object[] { userIdentifier });
+        }
+        catch (Exception ex)
+        {
+            Debug.LogError(ex.Message);
+        }
+    }
+
+    /// <summary> SetURL
+    /// </summary>
+    /// <param name="SetURL"></param>
+    public static void SetURL(string url)
+    {
+        if (String.IsNullOrEmpty(url))
+        {
+            Debug.LogError("set url is null or empty!");
+            return;
+        }
+
+        try
+        {
+            dumpcls = new AndroidJavaClass("com.xsj.crasheye.Crasheye");
+            if (dumpcls == null)
+            {
+                return;
+            }
+
+            dumpcls.CallStatic("setURL", new object[] { url });
+        }
+        catch (Exception ex)
+        {
+            Debug.LogError(ex.Message);
+        }
+    }
+
+    /// <summary> 指定获取应用程序log日志的行数
+    /// </summary>
+    /// <param name="lines">设置获取行号</param>
+    public static void SetLogging(int lines)
+    {
+        try
+        {
+            dumpcls = new AndroidJavaClass("com.xsj.crasheye.Crasheye");
+            if (dumpcls == null)
+            {
+                return;
+            }
+
+            dumpcls.CallStatic("setLogging", new object[] { lines });
+        }
+        catch (Exception ex)
+        {
+            Debug.LogError(ex.Message);
+        }
+    }
+
+    /// <summary> 获取应用程序log日志关键字过滤
+    /// </summary>
+    /// <param name="filter">设置获取关键字</param>
+    public static void SetLogging(string filter)
+    {
+        if (string.IsNullOrEmpty(filter))
+        {
+            return;
+        }
+
+        try
+        {
+            dumpcls = new AndroidJavaClass("com.xsj.crasheye.Crasheye");
+            if (dumpcls == null)
+            {
+                return;
+            }
+
+            dumpcls.CallStatic("setLogging", new object[] { filter });
+        }
+        catch (Exception ex)
+        {
+            Debug.LogError(ex.Message);
+        }
+    }
+
+    /// <summary> 获取应用程序log日志(过滤条件:关键字过滤+行数)
+    /// </summary>
+    /// <param name="lines">设置获取行数</param>
+    /// <param name="filter">设置获取关键字</param>
+    public static void SetLogging(int lines, string filter)
+    {
+        if (string.IsNullOrEmpty(filter))
+        {
+            return;
+        }
+
+        try
+        {
+            dumpcls = new AndroidJavaClass("com.xsj.crasheye.Crasheye");
+            if (dumpcls == null)
+            {
+                return;
+            }
+
+            dumpcls.CallStatic("setLogging", new object[] { lines, filter });
+        }
+        catch (Exception ex)
+        {
+            Debug.LogError(ex.Message);
+        }
+    }
+
+    public static void SetIsBetaVersion(bool isBeta)
+    {
+       try
+        {
+            dumpcls = new AndroidJavaClass("com.xsj.crasheye.Crasheye");
+            if (dumpcls == null)
+            {
+                return;
+            }
+
+            dumpcls.CallStatic("setIsBetaVersion", new object[] { isBeta });
+        }
+        catch (Exception ex)
+        {
+            Debug.LogError(ex.Message);
+        } 
+    }
+
+    /// <summary> 设置是否在Wifi下往服务器发送信息
+    /// </summary>
+    /// <param name="enabled"></param>
+    public static void SetFlushOnlyOverWiFi(bool enabled)
+    {
+        FlushOnlyOverWiFi = enabled;
+    }
+
+    /// <summary>
+    /// 打调试信息设置打开
+    /// </summary>
+    public static void EnableDebug()
+    {
+        try
+        {
+            dumpcls = new AndroidJavaClass("com.xsj.crasheye.Crasheye");
+            dumpcls.CallStatic("enableDebug", new object[]{});
+        }
+        catch (Exception ex)
+        {
+            Debug.LogError("call java set debug log err:" + ex.Message);
+        }
+    }
+    
+    /// <summary>
+    /// 添加自定义数据
+    /// </summary>
+    /// <param name="key">Key.</param>
+    /// <param name="value">Value.</param>
+    public static void AddExtraData(string key, string value)
+    {
+        if (string.IsNullOrEmpty(key) || string.IsNullOrEmpty(value))
+        {
+            return;
+        }
+
+        SetCustomData(key, value);
+
+        try
+        {
+            dumpcls = new AndroidJavaClass("com.xsj.crasheye.Crasheye");
+            if (dumpcls == null)
+            {
+                return;
+            }
+
+            dumpcls.CallStatic("addExtraData", new object[] { key, value });
+        }
+        catch (Exception ex)
+        {
+            Debug.LogError(ex.Message);
+        }
+    }
+
+    /// <summary>
+    /// 获取自定义的值
+    /// </summary>
+    /// <param name="key"></param>
+    /// <returns></returns>
+    public static string GetExtraData(string key)
+    {
+        if (string.IsNullOrEmpty(key))
+        {
+            return "NA";
+        }
+        return GetCustomData(key);
+    }
+
+    /// <summary>
+    /// 移除自定义数据
+    /// </summary>
+    /// <param name="key"></param>
+    public static void RemoveExtraData(string key)
+    {
+        if (string.IsNullOrEmpty(key))
+        {
+            return;
+        }
+        RemoveCustomData(key);
+    }
+
+    /// <summary>
+    /// 清空所有自定数据
+    /// </summary>
+    public static void CleanExtraData()
+    {
+        CleanCustomData();
+    }
+
+    /// <summary>
+    /// 打点数据
+    /// </summary>
+    /// <param name="breadcrumb">Breadcrumb.</param>
+    public static void LeaveBreadcrumb(string breadcrumb)
+    {
+        if (string.IsNullOrEmpty(breadcrumb))
+        {
+            return;
+        }
+        LeaveBreadcrumbData(breadcrumb);
+
+        try
+        {
+            dumpcls = new AndroidJavaClass("com.xsj.crasheye.Crasheye");
+            if (dumpcls == null)
+            {
+                return;
+            }
+
+            dumpcls.CallStatic("leaveBreadcrumb", new object[] { breadcrumb });
+        }
+        catch (Exception ex)
+        {
+            Debug.LogError(ex.Message);
+        }
+    }
+
+    public static void setInternalExtraData()
+    {
+        var internalExtraData = GetHardwareInfo();
+        if (String.IsNullOrEmpty(internalExtraData))
+        {
+            Debug.LogError("set internalExtraData is null or empty!");
+            return;
+        }
+
+        try
+        {
+            dumpcls = new AndroidJavaClass("com.xsj.crasheye.Crasheye");
+            if (dumpcls == null)
+            {
+                return;
+            }
+
+            dumpcls.CallStatic("setInternalExtraData", new object[] { internalExtraData });
+        }
+        catch (Exception ex)
+        {
+            Debug.LogError(ex.Message);
+        }
+    }
+
+    private static string GetCpuInfo()
+    {
+        string cpuInfo = "NA";
+        TextReader file = null;
+        AndroidJavaClass androidOSBuild = new AndroidJavaClass("android.os.Build");
+
+        if (File.Exists("/proc/cpuinfo"))
+        {
+            file = File.OpenText("/proc/cpuinfo");
+        }
+        
+        if (file == null)
+        {
+            cpuInfo = androidOSBuild.GetStatic<string>("HARDWARE");
+            return cpuInfo;
+        }
+
+        try
+        {
+            string line;
+            while ((line = file.ReadLine()) != null)
+            {
+                if (line.ToLower().IndexOf("hardware") != -1)
+                {
+                    string[] partArr = line.Split(':');
+                    if (partArr.Length > 0)
+                    {
+                        cpuInfo = partArr[partArr.Length - 1].Trim();
+                        break;
+                    }
+                }
+            }
+            if (cpuInfo == "NA")
+            {
+                cpuInfo = androidOSBuild.GetStatic<string>("HARDWARE");
+            }
+        }
+        catch (Exception ex)
+        {
+            Debug.LogError(ex.Message);
+        }
+
+        return cpuInfo;
+    }
+
+    private static string GetHardwareInfo()
+    {
+        StringBuilder sb = new StringBuilder();
+        sb.Append(SystemInfo.graphicsDeviceName);
+        sb.Append("###" + GetCpuInfo());
+
+        return sb.ToString();
+    }
+#endif
+
+}

+ 12 - 0
Assets/Plugins/Android/CrasheyeForAndroid.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: bb0626440f2d5df469204dd875c8f625
+timeCreated: 1449132945
+licenseType: Free
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 0 - 0
Assets/Plugins/Android/MainActivity.java


+ 37 - 0
Assets/Plugins/Android/MainActivity.java.meta

@@ -0,0 +1,37 @@
+fileFormatVersion: 2
+guid: Cy8e5yL/BXhRJoGWDUy2XXjSNWjPSNI1ypk6t6uWpYl1WJNHU571JPh5n4QI
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      Android: Android
+    second:
+      enabled: 1
+      settings: {}
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 0
+      settings:
+        DefaultValueInitialized: true
+  - first:
+      HMIAndroid: HMIAndroid
+    second:
+      enabled: 1
+      settings: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

二进制
Assets/Plugins/Android/MonoCrasheye.jar


+ 32 - 0
Assets/Plugins/Android/MonoCrasheye.jar.meta

@@ -0,0 +1,32 @@
+fileFormatVersion: 2
+guid: baa036bf23fc43841881470044d84c05
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      Android: Android
+    second:
+      enabled: 1
+      settings: {}
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 0
+      settings:
+        DefaultValueInitialized: true
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/Plugins/Android/libs.meta

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

+ 8 - 0
Assets/Plugins/Android/libs/arm64-v8a.meta

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

二进制
Assets/Plugins/Android/libs/arm64-v8a/libCrasheyeNDK.so


+ 7 - 0
Assets/Plugins/Android/libs/arm64-v8a/libCrasheyeNDK.so.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: dee7c56257af2b14eb34faa74458c265
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/Plugins/Android/libs/armeabi-v7a.meta

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

二进制
Assets/Plugins/Android/libs/armeabi-v7a/libCrasheyeNDK.so


+ 7 - 0
Assets/Plugins/Android/libs/armeabi-v7a/libCrasheyeNDK.so.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: a1534cb2a2b75c94e9ab5ff6e535994f
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/Plugins/Android/libs/armeabi.meta

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

二进制
Assets/Plugins/Android/libs/armeabi/libCrasheyeNDK.so


+ 32 - 0
Assets/Plugins/Android/libs/armeabi/libCrasheyeNDK.so.meta

@@ -0,0 +1,32 @@
+fileFormatVersion: 2
+guid: d7d817961d71ebd4e9c727219c5d5eeb
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      Android: Android
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 0
+      settings:
+        DefaultValueInitialized: true
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/Plugins/Android/libs/x86.meta

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

二进制
Assets/Plugins/Android/libs/x86/libCrasheyeNDK.so


+ 33 - 0
Assets/Plugins/Android/libs/x86/libCrasheyeNDK.so.meta

@@ -0,0 +1,33 @@
+fileFormatVersion: 2
+guid: bcadd2fa39e7e1d4d8443a6b1f72b595
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      Android: Android
+    second:
+      enabled: 1
+      settings:
+        CPU: x86
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 0
+      settings:
+        DefaultValueInitialized: true
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/Plugins/Android/libs/x86_64.meta

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

二进制
Assets/Plugins/Android/libs/x86_64/libCrasheyeNDK.so


+ 33 - 0
Assets/Plugins/Android/libs/x86_64/libCrasheyeNDK.so.meta

@@ -0,0 +1,33 @@
+fileFormatVersion: 2
+guid: 1818cb4e2f7b9614f9b9ed2d4272bf89
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      Android: Android
+    second:
+      enabled: 1
+      settings:
+        CPU: x86_64
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 0
+      settings:
+        DefaultValueInitialized: true
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 729 - 0
Assets/Plugins/Crasheye.cs

@@ -0,0 +1,729 @@
+/**
+ *  Unity Plugins Version   2.2.10
+ *  
+ *      android version     2.2.9
+ *      iOS version         2.7.3
+ *      window version      1.0.0
+ */
+using System.Text;
+using UnityEngine;
+using System.Collections;
+using System.Collections.Generic;
+using System;
+using System.IO;
+using System.Runtime.InteropServices;
+using System.Security.Cryptography;
+using System.Text.RegularExpressions;
+#if UNITY_ANDROID || UNITY_IPHONE || UNITY_IOS
+using com.xsj.Crasheye.U3D;
+#endif
+
+#if UNITY_ANDROID
+using com.xsj.Crasheye.U3D.Android;
+#endif
+
+
+#if UNITY_IPHONE || UNITY_IOS
+using com.xsj.Crasheye.U3D.IOS;
+#endif
+public class Crasheye : MonoBehaviour
+{
+    public delegate void FnOnCrashCallback(bool bCaptureSucceed, string cpszCrashReportFile);
+    
+    public string YourAppKeyForAndroid = "YourAppKeyForAndroid";
+    public string YourChannelIdForAndroid = "YourChannelIdForAndroid";
+
+    public string YourAppKeyForIOS = "YourAppKeyForIOS";
+    public string YourChannelIdForIOS = "YourChannelIdForIOS";
+
+    public string YourAppKeyForPC = "YourAppKeyForPC";
+    public string YourChannelIdForPC = "YourChannelIdForPC";
+
+#if UNITY_ANDROID || UNITY_IPHONE || UNITY_IOS
+    public static CrasheyeLib crasheyeLib = null;
+#endif
+    
+#if UNITY_ANDROID || UNITY_IPHONE || UNITY_IOS || UNITY_STANDALONE_WIN
+    private static string YourChannelId = "NA";
+#endif
+    public static void AddCustomLog(string collectFile)
+    {
+#if UNITY_STANDALONE_WIN && !UNITY_EDITOR
+        DumpForPC.AddCustomLog(collectFile);
+#endif
+    }
+
+
+    public static void AddCustomLogDirectory(string CollectLogDirectory)
+    {
+#if UNITY_STANDALONE_WIN && !UNITY_EDITOR
+        DumpForPC.AddCustomLogDirectory(CollectLogDirectory);
+#endif
+    }
+
+    void Start()
+    {
+        DontDestroyOnLoad(gameObject);
+
+        if (Application.platform == RuntimePlatform.Android)
+        {
+#if UNITY_ANDROID
+            SetChannelID(YourChannelIdForAndroid);
+            StartInitCrasheye(YourAppKeyForAndroid);
+#endif
+        }
+        else if (Application.platform == RuntimePlatform.IPhonePlayer)
+        {
+#if UNITY_IPHONE || UNITY_IOS
+            SetChannelID(YourChannelIdForIOS);
+            StartInitCrasheye(YourAppKeyForIOS);
+#endif
+        }
+        else if (Application.platform == RuntimePlatform.WindowsPlayer)
+        {
+#if UNITY_STANDALONE_WIN
+            SetChannelID(YourAppKeyForPC);
+            StartInitCrasheye(YourAppKeyForPC);
+#endif
+        }
+    }
+
+    /// <summary>
+    /// SetURL
+    /// </summary>
+    /// <param name="SetUrl"></param>
+    public static void SetURL(string url)
+    {
+        if (Application.platform == RuntimePlatform.Android)
+        {
+#if UNITY_ANDROID
+            CrasheyeForAndroid.SetURL(url);
+#endif
+        }
+        else if (Application.platform == RuntimePlatform.IPhonePlayer)
+        {
+#if UNITY_IPHONE || UNITY_IOS
+            CrasheyeForIOS.SetURL(url);
+#endif
+        }
+        else if (Application.platform == RuntimePlatform.WindowsPlayer)
+        {
+#if UNITY_STANDALONE_WIN
+            DumpForPC.SetURL(url);
+#endif
+        }
+    }
+    
+    /// <summary>
+    ///  设置Dump是否强制上报(忽略玩家在DumpReport界面上的选择)
+    ///
+    /// </summary>
+    /// <param name="isForceUpload"> isForceUpload   是否设置Dump强制上报 </param>
+    public static void SetForceUpload(bool isForceUpload)
+    {
+        Debug.Log("SetForceUpload");
+#if UNITY_STANDALONE_WIN
+        DumpForPC.SetForceUpload(isForceUpload);
+#endif
+    }
+    /// <summary>
+    /// 启动Crasheye
+    /// </summary>
+    /// <param name="Your_AppKey"></param>
+    public static void StartInitCrasheye(string Your_AppKey)
+    {        
+        RegisterLogCallback();
+        
+        if (Application.platform == RuntimePlatform.Android)
+        {
+#if UNITY_ANDROID
+            CrasheyeForAndroid.Init(Your_AppKey, YourChannelId);
+#endif
+        }
+        else if (Application.platform == RuntimePlatform.IPhonePlayer)
+        {
+#if UNITY_IPHONE || UNITY_IOS
+            CrasheyeForIOS.Init(Your_AppKey, YourChannelId);
+#endif
+        }
+        else if (Application.platform == RuntimePlatform.WindowsPlayer)
+        {
+#if UNITY_STANDALONE_WIN
+            DumpForPC.Init(Your_AppKey, YourChannelId);
+#endif
+        }
+
+        //bool result = Crasheye.PushLogTrace("Crasheye Demo Push Log");
+        //Debug.Log("PushLogTrace:" + result);
+    }
+
+    /// <summary>
+    /// 注册脚本捕获
+    /// </summary>
+    public static void RegisterLogCallback()
+    {
+        if (Application.platform == RuntimePlatform.Android)
+        {
+#if UNITY_ANDROID
+            crasheyeLib = new LibForAndroid();
+
+            CrasheyeForAndroid.setInternalExtraData();
+#endif
+        }
+        else if (Application.platform == RuntimePlatform.IPhonePlayer)
+        {
+#if UNITY_IPHONE || UNITY_IOS
+            crasheyeLib = new LibForiOS();
+#endif
+        }
+        else if (Application.platform == RuntimePlatform.WindowsPlayer)
+        {
+#if UNITY_STANDALONE_WIN
+            Debug.Log("RegisterLogCallback");
+            AppDomain.CurrentDomain.UnhandledException += DumpForPC.OnHandleUnresolvedException;
+            SetRegisterLogFunction(DumpForPC.OnHandleLogCallback);
+            Application.logMessageReceived += RegisterLogFunction;
+#endif
+        }
+
+#if UNITY_ANDROID || UNITY_IPHONE || UNITY_IOS
+        if (crasheyeLib == null)
+        {
+            return;
+        }
+
+        System.AppDomain.CurrentDomain.UnhandledException += new System.UnhandledExceptionEventHandler(crasheyeLib.OnHandleUnresolvedException);
+
+        SetRegisterLogFunction(crasheyeLib.OnHandleLogCallback);
+
+#if UNITY_5
+                Application.logMessageReceived += RegisterLogFunction;
+#else
+                Application.RegisterLogCallback(RegisterLogFunction);
+#endif
+#endif
+    }
+
+    private static void RegisterLogFunction(string logString, string stackTrace, LogType type)
+    {
+#if (UNITY_IPHONE || UNITY_IOS) && !UNITY_EDITOR
+		if (Application.platform == RuntimePlatform.IPhonePlayer)
+		{
+			CrasheyeForIOS.SaveLogger(logString);
+		}
+
+		if (CrasheyeForIOS.GetLoggingLines() > 0 && 
+            Application.platform == RuntimePlatform.IPhonePlayer && 
+            (type == LogType.Assert || type == LogType.Exception)
+           )
+		{
+			CrasheyeForIOS.addLog(CrasheyeForIOS.GetLogger());
+		}
+#endif
+        if (m_RegisterLog != null)
+        {
+            m_RegisterLog(logString, stackTrace, type);
+        }
+
+#if (UNITY_IPHONE || UNITY_IOS) && !UNITY_EDITOR
+		if (CrasheyeForIOS.GetLoggingLines() > 0 && 
+            Application.platform == RuntimePlatform.IPhonePlayer && 
+            (type == LogType.Assert || type == LogType.Exception)
+            )
+		{
+
+			CrasheyeForIOS.removeLog();
+		}
+#endif
+    }
+
+    public delegate void RegisterLog(string logString, string stackTrace, LogType type);
+    private static RegisterLog m_RegisterLog = null;
+   
+    /// <summary>
+    /// 设置用户的脚本回调的函数
+    /// </summary>
+    /// <param name="registerLogCBFun"></param>
+    public static void SetRegisterLogFunction(RegisterLog registerLogCBFun)
+    {
+        Debug.Log("SetRegisterLogFunction");
+        m_RegisterLog += registerLogCBFun;
+    }
+    
+    /// <summary>
+    /// 发送脚本异常
+    /// </summary>
+    /// <param name="ex">Excepiton Info</param>
+    public static void SendScriptException(Exception ex)
+    {        
+        if (Application.platform == RuntimePlatform.Android)
+        {
+#if UNITY_ANDROID
+            crasheyeLib.LibSendScriptException(ex.Message, ex.StackTrace);
+#endif
+        }
+        else if (Application.platform == RuntimePlatform.IPhonePlayer)
+        {
+#if UNITY_IPHONE || UNITY_IOS
+            crasheyeLib.LibSendScriptException(ex.Message, ex.StackTrace);
+#endif
+        }
+    }
+
+    /// <summary>
+    /// 上报脚本异常
+    /// </summary>
+    /// <param name="errorTitle">错误的标题</param>
+    /// <param name="stacktrace">错误堆栈信息</param>
+    /// <param name="language">语言</param>
+    public static void SendScriptException(string errorTitle, string stacktrace, string language)
+    {
+        if (Application.platform == RuntimePlatform.Android)
+        {
+#if UNITY_ANDROID
+            crasheyeLib.LibSendScriptException(errorTitle, stacktrace, language);
+#endif
+        }
+        else if(Application.platform == RuntimePlatform.IPhonePlayer)
+        {
+#if UNITY_IPHONE || UNITY_IOS
+            crasheyeLib.LibSendScriptException(errorTitle, stacktrace);
+#endif
+        } else if (Application.platform == RuntimePlatform.WindowsPlayer)
+        {
+#if UNITY_STANDALONE_WIN
+            DumpForPC.SendScriptException(errorTitle, stacktrace, language);
+#endif
+        }
+    }
+    
+    /// <summary>
+    /// 设置渠道号
+    /// </summary>
+    /// <param name="yourChannelID"></param>
+    public static void SetChannelID(string yourChannelID)
+    {
+        if (String.IsNullOrEmpty(yourChannelID))
+        {
+            Debug.LogError("set channel id value is null or empty!");
+            return;
+        }
+
+        if (yourChannelID.Equals("YourChannelIdForAndroid") || yourChannelID.Equals("YourChannelIdForIOS"))
+        {
+            return;
+        }
+
+#if UNITY_ANDROID || UNITY_IPHONE || UNITY_IOS || UNITY_STANDALONE_WIN
+        YourChannelId = yourChannelID;
+#endif
+    }
+
+    /// <summary>
+    /// 设置是否只在wifi下上报报告文件
+    /// </summary>
+    /// <param name="enabled"></param>
+    public static void SetFlushOnlyOverWiFi(bool enabled)
+    {
+        if (Application.platform == RuntimePlatform.Android)
+        {
+#if UNITY_ANDROID
+            CrasheyeForAndroid.SetFlushOnlyOverWiFi(enabled);
+#endif
+        }
+        else if (Application.platform == RuntimePlatform.IPhonePlayer)
+        {
+#if UNITY_IPHONE || UNITY_IOS
+            CrasheyeForIOS.SetFlushOnlyOverWiFi(enabled);
+#endif
+        }
+    }
+
+    /// <summary>
+    /// 设置该版本是否为测试版本
+    /// </summary>
+    /// <param name="isBeta">是否为测试版本</param>
+    public static void SetIsBetaVersion(bool isBeta)
+    {
+        if (Application.platform == RuntimePlatform.Android)
+        {
+#if UNITY_ANDROID
+            CrasheyeForAndroid.SetIsBetaVersion(isBeta);
+#endif
+        }
+        else if (Application.platform == RuntimePlatform.IPhonePlayer)
+        {
+#if UNITY_IPHONE || UNITY_IOS
+            CrasheyeForIOS.SetBeta(isBeta);
+#endif
+        }
+        else if (Application.platform == RuntimePlatform.WindowsPlayer)
+        {
+#if UNITY_STANDALONE_WIN && !UNITY_EDITOR
+            DumpForPC.SetBeta();
+#endif
+        }
+    }
+
+
+    /// <summary>
+    /// 设置版本号信息
+    /// </summary>
+    /// <param name="yourAppVersion">App版本号</param>
+    public static void SetAppVersion(string yourAppVersion)
+    {
+        if (Application.platform == RuntimePlatform.Android)
+        {
+#if UNITY_ANDROID
+            CrasheyeForAndroid.SetAppVersion(yourAppVersion);
+#endif
+        }
+        else if (Application.platform == RuntimePlatform.IPhonePlayer)
+        {
+#if UNITY_IPHONE || UNITY_IOS
+            CrasheyeForIOS.SetAppVersion(yourAppVersion);
+#endif
+        }
+        else if (Application.platform == RuntimePlatform.WindowsPlayer)
+        {
+#if UNITY_STANDALONE_WIN
+            DumpForPC.SetAppVersion(yourAppVersion);
+#endif
+        }
+    }
+
+    /// <summary>
+    /// 设置用户信息
+    /// </summary>
+    /// <param name="setUserIdentifier">用户标识</param>
+    public static void SetUserIdentifier(string userIdentifier)
+    {
+        if(string.IsNullOrEmpty(userIdentifier))
+        {
+            return;
+        }
+
+        if (Application.platform == RuntimePlatform.Android)
+        {
+#if UNITY_ANDROID
+            CrasheyeForAndroid.SetUserIdentifier(userIdentifier);
+#endif
+        }
+        else if (Application.platform == RuntimePlatform.IPhonePlayer)
+        {
+#if UNITY_IPHONE || UNITY_IOS
+            CrasheyeForIOS.SetUserIdentifier(userIdentifier);
+#endif
+        }
+        else if (Application.platform == RuntimePlatform.WindowsPlayer)
+        {
+#if UNITY_STANDALONE_WIN
+            DumpForPC.SetUserIdentifier_UTF8(userIdentifier);
+#endif
+        }
+    }
+
+    /// <summary>
+    /// 如果启动了C#堆栈回溯可能会导致某些机型出现宕机
+    /// </summary>
+    public static void EnableCSharpStackTrace()
+    {
+#if UNITY_ANDROID
+        CrasheyeForAndroid.EnableCSharpStackTrace();
+#endif
+    }
+
+    /// <summary>
+    /// 添加自定义数据
+    /// </summary>
+    /// <param name="key">Key.</param>
+    /// <param name="value">Value.</param>
+    public static void AddExtraData(string key, string value)
+    {
+        if (Application.platform == RuntimePlatform.Android)
+        {
+#if UNITY_ANDROID
+            CrasheyeForAndroid.AddExtraData(key, value);
+#endif
+        }
+        else if (Application.platform == RuntimePlatform.IPhonePlayer)
+        {
+#if UNITY_IPHONE || UNITY_IOS
+            CrasheyeForIOS.AddExtraData(key, value);
+#endif
+        }
+        else if (Application.platform == RuntimePlatform.WindowsPlayer)
+        {
+#if UNITY_STANDALONE_WIN
+            DumpForPC.AddExtraData(key,value);
+#endif
+        }
+    }
+
+    public static void AddExtraDataUTF8(string key, string value)
+    {
+        if (Application.platform == RuntimePlatform.Android)
+        {
+#if UNITY_ANDROID
+            CrasheyeForAndroid.AddExtraData(key, value);
+#endif
+        }
+        else if (Application.platform == RuntimePlatform.IPhonePlayer)
+        {
+#if UNITY_IPHONE || UNITY_IOS
+            CrasheyeForIOS.AddExtraData(key, value);
+#endif
+        }
+        else if (Application.platform == RuntimePlatform.WindowsPlayer)
+        {
+#if UNITY_STANDALONE_WIN
+            DumpForPC.AddExtraDataUTF8(key, value);
+#endif
+        }
+    }
+
+    /// <summary>
+    /// 获取自定义数据
+    /// </summary>
+    /// <param name="key">Key</param>
+    /// <returns></returns>
+    public static string GetExtraData(string key)
+    {
+        string extraData = "";
+
+        if (string.IsNullOrEmpty(key))
+        {
+            return extraData;
+        }
+
+        if (Application.platform == RuntimePlatform.Android)
+        {
+#if UNITY_ANDROID
+            extraData = CrasheyeForAndroid.GetExtraData(key);
+#endif
+        }
+        else
+        {
+#if UNITY_IPHONE || UNITY_IOS
+            extraData = CrasheyeForIOS.GetExtraData(key);
+#endif
+        }
+
+        return extraData;
+    }
+
+    /// <summary>
+    /// 移除自定义值
+    /// </summary>
+    /// <param name="key">Key</param>
+    public static void RemoveExtraData(string key)
+    {
+        if (string.IsNullOrEmpty(key))
+        {
+            return;
+        }
+
+        if (Application.platform == RuntimePlatform.Android)
+        {
+#if UNITY_ANDROID
+            CrasheyeForAndroid.RemoveExtraData(key);
+#endif
+        }
+        else if(Application.platform == RuntimePlatform.IPhonePlayer)
+        {
+#if UNITY_IPHONE || UNITY_IOS
+            CrasheyeForIOS.RemoveExtraData(key);
+#endif
+        }
+    }
+
+    /// <summary>
+    /// 清除自定义数据
+    /// </summary>
+    public static void CleanExtraData()
+    {
+        if (Application.platform == RuntimePlatform.Android)
+        {
+#if UNITY_ANDROID
+            CrasheyeForAndroid.CleanExtraData();
+#endif
+        }
+        else if (Application.platform == RuntimePlatform.IPhonePlayer)
+        {
+#if UNITY_IPHONE || UNITY_IOS
+            CrasheyeForIOS.ClearExtraData();
+#endif
+        }
+    }
+
+    /// <summary>
+    /// 设置打点数据接口
+    /// </summary>
+    /// <param name="breadcrumb">Breadcrumb.</param>
+    public static void SetBreadCrumbType(Int32 type)
+    {
+        if (Application.platform == RuntimePlatform.Android)
+        {
+#if UNITY_ANDROID
+            // TODO            
+#endif
+        }
+        else if (Application.platform == RuntimePlatform.IPhonePlayer)
+        {
+#if UNITY_IPHONE || UNITY_IOS
+            // TODO
+#endif
+        }
+        else if (Application.platform == RuntimePlatform.WindowsPlayer)
+        {
+#if UNITY_STANDALONE_WIN
+            DumpForPC.SetBreadCrumbType(type);
+#endif
+        }
+    }
+
+    /// <summary>
+    /// 打点数据
+    /// </summary>
+    /// <param name="breadcrumb">Breadcrumb.</param>
+    public static void LeaveBreadcrumb(string breadcrumb)
+    {
+        if (string.IsNullOrEmpty(breadcrumb))
+        {
+            return;
+        }
+
+        if (Application.platform == RuntimePlatform.Android)
+        {
+#if UNITY_ANDROID
+            CrasheyeForAndroid.LeaveBreadcrumb(breadcrumb);
+#endif
+        }
+        else if (Application.platform == RuntimePlatform.IPhonePlayer)
+        {
+#if UNITY_IPHONE || UNITY_IOS
+            CrasheyeForIOS.LeaveBreadcrumb(breadcrumb);
+#endif
+        } else if (Application.platform == RuntimePlatform.WindowsPlayer)
+        {
+#if UNITY_STANDALONE_WIN
+            DumpForPC.leaveBreadcrumb(breadcrumb);
+#endif
+        }
+    }
+
+    /// <summary>
+    /// 指定获取应用程序log日志的行数
+    /// </summary>
+    /// <param name="lines">需要获取log行数</param>
+    public static void SetLogging(int lines)
+    {
+        if (Application.platform == RuntimePlatform.Android)
+        {
+#if UNITY_ANDROID
+            CrasheyeForAndroid.SetLogging(lines);
+#endif
+        }
+        else if (Application.platform == RuntimePlatform.IPhonePlayer)
+        {
+#if UNITY_IPHONE || UNITY_IOS
+            CrasheyeForIOS.SetLogging(lines);
+#endif
+        }
+    }
+
+    /// <summary>
+    /// 获取应用程序log日志关键字过滤
+    /// </summary>
+    /// <param name="filter">需要过滤关键字</param>
+    public static void SetLogging(string filter)
+    {
+        if (string.IsNullOrEmpty(filter))
+        {
+            return;
+        }
+
+        if (Application.platform == RuntimePlatform.Android)
+        {
+#if UNITY_ANDROID
+            CrasheyeForAndroid.SetLogging(filter);
+#endif
+        }
+    }
+
+    /// <summary>
+    /// 获取应用程序log日志(过滤条件:关键字过滤+行数)
+    /// </summary>
+    /// <param name="lines">需要获取的行数</param>
+    /// <param name="filter">需要过滤的关键字</param>
+    public static void SetLogging(int lines, string filter)
+    {
+        if (string.IsNullOrEmpty(filter))
+        {
+            return;
+        }
+
+        if (Application.platform == RuntimePlatform.Android)
+        {
+#if UNITY_ANDROID
+            CrasheyeForAndroid.SetLogging(lines, filter);
+#endif
+        }
+        else if(Application.platform == RuntimePlatform.IPhonePlayer)
+        {
+#if UNITY_IPHONE || UNITY_IOS
+            CrasheyeForIOS.SetLogging(lines, filter);
+#endif
+        }
+    }
+
+    /// <summary>
+    /// 获取sdk版本号
+    /// </summary>
+    /// <returns></returns>
+    public static string GetAppVersion()
+    {
+        if (Application.platform == RuntimePlatform.Android)
+        {
+#if UNITY_ANDROID
+            return CrasheyeForAndroid.GetAppVersion();
+#endif
+        }
+        else if (Application.platform == RuntimePlatform.IPhonePlayer)
+        {
+#if UNITY_IPHONE || UNITY_IOS
+            return CrasheyeForIOS.GetAppVersion();
+#endif
+        }
+        return "NA";
+    }
+
+    public static bool SetBackgroundUpload(bool isBackgroundUpload)
+    {
+        
+#if UNITY_STANDALONE_WIN
+        return DumpForPC.SetBackgroundUpload(isBackgroundUpload);
+#endif
+        return false;
+    }
+    
+    public static bool SetCrashCallback(FnOnCrashCallback pCallback)
+    {
+
+#if UNITY_STANDALONE_WIN
+        return DumpForPC.SetOnMiniDumpCreateCallBack((bCaptureSucceed, cpszCrashReportFile)=>{
+            string  szCrashReportFile = Marshal.PtrToStringUni(cpszCrashReportFile);
+            pCallback?.Invoke(bCaptureSucceed, szCrashReportFile);
+        });
+#endif
+        return false;
+    }
+    
+    public static bool PushLogTrace(string cpszMessage)
+    {
+#if UNITY_STANDALONE_WIN
+        return DumpForPC.PushLogTrace(cpszMessage);
+#endif
+        return false;
+    }
+}

+ 8 - 0
Assets/Plugins/Crasheye.cs.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 0e351b4322d564b589ca735763c1da14
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 

二进制
Assets/Plugins/CrasheyeLib.dll


+ 33 - 0
Assets/Plugins/CrasheyeLib.dll.meta

@@ -0,0 +1,33 @@
+fileFormatVersion: 2
+guid: 4668a2ae666b0434d8c3118885925298
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      Any: 
+    second:
+      enabled: 1
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 0
+      settings:
+        DefaultValueInitialized: true
+  - first:
+      Windows Store Apps: WindowsStoreApps
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

二进制
Assets/Plugins/LibForAndroid.dll


+ 33 - 0
Assets/Plugins/LibForAndroid.dll.meta

@@ -0,0 +1,33 @@
+fileFormatVersion: 2
+guid: bd752a703d4e1c64fa0c12b0cf1c4de3
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      Any: 
+    second:
+      enabled: 1
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 0
+      settings:
+        DefaultValueInitialized: true
+  - first:
+      Windows Store Apps: WindowsStoreApps
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

二进制
Assets/Plugins/LibForiOS.dll


+ 33 - 0
Assets/Plugins/LibForiOS.dll.meta

@@ -0,0 +1,33 @@
+fileFormatVersion: 2
+guid: 596d7bcd9831ce6448916beee2fa53ef
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      Any: 
+    second:
+      enabled: 1
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 0
+      settings:
+        DefaultValueInitialized: true
+  - first:
+      Windows Store Apps: WindowsStoreApps
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 5 - 0
Assets/Plugins/iOS.meta

@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: 538a06505d7a080428ed15bc66a0a0dc
+folderAsset: yes
+DefaultImporter:
+  userData: 

+ 113 - 0
Assets/Plugins/iOS/Crasheye.h

@@ -0,0 +1,113 @@
+//  [2.7.10]
+//  Crasheye.h
+//  Crasheye
+//
+//  Created by PengYuanlong on 16-12-16.
+//  Copyright (c) 2014年 PengYuanlong. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface Crasheye : NSObject
+
+/*
+ @brief:通过appKey注册Dump收集
+ */
++(void) initWithAppKey:(NSString *) appKey;
+
+/*
+ @brief:通过appKey注册Dump收集,并指定channel
+ @param:appKey  appKey
+ @param:channel 指定的channel, 由开发都自行填入
+ */
++(void) initWithAppKey:(NSString *) appKey
+               withChannel:(NSString *) channel;
+
+
+/*
+ @brief:添加自定义数据
+ */
++(void) addExtraDataWithKey:(NSString *) key withValue:(NSString *) value;
+
+/*
+ @brief:添加自定义数据
+ */
++(void) addExtraDataWithDic:(NSDictionary *) dic;
+
+/*
+ @brief:移除一项自定义数据
+ */
++(void) removeExtraDataWithKey:(NSString *) key;
+
+/*
+ @brief:移除所有自定义数据
+ */
++(void) clearExtraData;
+
++(void) addLog: (NSString *) log;
+
++(void) removeLog;
+
+/*
+ @brief:获取已添加的自定义数据
+ */
++(NSDictionary *) extraData;
+
+/*
+ @brief:主动上报脚本异常,可用于lua,js等脚本异常时上报
+ @param:
+    errorTitle 错误的标题,由开发人员指定,不可以为空
+    exception  异常的详细内容  不可以为空
+ */
++(void) sendScriptExceptionRequestWithTitle:(NSString *) errorTitle exception:(NSString *) exception file:(NSString *) file language:(NSString *) language;
+
+/*
+ @brief:操作打点, 打点信息会做crash信息一同上报,只保留最后的10个打点信息
+ */
++(void) leaveBreadcrumb:(NSString *) breadcrumb;
+
+/*
+ @brief:设置用户ID
+ */
++(void) setUserID:(NSString *) userID;
+
++(void) setRegion:(NSString *) region;
+
+/*
+ @brief:设置App Version,需在init前调用
+ */
++(void) setAppVersion:(NSString *) appVersion;
+
+/*
+ @brief:设置用户信息
+ */
++(void) setUserInfo:(NSDictionary *) userInfo;
+
+
+/*
+ @brief:获取Crasheye SDK的版本号
+ */
++(NSString *) versionForCrasheye;
+
+/*
+ @brief:获取设备唯一码
+ */
++(NSString *) getDeviceID;
+
+typedef void (*CrashCallback)(int nSign);
+/*
+ @brief:注册一个回调函数,用于发生Crash的时候,由crasheye通知client
+ */
++(void) registerCrashCallback:(CrashCallback) callback;
+
++(void) setFlushOnlyOverWiFi:(int32_t) enabled;
+
++(void) setBeta:(int32_t) enabled;
+
++(void) setLogCount: (int32_t) count;
+
++(void) log:(NSString *) logMsg;
+
++(void) setURL:(NSString *) serverURL;
+
+@end

+ 33 - 0
Assets/Plugins/iOS/Crasheye.h.meta

@@ -0,0 +1,33 @@
+fileFormatVersion: 2
+guid: 38d38e682a40b43438dd0c556dd37e6b
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 0
+      settings:
+        DefaultValueInitialized: true
+  - first:
+      iPhone: iOS
+    second:
+      enabled: 1
+      settings:
+        AddToEmbeddedBinaries: false
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 336 - 0
Assets/Plugins/iOS/CrasheyeForIOS.cs

@@ -0,0 +1,336 @@
+using UnityEngine;
+using System.Collections;
+#if !UNITY_STANDALONE_WIN
+using com.xsj.Crasheye.U3D;
+#endif
+using System.Runtime.InteropServices;
+using System;
+
+public class CrasheyeForIOS : MonoBehaviour
+{
+#if UNITY_IOS && !UNITY_STANDALONE_WIN
+
+    [DllImport("__Internal")]
+	private static extern void crasheyeInit(string appkey);
+	
+	[DllImport("__Internal")]
+	private static extern void crasheyeInitWithChannel(string appkey, string channel);
+	
+	[DllImport("__Internal")]
+	private static extern void crasheyeAddExtraData(string key, string value);
+	
+	[DllImport("__Internal")]
+	private static extern void crasheyeRemoveExtraData(string key);
+	
+	[DllImport("__Internal")]
+	private static extern void crasheyeClearExtraData();
+	
+	[DllImport("__Internal")]
+	private static extern void crasheyeLeaveBreadcrumb(string breadcrumb);
+	
+	[DllImport("__Internal")]
+	private static extern void crasheyeSetUserid(string userid);
+
+	[DllImport("__Internal")]
+	private static extern void crasheyeSetAppVersion(string version);
+
+	[DllImport("__Internal")]
+	private static extern void crasheyeSetFlushOnlyOverWiFi (int enabled);
+	[DllImport("__Internal")]
+	private static extern void crasheyeAddLog(string log);
+
+    [DllImport("__Internal")]
+	private static extern void crasheyeSetURL(string url);
+
+	[DllImport("__Internal")]
+	private static extern void crasheyeRemoveLog();
+
+	[DllImport("__Internal")]
+	private static extern void crasheyeSetBeta (int enabled);
+
+    /// <summary>
+    /// 最大保存log日志数量
+    /// </summary>
+    private static int MAX_LOG_COUNT = 300;
+
+    private static Queue m_saveLog = new Queue();
+                
+    /// <summary>
+    /// iOS系统的初始
+    /// </summary>
+    /// <param name="appKeyForIOS"></param>
+    /// <param name="channIdForIOS"></param>
+    public static void Init(string appKeyForIOS, string channIdForIOS)
+    {
+        if (string.IsNullOrEmpty(appKeyForIOS))
+        {
+            Debug.LogError("app key is null or empty!");
+            return;
+        }
+
+        crasheyeInitWithChannel(appKeyForIOS, channIdForIOS);
+
+        Crasheye.crasheyeLib.InitCrasheyeLib();        
+        Crasheye.crasheyeLib.SetExceptionCallback();
+    }
+    
+    /// <summary>
+    /// 设置是否打印调试日志
+    /// </summary>
+    /// <param name="debugLog">默认为False为不打印日志;True为打印日志</param>
+    public static void SetDebugLog(bool debugLog)
+    {
+        // 暂时未实现
+    }
+
+    /// <summary>
+    /// 设置版本号信息
+    /// </summary>
+    /// <param name="appVersion"></param>
+    public static void SetAppVersion(string appVersion)
+    {
+		if (string.IsNullOrEmpty(appVersion))
+		{
+			Debug.LogError("appVersion is null or empty!");
+			return;
+		}
+
+		try
+		{
+			crasheyeSetAppVersion(appVersion);
+		}
+		catch (Exception ex)
+		{
+			Debug.LogError(ex.Message);
+		}
+    }
+
+    public static void SetUserIdentifier(string userIdentifier)
+    {
+        if (string.IsNullOrEmpty(userIdentifier))
+        {
+            Debug.LogError("user identifier is null or empty!");
+            return;
+        }
+
+        try
+        {
+            crasheyeSetUserid(userIdentifier);
+        }
+        catch (Exception ex)
+        {
+            Debug.LogError(ex.Message);
+        }
+    }
+
+    private static int m_lines = -1;
+
+    /// <summary> 指定获取应用程序log日志的行数
+    /// </summary>
+    /// <param name="lines">设置获取行号</param>
+    public static void SetLogging(int lines)
+    {
+        if (lines < 0)
+        {
+            return;
+        }
+
+        if (lines > MAX_LOG_COUNT)
+        {
+            m_lines = MAX_LOG_COUNT;
+        }
+        else
+        {
+            m_lines = lines;
+        }
+    }
+
+    /// <summary>
+    /// 返回设置log行数
+    /// </summary>
+    /// <returns></returns>
+    public static int GetLoggingLines()
+    {
+        return m_lines;
+    }
+
+    private static string m_filter = "";
+    /// <summary> 获取应用程序log日志关键字过滤
+    /// </summary>
+    /// <param name="filter">设置获取关键字</param>
+    public static void SetLogging(string filter)
+    {
+        if (string.IsNullOrEmpty(filter))
+        {
+            return;
+        }
+
+        m_filter = filter;
+    }
+
+    /// <summary>
+    /// 返回log过虑
+    /// </summary>
+    /// <returns></returns>
+    public static string GetLoggingFilter()
+    {
+        return m_filter;
+    }
+
+    /// <summary> 获取应用程序log日志(过滤条件:关键字过滤+行数)
+    /// </summary>
+    /// <param name="lines">设置获取行数</param>
+    /// <param name="filter">设置获取关键字</param>
+    public static void SetLogging(int lines, string filter)
+    {
+        if (lines < 0 || string.IsNullOrEmpty(filter))
+        {
+            return;
+        }
+        SetLogging(lines);
+        SetLogging(filter);
+    }
+
+    public static void SetFlushOnlyOverWiFi(bool enabled)
+    {
+		if(enabled)
+			crasheyeSetFlushOnlyOverWiFi (1);
+		else
+			crasheyeSetFlushOnlyOverWiFi (0);
+    }
+
+	public static void SetBeta(bool enabled)
+	{
+		if(enabled)
+			crasheyeSetBeta (1);
+		else
+			crasheyeSetBeta (0);
+	}
+    /// <summary>
+    /// 添加自定义数据
+    /// </summary>
+    /// <param name="key">Key.</param>
+    /// <param name="value">Value.</param>
+    public static void AddExtraData(string key, string value)
+    {
+        if (string.IsNullOrEmpty(key) || string.IsNullOrEmpty(value))
+        {
+            Debug.LogError("add extra data err: key or value IsNullOrEmpty!");
+            return;
+        }
+        crasheyeAddExtraData(key, value);
+    }
+
+    /// <summary>
+    /// 获取自定义数据
+    /// </summary>
+    /// <param name="key">Key</param>
+    public static string GetExtraData(string key)
+    {
+        // 暂时未实现
+        return "";
+    }
+
+    /// <summary>
+    /// 移除自定义数据
+    /// </summary>
+    /// <param name="key">Key.</param>
+    public static void RemoveExtraData(string key)
+    {
+        if (string.IsNullOrEmpty(key))
+        {
+            return;
+        }
+
+        crasheyeRemoveExtraData(key);
+    }
+
+    /// <summary>
+    /// 添除数据
+    /// </summary>
+    public static void ClearExtraData()
+    {
+        crasheyeClearExtraData();
+    }
+
+    /// <summary>
+    /// 打点数据
+    /// </summary>
+    /// <param name="breadcrumb">Breadcrumb.</param>
+    public static void LeaveBreadcrumb(string breadcrumb)
+    {
+        if (string.IsNullOrEmpty(breadcrumb))
+        {
+            return;
+        }
+
+        crasheyeLeaveBreadcrumb(breadcrumb);
+    }
+
+    /// <summary> 获取SDK版本信息
+    /// </summary>
+    /// <returns>返回sdk版本号</returns>
+    public static string GetAppVersion()
+    {
+        // 此功能暂未实现
+        string sdkVersion = "NA";
+        return sdkVersion;
+    }
+    
+    public static void SaveLogger(string logMsg)
+    {
+        if (CrasheyeForIOS.GetLoggingLines() <= 0)
+        {
+            return;
+        }
+
+        if (logMsg.IndexOf(CrasheyeForIOS.GetLoggingFilter()) < 0)
+        {
+            return;
+        }
+
+        if (m_saveLog.Count >= CrasheyeForIOS.GetLoggingLines() && m_saveLog.Count > 0)
+        {
+            m_saveLog.Dequeue();
+        }
+
+        m_saveLog.Enqueue(logMsg);
+    }
+
+    public static string GetLogger()
+    {
+        string allLogger = "";
+        foreach (string strTemp in m_saveLog)
+        {
+			allLogger += strTemp + "\n";
+        }
+        return allLogger;
+    }
+
+	public static void addLog(string log)
+	{
+		crasheyeAddLog(log);
+	}
+
+	public static void removeLog()
+	{
+		crasheyeRemoveLog();
+	}
+
+     /// <summary> SetURL
+    /// </summary>
+    /// <param name="SetURL"></param>
+    public static void SetURL(string url)
+    {
+        if (String.IsNullOrEmpty(url))
+        {
+            Debug.LogError("set url is null or empty!");
+            return;
+        }
+
+        crasheyeSetURL(url);
+
+    }
+
+#endif
+}

+ 11 - 0
Assets/Plugins/iOS/CrasheyeForIOS.cs.meta

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

二进制
Assets/Plugins/iOS/libCrasheye.a


+ 33 - 0
Assets/Plugins/iOS/libCrasheye.a.meta

@@ -0,0 +1,33 @@
+fileFormatVersion: 2
+guid: 976fab68a37e41a42b60aaaf7f32a33d
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 0
+      settings:
+        DefaultValueInitialized: true
+  - first:
+      iPhone: iOS
+    second:
+      enabled: 1
+      settings:
+        AddToEmbeddedBinaries: false
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/Plugins/x86_64.meta

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

二进制
Assets/Plugins/x86_64/Crasheye64.dll


+ 70 - 0
Assets/Plugins/x86_64/Crasheye64.dll.meta

@@ -0,0 +1,70 @@
+fileFormatVersion: 2
+guid: 385e0850c96606b4b9985975e62a3aae
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 1
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      : Any
+    second:
+      enabled: 0
+      settings:
+        Exclude Android: 0
+        Exclude Editor: 0
+        Exclude Linux64: 0
+        Exclude OSXUniversal: 0
+        Exclude Win: 0
+        Exclude Win64: 0
+  - first:
+      Android: Android
+    second:
+      enabled: 1
+      settings:
+        CPU: ARMv7
+  - first:
+      Any: 
+    second:
+      enabled: 1
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 1
+      settings:
+        CPU: x86_64
+        DefaultValueInitialized: true
+        OS: AnyOS
+  - first:
+      Standalone: Linux64
+    second:
+      enabled: 1
+      settings:
+        CPU: AnyCPU
+  - first:
+      Standalone: OSXUniversal
+    second:
+      enabled: 1
+      settings:
+        CPU: x86_64
+  - first:
+      Standalone: Win
+    second:
+      enabled: 1
+      settings:
+        CPU: None
+  - first:
+      Standalone: Win64
+    second:
+      enabled: 1
+      settings:
+        CPU: x86_64
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

二进制
Assets/Plugins/x86_64/CrasheyeReport64.exe


+ 7 - 0
Assets/Plugins/x86_64/CrasheyeReport64.exe.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 9290fd5f464085f4f86350385f85e336
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 388 - 0
Assets/Plugins/x86_64/DumpForPC.cs

@@ -0,0 +1,388 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+using System.Text;
+using UnityEngine;
+
+
+#if UNITY_STANDALONE_WIN
+enum DumpCommandType
+{
+    enumDump_Begin = 0,
+
+    enumDump_BackgroundExecutionFlag = enumDump_Begin,      // 后台上传宕机信息(不显示DumpReport界面)
+    enumDump_ForceUpload,                                   // Dump是否强制上报(忽略玩家在DumpReport界面上的选择)
+    enumDump_LogDirectory,                                  // 设置log文件路径
+    enumDump_CollectFile,                                   // 设置需收集的文件名
+    enumDump_LogDirectory_UTF8,                             // 设置log文件路径(传入参数为UTF8,Unity/UE 使用此参数)
+    enumDump_CollectFile_UTF8,                              // 设置需收集的文件名(传入参数为UTF8,Unity/UE 使用此参数)
+    enumDump_SetURL,                                        // 设置上传url (internal_cn|internal_us|external|test) => (国内|海外|外部项目|内部测试)
+    enumDump_SetBeta,                                       // 设置 beta
+    enumDump_SetUserIdentifier,                             // 设置 UserIdentifier
+    enumDump_SetUserIdentifier_UTF8,
+    enumDump_AddExtraData,                                  // 添加额外数据
+    enumDump_AddExtraData_UTF8,                             // 添加额外数据(传入参数为UTF8,Unity/UE 使用此参数)
+    enumDump_leaveBreadcrumbType,						    // 设置面包屑传入字符串的格式
+    enumDump_GM_TEST,                                       // GM测试指令
+
+    enumDump_Count
+}
+public class DumpForPC : MonoBehaviour
+{
+    private static IntPtr StringToCharPtr(string s)
+    {
+        return Marshal.StringToHGlobalUni(s);
+    }
+
+    private static string YourAppVersion = "NA";
+
+    [DllImport("Crasheye64")]
+    private static extern bool InitDumperCrasheye(string appkey, string version, string channId);
+
+    [DllImport("Crasheye64")]
+    private static extern void UnInitDumper();
+
+    [DllImport("Crasheye64")]
+    private static extern bool SetConfig(int nDumpCommandType, IntPtr pArg);
+    
+    public static void SetForceUpload(bool isForceUpload)
+    {
+        IntPtr pBool = Marshal.AllocHGlobal(1);
+        Marshal.WriteByte(pBool, Convert.ToByte(isForceUpload));
+        SetConfig((int)DumpCommandType.enumDump_ForceUpload, pBool);
+        Marshal.FreeHGlobal(pBool);
+    }
+    
+    [DllImport("Crasheye64")]
+    private static extern bool SetConfig(int nDumpCommandType, IntPtr[] pArg);
+
+    [DllImport("Crasheye64")]
+    public static extern bool SendScriptException(string errorTitle, string stackTrace, string language);
+
+    public static bool SetBackgroundUpload(bool isBackgroundUpload)
+    {
+        IntPtr pBool = Marshal.AllocHGlobal(1);
+        Marshal.WriteByte(pBool, Convert.ToByte(isBackgroundUpload));
+        bool result = SetConfig((int)DumpCommandType.enumDump_BackgroundExecutionFlag, pBool);
+        Marshal.FreeHGlobal(pBool);
+        return result;
+    }
+
+
+    public delegate void FnOnCrashCallback(bool bCaptureSucceed, IntPtr cpszCrashReportFile);
+
+    [DllImport("Crasheye64")]
+    public static extern bool SetOnMiniDumpCreateCallBack(FnOnCrashCallback pCallback);
+    
+    [DllImport("Crasheye64", CharSet = CharSet.Unicode)]
+    public static extern bool PushLogTrace([MarshalAs(UnmanagedType.LPStr)] string cpszMessage);
+
+    [DllImport("Crasheye64", CharSet = CharSet.Unicode)]
+    public static extern bool leaveBreadcrumb([MarshalAs(UnmanagedType.LPStr)] string cpszMessage);
+
+    //AddExtraData专用参数
+    private static IntPtr[] extraData = new IntPtr[2];
+
+    /// <summary>
+    /// Windows的初始化
+    /// </summary>
+    /// <param name="appKeyForPC">平台申请的当前应用</param>
+    /// <param name="channIdForPC">应用的渠道号</param>
+    public static void Init(string appKeyForPC,string channIdForPC)
+    {
+        try
+        {
+            bool res = InitDumperCrasheye(appKeyForPC, YourAppVersion, channIdForPC);
+        }
+        catch (Exception e)
+        {
+            Debug.LogError(e.Message);
+        }
+    }
+
+    /// <summary>
+    /// 反初始化 CrasheyeSdk
+    /// 在程序正常退出时调用
+    /// </summary>
+    public static void UnInit()
+    {
+        try
+        {
+            UnInitDumper();
+        }
+        catch (Exception e)
+        {
+            Debug.LogError(e.Message);
+        }
+    }
+
+    /// <summary>
+    /// 设置上报路径. 
+    /// internal_cn => 国内自研项目
+    /// internal_us => 海外自研项目
+    /// external    => 外部项目
+    /// 若不设置, 默认是 external
+    /// 若要设置, 建议在 Init 之前调用.
+    /// </summary>
+    /// <param name="url">internal_cn/internal_us/external 三选一</param>
+    public static void SetURL(string url)
+    {
+        if (String.IsNullOrEmpty(url))
+        {
+            Debug.LogError("set url is null or empty!");
+            return;
+        }
+
+        var szLogDir = url.Replace("/", "\\");
+        IntPtr pLogDir = Marshal.StringToHGlobalAnsi(szLogDir);
+        SetConfig((int)DumpCommandType.enumDump_SetURL, pLogDir);
+        Marshal.FreeHGlobal(pLogDir);
+    }
+
+    /// <summary>
+    /// 标记当前版本为调试版本.
+    /// 若要设置, 建议在 Init 之前调用.
+    /// </summary>
+    public static void SetBeta()
+    {
+        try
+        {
+            IntPtr pLogDir = default;
+            SetConfig((int)DumpCommandType.enumDump_SetBeta, pLogDir);
+        }
+        catch (Exception e)
+        {
+            Debug.LogError(e.Message);
+        }
+        
+    }
+
+    /// <summary>
+    /// 设置用户id. 
+    /// </summary>
+    /// <param name="userIdentifier">项目内部的用户id</param>
+    public static void SetUserIdentifier(string userIdentifier)
+    {
+        if (string.IsNullOrEmpty(userIdentifier))
+        {
+            Debug.LogError("user identifier is null or empty!");
+            return;
+        }
+
+        try
+        {
+            var szUserIdentifier = userIdentifier.Replace("/", "\\");
+            IntPtr pUserIdentifier = Marshal.StringToHGlobalAnsi(szUserIdentifier);
+            SetConfig((int)DumpCommandType.enumDump_SetUserIdentifier, pUserIdentifier);
+            Marshal.FreeHGlobal(pUserIdentifier);
+        }
+        catch (Exception e)
+        {
+            Debug.LogError(e.Message);
+        }
+    }
+
+    /// <summary>
+    /// 设置用户id. 
+    /// </summary>
+    /// <param name="userIdentifier">项目内部的用户id</param>
+    public static void SetUserIdentifier_UTF8(string userIdentifier)
+    {
+        if (string.IsNullOrEmpty(userIdentifier))
+        {
+            Debug.LogError("user identifier is null or empty!");
+            return;
+        }
+
+        try
+        {
+            var szUserIdentifier = userIdentifier.Replace("/", "\\");
+            IntPtr pUserIdentifier = Marshal.StringToHGlobalAnsi(szUserIdentifier);
+            SetConfig((int)DumpCommandType.enumDump_SetUserIdentifier_UTF8, pUserIdentifier);
+            Marshal.FreeHGlobal(pUserIdentifier);
+        }
+        catch (Exception e)
+        {
+            Debug.LogError(e.Message);
+        }
+    }
+
+    /// <summary>
+    /// 添加自定义数据,额外上报信息.
+    /// 以键值对的形式添加额外信息, 添加的信息会被包含着崩溃报告中随报告一同上报.
+    /// </summary>
+    /// <param name="szKey">Key</param>
+    /// <param name="szValue">Value</param>
+    public static void AddExtraData(string szKey,string szValue)
+    {
+        if (string.IsNullOrEmpty(szKey) || string.IsNullOrEmpty(szValue))
+        {
+            Debug.LogError("AddExtraData szKey or szVanlue is null");
+            return;
+        }
+        
+        try
+        {
+            extraData[0] = Marshal.StringToHGlobalAnsi(szKey);
+            extraData[1] = Marshal.StringToHGlobalAnsi(szValue);
+
+            SetConfig((int)DumpCommandType.enumDump_AddExtraData, extraData);
+
+            Marshal.FreeHGlobal(extraData[0]);
+            Marshal.FreeHGlobal(extraData[1]);
+        }
+        catch (Exception e)
+        {
+            Debug.LogError(e.Message);
+        }
+        
+    }
+
+    /// <summary>
+    /// 添加自定义数据,额外上报信息.
+    /// 以键值对的形式添加额外信息, 添加的信息会被包含着崩溃报告中随报告一同上报.
+    /// </summary>
+    /// <param name="szKey">Key</param>
+    /// <param name="szValue">Value</param>
+    public static void AddExtraDataUTF8(string szKey, string szValue)
+    {
+        if (string.IsNullOrEmpty(szKey) || string.IsNullOrEmpty(szValue))
+        {
+            Debug.LogError("AddExtraData szKey or szVanlue is null");
+            return;
+        }
+
+        try
+        {
+            extraData[0] = Marshal.StringToHGlobalAnsi(szKey);
+            extraData[1] = Marshal.StringToHGlobalAnsi(szValue);
+
+            SetConfig((int)DumpCommandType.enumDump_AddExtraData_UTF8, extraData);
+
+            Marshal.FreeHGlobal(extraData[0]);
+            Marshal.FreeHGlobal(extraData[1]);
+        }
+        catch (Exception e)
+        {
+            Debug.LogError(e.Message);
+        }
+
+    }
+
+    /// <summary>
+    /// 添加额外上报日志(文件).
+    /// 添加的文件会被包含着崩溃报告中随报告一同上报.
+    /// </summary>
+    /// <param name="collectFile">需要额外收集的文件</param>
+    public static void AddCustomLog(string collectFile)
+    {
+        if (string.IsNullOrEmpty(collectFile))
+        {
+            Debug.LogError("AddCustomLog collectFile is null or empty");
+            return;
+        }
+        
+        try
+        {
+            var szCollectFile = collectFile.Replace("/", "\\");
+            Debug.Log(szCollectFile);
+            IntPtr pCollectFile = Marshal.StringToHGlobalAnsi(szCollectFile);
+
+            SetConfig((int)DumpCommandType.enumDump_CollectFile_UTF8, pCollectFile);
+
+            Marshal.FreeHGlobal(pCollectFile);
+        }
+        catch (Exception e)
+        {
+            Debug.LogError(e.Message);
+        }
+    }
+
+
+    /// <summary>
+    /// 添加额外上报日志(目录).
+    /// 添加的目录会被包含着崩溃报告中随报告一同上报.
+    /// </summary>
+    /// <param name="collectFile">需要额外收集的文件目录</param>
+    public static void AddCustomLogDirectory(string CollectLogDirectory)
+    {
+        if (string.IsNullOrEmpty(CollectLogDirectory))
+        {
+            Debug.LogError("AddCustomLog CollectLogDirectory is null or empty");
+            return;
+        }
+
+        try
+        {
+            var szCollectLogDirectory = CollectLogDirectory.Replace("/", "\\");
+            Debug.Log(szCollectLogDirectory);
+            IntPtr pCollectLogDirectory = Marshal.StringToHGlobalAnsi(szCollectLogDirectory);
+
+            SetConfig((int)DumpCommandType.enumDump_LogDirectory_UTF8, pCollectLogDirectory);
+
+            Marshal.FreeHGlobal(pCollectLogDirectory);
+        }
+        catch (Exception e)
+        {
+            Debug.LogError(e.Message);
+        }
+    }
+
+
+    /// <summary>
+    /// 设置版本号信息
+    /// </summary>
+    /// <param name="yourAppVersion"></param>
+    public static void SetAppVersion(string yourAppVersion)
+    {
+        if (yourAppVersion == null)
+        {
+            return;
+        }
+        YourAppVersion = yourAppVersion;
+    }
+
+    public static void SetBreadCrumbType(Int32 breadCrumbType)
+    {
+        IntPtr bCT = Marshal.AllocHGlobal(sizeof(Int32));
+        Marshal.WriteInt32(bCT, breadCrumbType);
+        SetConfig((int)DumpCommandType.enumDump_leaveBreadcrumbType, bCT);
+        Marshal.FreeHGlobal(bCT);
+    }
+
+    public static void OnHandleUnresolvedException(object sender, UnhandledExceptionEventArgs args)
+    {
+        Debug.Log(args.ExceptionObject.GetType());
+        if (args != null && args.ExceptionObject != null && typeof(Exception).IsInstanceOfType(args.ExceptionObject))
+        {
+            Debug.Log("OnHandleUnresolvedException Ture");
+            Exception ex = (Exception)args.ExceptionObject;
+            Debug.Log("C# error Source:" + ex.StackTrace);
+            Debug.Log("C# error StackTrace:" + ex.StackTrace);
+            LibSendScriptException(ex.Source, ex.StackTrace);
+        }
+        else
+        {
+            Debug.Log("OnHandleUnresolvedException False");
+        }
+    }
+
+
+    public static void LibSendScriptException(string error, string stack)
+    {
+        Debug.Log("LibSendScriptException");
+        bool res = SendScriptException(error, stack, "C#");
+        Debug.Log(res);
+    }
+
+    public static void OnHandleLogCallback(string logString, string stackTrace, LogType type)
+    {
+        Debug.Log("OnHandleLogCallback: type: " + type + "logString: " + logString);
+        if (LogType.Assert == type || LogType.Exception == type)
+        {
+            LibSendScriptException(logString, stackTrace);
+        }
+    }
+}
+#endif

+ 11 - 0
Assets/Plugins/x86_64/DumpForPC.cs.meta

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

+ 8 - 0
Assets/Plugins/x86_64/include.meta

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

+ 478 - 0
Assets/Plugins/x86_64/include/Crasheye.hpp

@@ -0,0 +1,478 @@
+#pragma once
+#ifdef _WIN32
+#include <Windows.h>
+
+#ifdef _DEBUG		// is debug.
+#ifdef _WIN64		// is x64
+#define DUMPER_DLL	L".\\CrasheyeD64.dll"
+#else				// is x86
+#define DUMPER_DLL	L".\\CrasheyeD.dll"
+#endif				// _WIN64
+#else				// is release.
+#ifdef _WIN64		// is x64
+#define DUMPER_DLL	L".\\Crasheye64.dll"
+#else				// is x86
+#define DUMPER_DLL	L".\\Crasheye.dll"
+#endif				// _WIN64
+#endif				// _DEBUG
+
+namespace Crasheye
+{
+    typedef void (*FnOnCrashCallback)(BOOL bCaptureSucceed, const char* cpszCrashReportFile);
+    struct ApiHolder
+    {
+        enum DumpCommandType
+        {      
+			enumDump_Begin = 0,
+
+			enumDump_BackgroundExecutionFlag = enumDump_Begin,		// 后台上传宕机信息(不显示DumpReport界面)
+			enumDump_ForceUpload,									// Dump是否强制上报(忽略玩家在DumpReport界面上的选择)
+			enumDump_LogDirectory,									// 设置log文件路径
+			enumDump_CollectFile,									// 设置需收集的文件名
+			enumDump_LogDirectory_UTF8,								// 设置log文件路径(传入参数为UTF8,Unity/UE 使用此参数)
+			enumDump_CollectFile_UTF8,								// 设置需收集的文件名(传入参数为UTF8,Unity/UE 使用此参数)
+			enumDump_SetURL,										// 设置上传url (internal_cn|internal_us|external|internal_oversea) => (国内|海外|外部项目)
+			enumDump_SetBeta,										// 设置 beta
+			enumDump_SetUserIdentifier,								// 设置 UserIdentifier	
+			enumDump_SetUserIdentifier_UTF8,						// 设置 UserIdentifier(传入参数为UTF8,Unity/UE 使用此参数)
+			enumDump_AddExtraData,								    // 添加额外数据
+			enumDump_AddExtraData_UTF8,								// 添加额外数据(传入参数为UTF8,Unity/UE 使用此参数)
+			enumDump_leaveBreadcrumbType,						    // 设置面包屑传入字符串的格式
+			enumDump_GM_TEST,										// GM测试指令
+
+			enumDump_Count
+        };
+
+        // 面包屑传入字符串的格式
+		enum leaveBreadcrumbType
+		{
+			leaveBreadcrumbType_begin = 0,
+
+			leaveBreadcrumbType_other = leaveBreadcrumbType_begin,
+			leaveBreadcrumbType_ANSI,
+			leaveBreadcrumbType_UTF8,
+
+			leaveBreadcrumbType_count
+		};
+
+        typedef BOOL(*pfnInitDumperCrasheyeType)(const char* strAppkey, const char* strVersion, const char* strChannel, const BOOL bHookUnHandledExceptionFilter);
+        typedef void (*pfnUnInitDumperType)();
+        typedef BOOL(*pfnSetOnMiniDumpCreateCallBackType)(FnOnCrashCallback pCallback);
+        typedef BOOL(*pfnSetConfigType)(const int nCommandType, const void* pArg);
+        typedef BOOL(*pfnSendScriptExceptionType)(const char* strErrorTitle, const char* strStackTrace, const char* strLanguage);
+        typedef LONG(*pfnHandleExceptionType)(EXCEPTION_POINTERS* pExceptionInfo);
+        typedef BOOL(*pfnPushLogTraceType)(const char* cpszMessage);
+        typedef void (*pfnleaveBreadcrumbType)(const char* cpszMessage);
+
+		ApiHolder() :pInitFunction(nullptr), pfnSetOnMiniDumpCreateCallBack(nullptr), pfnSetConfig(nullptr), pUnInitFunction(nullptr), pfnSendScriptException(nullptr)
+            , pfnHandleException(nullptr), pfnPushLogTrace(nullptr),pfnleaveBreadcrumb(nullptr)
+		{
+			hDumper = LoadLibraryW(DUMPER_DLL);
+			if (hDumper)
+			{
+				pInitFunction = (pfnInitDumperCrasheyeType)::GetProcAddress(hDumper, "InitDumperCrasheye");
+				pfnSetOnMiniDumpCreateCallBack = (pfnSetOnMiniDumpCreateCallBackType)::GetProcAddress(hDumper, "SetOnMiniDumpCreateCallBack");
+				pfnSetConfig = (pfnSetConfigType)::GetProcAddress(hDumper, "SetConfig");
+				pUnInitFunction = (pfnUnInitDumperType)::GetProcAddress(hDumper, "UnInitDumper");
+                pfnSendScriptException = (pfnSendScriptExceptionType)::GetProcAddress(hDumper, "SendScriptException");
+                pfnHandleException = (pfnHandleExceptionType)::GetProcAddress(hDumper, "HandleException");
+                pfnPushLogTrace = (pfnPushLogTraceType)::GetProcAddress(hDumper, "PushLogTrace");
+                pfnleaveBreadcrumb = (pfnleaveBreadcrumbType)::GetProcAddress(hDumper, "leaveBreadcrumb");
+			}
+		}
+
+		~ApiHolder()
+		{
+			if (hDumper)
+			{
+				if (pUnInitFunction)
+				{
+					pUnInitFunction();
+					pUnInitFunction = nullptr;
+				}
+				FreeLibrary(hDumper);
+				hDumper = NULL;
+			}
+		}
+
+		HMODULE hDumper;
+		pfnInitDumperCrasheyeType pInitFunction;
+		pfnSetOnMiniDumpCreateCallBackType pfnSetOnMiniDumpCreateCallBack;
+		pfnSetConfigType pfnSetConfig;
+        pfnUnInitDumperType pUnInitFunction;
+        pfnSendScriptExceptionType pfnSendScriptException;
+        pfnHandleExceptionType pfnHandleException;
+        pfnPushLogTraceType pfnPushLogTrace;
+        pfnleaveBreadcrumbType pfnleaveBreadcrumb;
+    };
+  
+    // The non-static inline function declaration refers to the same function in every translation unit (source file) that uses it.
+    inline ApiHolder* get_api()
+    {
+        static ApiHolder s_api;
+        return &s_api;
+    }
+  
+  
+    /**
+    * 初始化 CrasheyeSdk. 
+    * 
+    * 崩溃收集相关的(如设置SEH,VEH等)一系列初始化操作.
+    *
+    * 本接口调用后会产生一条报活信息, 如需设置 url, 
+    * 请先调用 SetURL, 再调用本接口.
+    *
+    * @param  strAppkey   平台申请的当前应用 appkey
+    * @param  strVersion  应用当前版本号
+    * @param  strChannel  应用的渠道号
+    * @return 是否成功初始化
+    */
+    inline BOOL Init(const char* strAppkey, const char* strVersion, const char* strChannel, const BOOL bHookUnHandledExceptionFilter = FALSE)
+    {
+        if (get_api()->pInitFunction)
+        {
+            return get_api()->pInitFunction(strAppkey, strVersion, strChannel, bHookUnHandledExceptionFilter);
+        }
+        return FALSE;
+    }
+
+    /**
+    * 反初始化 CrasheyeSdk. 
+    * 
+    * 释放 Init 阶段注册的异常处理器. 
+    * 在程序正常退出时调用.
+    *
+    */
+    inline void UnInit()
+    {
+        if (get_api()->pUnInitFunction)
+        {
+            get_api()->pUnInitFunction();
+        }
+    }
+
+    /**
+    * 设置上报路径. 
+    * 
+    * 目前支持 3 种路径
+    *   internal_cn => 国内自研项目
+    *   internal_us => 海外自研项目
+    *   external    => 外部项目
+    *
+    * 若不设置, 默认是 external
+    *
+    * 若要设置, 建议在 Init 之前调用.
+    *
+    * @param  szUrl  internal_cn/internal_us/external 三选一.
+    * @return 是否成功设置
+    */
+    inline BOOL SetURL(const char* szUrl)
+    {
+        if (get_api()->pfnSetConfig)
+        {
+            return get_api()->pfnSetConfig(ApiHolder::enumDump_SetURL, szUrl);
+        }
+        return FALSE;
+    }
+
+    /**
+    * 标记当前版本为调试版本
+    * 
+    * 若要设置, 建议在 Init 之前调用.
+    *
+    * @return 是否成功设置
+    */
+    inline BOOL SetBeta()
+    {
+        if (get_api()->pfnSetConfig)
+        {
+            int dummy;
+            return get_api()->pfnSetConfig(ApiHolder::enumDump_SetBeta, &dummy);
+        }
+        return FALSE;
+    }
+
+    /**
+    * 设置用户id. 
+    *
+    * @param  szUserIdentifier  项目内部的用户id
+    * @return 是否成功设置
+    */
+    inline BOOL SetUserIdentifier(const char* szUserIdentifier)
+    {
+        if (get_api()->pfnSetConfig)
+        {
+            return get_api()->pfnSetConfig(ApiHolder::enumDump_SetUserIdentifier, szUserIdentifier);
+        }
+        return FALSE;
+    }
+
+    /**
+    * 设置用户id.
+    * 传入参数为UTF8,Unity/UE 使用此参数
+    *
+    * @param  szUserIdentifier  项目内部的用户id
+    * @return 是否成功设置
+    */
+    inline BOOL SetUserIdentifier_UTF8(const char* szUserIdentifier)
+    {
+        if (get_api()->pfnSetConfig)
+        {
+            return get_api()->pfnSetConfig(ApiHolder::enumDump_SetUserIdentifier_UTF8, szUserIdentifier);
+        }
+        return FALSE;
+    }
+
+    /**
+    * 添加额外上报信息.
+    *
+    * 以键值对的形式添加额外信息, 添加的信息会被包含着崩溃报告中随报告一同上报.
+    *
+    * @param  szKey   键
+    * @param  szValue 值
+    * @return 是否成功添加
+    */
+    inline BOOL AddExtraData(const char* szKey, const char* szValue)
+    {
+        if (get_api()->pfnSetConfig)
+        {
+            const char* packed[2] = { szKey, szValue };
+            return get_api()->pfnSetConfig(ApiHolder::enumDump_AddExtraData, packed);
+        }
+        return FALSE;
+    }
+
+    /**
+    * 添加额外上报信息.
+    * 
+    * 传入参数为UTF8,Unity/UE 使用此参数
+    * 
+    * 以键值对的形式添加额外信息, 添加的信息会被包含着崩溃报告中随报告一同上报.
+    *
+    * @param  szKey   键
+    * @param  szValue 值
+    * @return 是否成功添加
+    */
+    inline BOOL AddExtraData_UTF8(const char* szKey, const char* szValue)
+    {
+        if (get_api()->pfnSetConfig)
+        {
+            const char* packed[2] = { szKey, szValue };
+            return get_api()->pfnSetConfig(ApiHolder::enumDump_AddExtraData_UTF8, packed);
+        }
+        return FALSE;
+    }
+
+    /**
+    * 添加额外上报日志(文件).
+    *
+    * 添加的文件会被包含着崩溃报告中随报告一同上报.
+    *
+    * @param  szCollectFile   需要额外收集的文件
+    * @return 是否成功添加
+    */
+    inline BOOL AddCustomLog(const char* szCollectFile)
+    {
+        if (get_api()->pfnSetConfig)
+        {
+            return get_api()->pfnSetConfig(static_cast<int>(ApiHolder::enumDump_CollectFile), szCollectFile);
+        }
+        return FALSE;
+    }
+
+    /**
+    * 添加额外上报日志(文件).
+    * 
+    * 传入参数为UTF8,Unity/UE 使用此参数
+    * 
+    * 添加的文件会被包含着崩溃报告中随报告一同上报.
+    *
+    * @param  szCollectFile   需要额外收集的文件
+    * @return 是否成功添加
+    */
+    inline BOOL AddCustomLog_UTF8(const char* szCollectFile)
+    {
+        if (get_api()->pfnSetConfig)
+        {
+            return get_api()->pfnSetConfig(static_cast<int>(ApiHolder::enumDump_CollectFile_UTF8), szCollectFile);
+        }
+        return FALSE;
+    }
+
+    /**
+    * 添加自定义日志文件夹.
+    *
+    * 最新的log文件会被包含着崩溃报告中随报告一同上报.
+    *
+    * @param  szCollectLogDirectory   需要收集的自定义log文件夹
+    * @return 是否成功添加
+    */
+    inline BOOL AddCustomLogDirectory(const char* szCollectLogDirectory)
+    {
+        if (get_api()->pfnSetConfig)
+        {
+            return get_api()->pfnSetConfig(static_cast<int>(ApiHolder::enumDump_LogDirectory), szCollectLogDirectory);
+        }
+        return FALSE;
+    }
+
+    /**
+    * 添加自定义日志文件夹.
+    *
+    * * 传入参数为UTF8,Unity/UE 使用此参数
+    * 
+    * 最新的log文件会被包含着崩溃报告中随报告一同上报.
+    *
+    * @param  szCollectLogDirectory   需要收集的自定义log文件夹
+    * @return 是否成功添加
+    */
+    inline BOOL AddCustomLogDirectory_UTF8(const char* szCollectLogDirectory)
+    {
+        if (get_api()->pfnSetConfig)
+        {
+            return get_api()->pfnSetConfig(static_cast<int>(ApiHolder::enumDump_LogDirectory_UTF8), szCollectLogDirectory);
+        }
+        return FALSE;
+    }
+
+    /**
+    * 设置Dump是否强制上报(忽略玩家在DumpReport界面上的选择)
+    *
+    * 若要设置, 建议在 Init 之前调用.
+    *
+    * @param  isForceUpload   是否设置Dump强制上报
+    * @return 是否成功设置
+    */
+    inline BOOL SetForceUpload(BOOL isForceUpload)
+    {
+        if (get_api()->pfnSetConfig)
+        {
+            return get_api()->pfnSetConfig(ApiHolder::enumDump_ForceUpload, &isForceUpload);
+        }
+        return FALSE;
+    }
+
+    /**
+    * 设置Dump是否后台上报(不弹出DumpReport界面)
+    *
+    * 若要设置, 建议在 Init 之前调用.
+    *
+    * @param  isBackgroundUpload   是否设置Dump后台上报
+    * @return 是否成功设置
+    */
+    inline BOOL SetBackgroundUpload(BOOL isBackgroundUpload)
+    {
+        if (get_api()->pfnSetConfig)
+        {
+            return get_api()->pfnSetConfig(ApiHolder::enumDump_BackgroundExecutionFlag, &isBackgroundUpload);
+        }
+        return FALSE;
+    }
+
+    /**
+    * 设置崩溃回调
+    *
+    * 设置崩溃发生时的回调, 回调会在报告文件写入完成后被调用.
+    * 回调函数签名为 
+    *   void(*FnOnCrashCallback)(BOOL bCaptureSucceed, const char* cpszCrashReportFile);
+    *   // @param bCaptureSucceed      是否成功捕获
+    *   // @param cpszCrashReportFile  报告文件名
+    *
+    * 注意: 回调发生时报告文件已经生成, 此时再调用 AddExtraData 和 AddCustomLog 添加的内
+    * 容, 不会被加到报告中. 如果想崩溃发生时添加信息, 可以在初始化时调用 
+    *     AddCustomLog("after_crash.log")
+    * 然后在回调中, 把信息写入 after_crash.log
+    * 
+    * @param  szCollectFile   需要额外收集的文件
+    * @return 是否成功添加
+    */
+    inline BOOL SetCrashCallback(FnOnCrashCallback pCallback)
+    {
+        if (get_api()->pfnSetOnMiniDumpCreateCallBack)
+        {
+            return get_api()->pfnSetOnMiniDumpCreateCallBack(pCallback);
+        }
+        return FALSE;
+    }
+     
+    /**
+    * 发送脚本异常
+    *
+    * @param errorTitle 错误的标题
+    * @param stacktrace 异常的详细内容
+    * @param language   脚本语言
+    * @return 是否成功设置
+    */
+    inline BOOL SendScriptException(const char* strErrorTitle, const char* strStackTrace, const char* strLanguage) 
+    {
+        if (get_api()->pfnSendScriptException) 
+        {
+            return get_api()->pfnSendScriptException(strErrorTitle, strStackTrace, strLanguage);
+        }
+        return FALSE;
+    }
+
+    /**
+    * 处理系统的异常指针
+    *(此指针指向的结构体包含与计算机无关的异常说明和异常发生时处理器状态的特定于处理器的说明)
+    * @param ExceptionInfo
+    * @return 是否成功设置
+    */
+    inline BOOL OnCrashCallback(LPEXCEPTION_POINTERS ExceptionInfo)
+    {
+        if (get_api()->pfnHandleException)
+        {
+            return get_api()->pfnHandleException(ExceptionInfo);
+        }
+        return FALSE;
+    }
+
+    /**
+    * 推送log信息流给dump模块(宕机时会写到dumper日志中)
+    *
+    * @param cpszMessage log信息流
+    * @return 是否成功设置
+    */
+    inline BOOL PushLogTrace(const char* cpszMessage)
+    {
+        if (get_api()->pfnPushLogTrace)
+        {
+            return get_api()->pfnPushLogTrace(cpszMessage);
+        }
+        return FALSE;
+    }
+
+    /**
+    * 推送面包屑信息流给dump模块(一般用于记录加载地图的信息域顺序)
+    *
+    * @param cpszMessage 面包屑信息流
+    * @return 无返回值
+    * 使用前必需调用SetConfig对enumDump_leaveBreadcrumbType进行设置
+    * 
+    */
+    inline void leaveBreadcrumb(const char* cpszMessage)
+    {
+        if (get_api()->pfnleaveBreadcrumb)
+        {
+            return get_api()->pfnleaveBreadcrumb(cpszMessage);
+        }
+    }
+
+    /**
+    * 推送自定义的配置信息流给dump模块
+    *
+    * @param nCommandType 要设置的Crasheye配置选项
+    * @param pArg         要设置的Crasheye配置选项的值
+    * @return 是否成功设置
+    */
+    inline BOOL setConfig(const int nCommandType, const void* pArg)
+    {
+		if (get_api()->pfnSetConfig)
+		{
+            return get_api()->pfnSetConfig(nCommandType, pArg);
+		}
+        return FALSE;
+    }
+}
+
+#endif // _WIN32

+ 7 - 0
Assets/Plugins/x86_64/include/Crasheye.hpp.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 94e69f7f67e0ff44dbd1d5485251e6c2
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 113 - 113
Assets/Res/Config/SkillConfig.json

@@ -4366,7 +4366,7 @@
         1.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "PromoteLan": -1,
       "PromoteLanPara_1": [
@@ -4393,7 +4393,7 @@
         1.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         102
@@ -4429,7 +4429,7 @@
         1.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         102
@@ -4465,7 +4465,7 @@
         1.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         102
@@ -4501,7 +4501,7 @@
         1.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         102
@@ -4537,7 +4537,7 @@
         3.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         102
@@ -4567,10 +4567,10 @@
       "SkillType": 2,
       "level": 1,
       "effectValue": [
-        50.0
+        20.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "PromoteLan": -1,
       "PromoteLanPara_1": [
@@ -4594,10 +4594,10 @@
       "SkillType": 2,
       "level": 2,
       "effectValue": [
-        50.0
+        25.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         103
@@ -4630,10 +4630,10 @@
       "SkillType": 2,
       "level": 3,
       "effectValue": [
-        50.0
+        30.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         103
@@ -4666,10 +4666,10 @@
       "SkillType": 2,
       "level": 4,
       "effectValue": [
-        50.0
+        35.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         103
@@ -4702,10 +4702,10 @@
       "SkillType": 2,
       "level": 5,
       "effectValue": [
-        50.0
+        40.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         103
@@ -4738,10 +4738,10 @@
       "SkillType": 2,
       "level": 6,
       "effectValue": [
-        100.0
+        45.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         103
@@ -4771,10 +4771,10 @@
       "SkillType": 2,
       "level": 1,
       "effectValue": [
-        30.0
+        10.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "PromoteLan": -1,
       "PromoteLanPara_1": [
@@ -4798,10 +4798,10 @@
       "SkillType": 2,
       "level": 2,
       "effectValue": [
-        30.0
+        15.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         101
@@ -4834,10 +4834,10 @@
       "SkillType": 2,
       "level": 3,
       "effectValue": [
-        30.0
+        20.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         101
@@ -4870,10 +4870,10 @@
       "SkillType": 2,
       "level": 4,
       "effectValue": [
-        30.0
+        25.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         101
@@ -4909,7 +4909,7 @@
         30.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         101
@@ -4942,12 +4942,12 @@
       "SkillType": 2,
       "level": 6,
       "effectValue": [
-        30.0,
+        35.0,
         15.0,
         10.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         101
@@ -4981,7 +4981,7 @@
         4.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "PromoteLan": -1
     },
@@ -5005,7 +5005,7 @@
         4.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         102
@@ -5038,7 +5038,7 @@
         4.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         102
@@ -5071,7 +5071,7 @@
         4.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         102
@@ -5104,7 +5104,7 @@
         4.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         102
@@ -5138,7 +5138,7 @@
         1.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         102
@@ -5168,7 +5168,7 @@
         30.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "PromoteLan": -1,
       "PromoteLanPara_1": [
@@ -5196,7 +5196,7 @@
         30.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         103
@@ -5233,7 +5233,7 @@
         30.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         103
@@ -5270,7 +5270,7 @@
         30.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         103
@@ -5307,7 +5307,7 @@
         30.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         103
@@ -5345,7 +5345,7 @@
         30.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         103
@@ -5379,7 +5379,7 @@
         9.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "PromoteLan": -1,
       "PromoteLanPara_1": [
@@ -5407,7 +5407,7 @@
         9.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         101
@@ -5444,7 +5444,7 @@
         9.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         101
@@ -5481,7 +5481,7 @@
         9.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         101
@@ -5518,7 +5518,7 @@
         9.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         101
@@ -5556,7 +5556,7 @@
         15.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         101
@@ -5590,7 +5590,7 @@
         100.0
       ],
       "intensifierIndex": [
-        0
+        2
       ],
       "PromoteLan": -1,
       "PromoteLanPara_1": [
@@ -5618,7 +5618,7 @@
         100.0
       ],
       "intensifierIndex": [
-        0
+        2
       ],
       "addPropertyType": [
         102
@@ -5655,7 +5655,7 @@
         100.0
       ],
       "intensifierIndex": [
-        0
+        2
       ],
       "addPropertyType": [
         102
@@ -5692,7 +5692,7 @@
         100.0
       ],
       "intensifierIndex": [
-        0
+        2
       ],
       "addPropertyType": [
         102
@@ -5729,7 +5729,7 @@
         100.0
       ],
       "intensifierIndex": [
-        0
+        2
       ],
       "addPropertyType": [
         102
@@ -5767,7 +5767,7 @@
         1.0
       ],
       "intensifierIndex": [
-        0
+        2
       ],
       "addPropertyType": [
         102
@@ -5799,10 +5799,10 @@
       "effectValue": [
         5.0,
         30.0,
-        50.0
+        20.0
       ],
       "intensifierIndex": [
-        0
+        3
       ],
       "PromoteLan": -1,
       "PromoteLanPara_1": [
@@ -5827,10 +5827,10 @@
       "effectValue": [
         5.0,
         40.0,
-        60.0
+        30.0
       ],
       "intensifierIndex": [
-        0
+        3
       ],
       "addPropertyType": [
         102
@@ -5864,10 +5864,10 @@
       "effectValue": [
         5.0,
         50.0,
-        70.0
+        40.0
       ],
       "intensifierIndex": [
-        0
+        3
       ],
       "addPropertyType": [
         102
@@ -5901,10 +5901,10 @@
       "effectValue": [
         5.0,
         60.0,
-        80.0
+        50.0
       ],
       "intensifierIndex": [
-        0
+        3
       ],
       "addPropertyType": [
         102
@@ -5938,10 +5938,10 @@
       "effectValue": [
         5.0,
         70.0,
-        90.0
+        60.0
       ],
       "intensifierIndex": [
-        0
+        3
       ],
       "addPropertyType": [
         102
@@ -5975,10 +5975,10 @@
       "effectValue": [
         5.0,
         100.0,
-        100.0
+        70.0
       ],
       "intensifierIndex": [
-        0
+        3
       ],
       "addPropertyType": [
         102
@@ -6008,11 +6008,11 @@
       "SkillType": 2,
       "level": 1,
       "effectValue": [
-        90.0,
+        50.0,
         0.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "PromoteLan": -1
     },
@@ -6032,12 +6032,12 @@
       "SkillType": 2,
       "level": 2,
       "effectValue": [
-        110.0,
+        60.0,
         20.0,
         20.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         102
@@ -6066,12 +6066,12 @@
       "SkillType": 2,
       "level": 3,
       "effectValue": [
-        130.0,
+        70.0,
         20.0,
         20.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         102
@@ -6100,12 +6100,12 @@
       "SkillType": 2,
       "level": 4,
       "effectValue": [
-        150.0,
+        80.0,
         30.0,
         30.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         102
@@ -6134,12 +6134,12 @@
       "SkillType": 2,
       "level": 5,
       "effectValue": [
-        170.0,
+        90.0,
         30.0,
         30.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         102
@@ -6168,12 +6168,12 @@
       "SkillType": 2,
       "level": 6,
       "effectValue": [
-        190.0,
+        100.0,
         30.0,
         30.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         102
@@ -6202,7 +6202,7 @@
         550.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "PromoteLan": -1
     },
@@ -6225,7 +6225,7 @@
         650.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         101
@@ -6257,7 +6257,7 @@
         750.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         101
@@ -6289,7 +6289,7 @@
         850.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         101
@@ -6321,7 +6321,7 @@
         950.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         101
@@ -6353,7 +6353,7 @@
         1050.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         101
@@ -6744,7 +6744,7 @@
         10.0
       ],
       "intensifierIndex": [
-        0
+        2
       ],
       "PromoteLan": -1,
       "PromoteLanPara_1": [
@@ -6773,7 +6773,7 @@
         15.0
       ],
       "intensifierIndex": [
-        0
+        2
       ],
       "addPropertyType": [
         101
@@ -6811,7 +6811,7 @@
         15.0
       ],
       "intensifierIndex": [
-        0
+        2
       ],
       "addPropertyType": [
         101
@@ -6849,7 +6849,7 @@
         20.0
       ],
       "intensifierIndex": [
-        0
+        2
       ],
       "addPropertyType": [
         101
@@ -6887,7 +6887,7 @@
         25.0
       ],
       "intensifierIndex": [
-        0
+        2
       ],
       "addPropertyType": [
         101
@@ -6925,7 +6925,7 @@
         30.0
       ],
       "intensifierIndex": [
-        0
+        2
       ],
       "addPropertyType": [
         101
@@ -6960,7 +6960,7 @@
         10.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "PromoteLan": -1,
       "PromoteLanPara_1": [
@@ -6989,7 +6989,7 @@
         15.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         102
@@ -7027,7 +7027,7 @@
         15.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         102
@@ -7065,7 +7065,7 @@
         20.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         102
@@ -7103,7 +7103,7 @@
         25.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         102
@@ -7141,7 +7141,7 @@
         30.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         102
@@ -7385,7 +7385,7 @@
         30.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "PromoteLan": -1,
       "PromoteLanPara_1": [
@@ -7411,7 +7411,7 @@
         40.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         101
@@ -7446,7 +7446,7 @@
         50.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         101
@@ -7481,7 +7481,7 @@
         60.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         101
@@ -7516,7 +7516,7 @@
         70.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         101
@@ -7551,7 +7551,7 @@
         80.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         101
@@ -7586,7 +7586,7 @@
         5.0
       ],
       "intensifierIndex": [
-        0
+        2
       ],
       "PromoteLan": -1
     },
@@ -7612,7 +7612,7 @@
         5.0
       ],
       "intensifierIndex": [
-        0
+        2
       ],
       "addPropertyType": [
         102
@@ -7647,7 +7647,7 @@
         5.0
       ],
       "intensifierIndex": [
-        0
+        2
       ],
       "addPropertyType": [
         102
@@ -7682,7 +7682,7 @@
         5.0
       ],
       "intensifierIndex": [
-        0
+        2
       ],
       "addPropertyType": [
         102
@@ -7717,7 +7717,7 @@
         5.0
       ],
       "intensifierIndex": [
-        0
+        2
       ],
       "addPropertyType": [
         102
@@ -7752,7 +7752,7 @@
         5.0
       ],
       "intensifierIndex": [
-        0
+        2
       ],
       "addPropertyType": [
         102
@@ -7781,7 +7781,7 @@
         20.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "PromoteLan": -1,
       "PromoteLanPara_1": [
@@ -7807,7 +7807,7 @@
         30.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         103
@@ -7842,7 +7842,7 @@
         40.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         103
@@ -7877,7 +7877,7 @@
         50.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         103
@@ -7912,7 +7912,7 @@
         60.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         103
@@ -7947,7 +7947,7 @@
         70.0
       ],
       "intensifierIndex": [
-        0
+        1
       ],
       "addPropertyType": [
         103

+ 1 - 1
Assets/Resources/Shader/Shader Graphs_ShengShiShader.mat

@@ -66,5 +66,5 @@ Material:
     m_Colors:
     - _mainColor: {r: 0.21314356, g: 1.4060051, b: 2.1517377, a: 0}
     - _off: {r: 0.01, g: 0.01, b: 0, a: 0}
-    - _pos: {r: -1.8000001, g: -5.3999996, b: -30, a: 0}
+    - _pos: {r: -10.699999, g: -5, b: -30, a: 0}
   m_BuildTextureStacks: []

+ 1 - 1
Assets/Scripts/GameData/ExcelConfig/SkillConfig.cs

@@ -1,5 +1,5 @@
 // Auto Generated Code By excel2json
-// Generate From Excel\skill.xlsx. SheetName: SkillConfig
+// Generate From Excel\Skill.xlsx. SheetName: SkillConfig
 
 using System;
 using Fort23.GameData;

+ 1 - 1
Assets/Scripts/GameData/ExcelConfig/SkillConstant.cs

@@ -1,5 +1,5 @@
 // Auto Generated Code By excel2json
-// Generate From Excel\skill.xlsx. SheetName: SkillConstant
+// Generate From Excel\Skill.xlsx. SheetName: SkillConstant
 
 using System;
 using Fort23.GameData;

+ 1 - 1
Assets/Scripts/GameData/ExcelConfig/SkillPowerupConfig.cs

@@ -1,5 +1,5 @@
 // Auto Generated Code By excel2json
-// Generate From Excel\skill.xlsx. SheetName: SkillPowerupConfig
+// Generate From Excel\Skill.xlsx. SheetName: SkillPowerupConfig
 
 using System;
 using Fort23.GameData;

+ 2 - 2
Assets/Scripts/GameLogic/Combat/CombatTool/SceneTool/SceneCJ2MonoConfig.cs

@@ -123,11 +123,11 @@ namespace GameLogic.Combat.CombatTool.SceneTool
             GameObjectPool gameObjectPool = GetObejct(odds);
             if (gameObjectPool != null)
             {
-                float y = Random.Range(-10.0f, 1.0f);
+                float y = Random.Range(-10.0f, -1f);
                 int d = Mathf.Abs(Mathf.Abs(xintdex) - 1);
                 if (d <= 1)
                 {
-                    y = Random.Range(-10.0f - d * 10, -5.0f - d * 10);
+                    y = Random.Range(-10.0f - d * 10, -6.0f - d * 10);
                 }
 
                 float x = Random.Range(-3.0f, 3.0f);

+ 11 - 10
Assets/Scripts/GameUI/UI/CombatPanel/HeroHpWidget.cs

@@ -75,7 +75,7 @@ namespace Fort23.Mono
         private async void AddBuff(IEventData iEventData)
         {
             BuffEventData buffEventData = iEventData as BuffEventData;
-            if (buffEventData.target == combatHeroEntity&&!buffEventData.isSuperimposing)
+            if (buffEventData.target == combatHeroEntity && !buffEventData.isSuperimposing)
             {
                 BuffBasic buffBasic = buffEventData.BuffBasic;
                 BuffWidget buffWidget = await UIManager.Instance.CreateGComponent<BuffWidget>(null, buffRoot);
@@ -183,9 +183,10 @@ namespace Fort23.Mono
                 else
                 {
                     playerLevel.text =
-                        LanguageManager.Instance.Text(combatHeroEntity.CurrCombatHeroInfo.powerUpConfig.jingjie1)
-                        + LanguageManager.Instance.Text(combatHeroEntity.CurrCombatHeroInfo.powerUpConfig.jingjie2)
-                        + LanguageManager.Instance.Text(combatHeroEntity.CurrCombatHeroInfo.powerUpConfig.jingjie3);
+                        LanguageManager.Instance.Text(
+                            combatHeroEntity.CurrCombatHeroInfo.powerUpConfig.jingjieLanIDs[0])
+                        + LanguageManager.Instance.Text(
+                            combatHeroEntity.CurrCombatHeroInfo.powerUpConfig.jingjieLanIDs[1])+combatHeroEntity.CurrCombatHeroInfo.powerUpConfig.jingjie3;
                 }
             }
 
@@ -206,12 +207,12 @@ namespace Fort23.Mono
         {
             for (int i = 0; i < buBetterList.Count; i++)
             {
-              bool isoK=  buBetterList[i].Update();
-              if (!isoK)
-              {
-                  UIManager.Instance.DormancyGComponent( buBetterList[i]);
-                  buBetterList.RemoveAt(i);
-              }
+                bool isoK = buBetterList[i].Update();
+                if (!isoK)
+                {
+                    UIManager.Instance.DormancyGComponent(buBetterList[i]);
+                    buBetterList.RemoveAt(i);
+                }
             }
 
             if (!isFollowTarget)

文件差异内容过多而无法显示
+ 0 - 0
Assets/StreamingAssets/assetConfig.txt


二进制
Excel2Json/Excel/HeroModel.xlsx


二进制
Excel2Json/Excel/skill.xlsx


部分文件因为文件数量过多而无法显示