1 files renamed
7 files deleted
28 files added
4 files modified
| | |
| | | } |
| | | |
| | | GUI.Label(new Rect(left, top + (step * i++), width, height), oaid); |
| | | if (GUI.Button(new Rect(left, top + (step * i++), width, height), "getOAID")) |
| | | if (GUI.Button(new Rect(left, top + (step * i++), width, height), "getOAID"))//由于IMEI属于隐私,高版本安卓 不支持获取 |
| | | { |
| | | oaid = TalkingDataGA.GetOAID(); |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | if (GUI.Button(new Rect(left, top + (step * i++), width, height), "Set Game Server")) |
| | | if (GUI.Button(new Rect(left, top + (step * i++), width, height), "设置区服")) |
| | | { |
| | | if (account != null) |
| | | { |
| | |
| | | TDGAMission.OnFailed("miss001", "failed"); |
| | | } |
| | | |
| | | if (GUI.Button(new Rect(left, top + (step * i++), width, height), "Charge Request")) |
| | | if (GUI.Button(new Rect(left, top + (step * i++), width, height), "充值")) |
| | | { |
| | | TDGAVirtualCurrency.OnChargeRequest("order01", "iap", 10, "CNY", 10, "UnionPay"); |
| | | } |
| | | |
| | | if (GUI.Button(new Rect(left, top + (step * i++), width, height), "Charge Success")) |
| | | if (GUI.Button(new Rect(left, top + (step * i++), width, height), "充值 Success")) |
| | | { |
| | | TDGAVirtualCurrency.OnChargeSuccess("order01"); |
| | | } |
| | | |
| | | if (GUI.Button(new Rect(left, top + (step * i++), width, height), "Reward")) |
| | | if (GUI.Button(new Rect(left, top + (step * i++), width, height), "追踪获赠的虚拟币")) |
| | | { |
| | | TDGAVirtualCurrency.OnReward(100, "reason"); |
| | | } |
| | | |
| | | if (GUI.Button(new Rect(left, top + (step * i++), width, height), "Item Purchase")) |
| | | if (GUI.Button(new Rect(left, top + (step * i++), width, height), "记录付费点")) |
| | | { |
| | | TDGAItem.OnPurchase("itemid001", 10, 10); |
| | | } |
| | | |
| | | if (GUI.Button(new Rect(left, top + (step * i++), width, height), "Item Use")) |
| | | if (GUI.Button(new Rect(left, top + (step * i++), width, height), "消耗物品或服务等")) |
| | | { |
| | | TDGAItem.OnUse("itemid001", 1); |
| | | } |
| | |
| | | debug: |
| | | m_Flags: 0 |
| | | m_NavMeshData: {fileID: 0} |
| | | --- !u!1 &205049503 |
| | | GameObject: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | serializedVersion: 6 |
| | | m_Component: |
| | | - component: {fileID: 205049505} |
| | | - component: {fileID: 205049504} |
| | | m_Layer: 0 |
| | | m_Name: ManagerRoot |
| | | m_TagString: Untagged |
| | | m_Icon: {fileID: 0} |
| | | m_NavMeshLayer: 0 |
| | | m_StaticEditorFlags: 0 |
| | | m_IsActive: 1 |
| | | --- !u!114 &205049504 |
| | | MonoBehaviour: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 205049503} |
| | | m_Enabled: 1 |
| | | m_EditorHideFlags: 0 |
| | | m_Script: {fileID: 11500000, guid: a2dbd68be62ff4e4dbab85b3bbae1547, type: 3} |
| | | m_Name: |
| | | m_EditorClassIdentifier: |
| | | --- !u!4 &205049505 |
| | | Transform: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 205049503} |
| | | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} |
| | | m_LocalPosition: {x: 360, y: 640, z: 0} |
| | | m_LocalScale: {x: 1, y: 1, z: 1} |
| | | m_Children: [] |
| | | m_Father: {fileID: 0} |
| | | m_RootOrder: 2 |
| | | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
| | | --- !u!1 &295245702 |
| | | GameObject: |
| | | m_ObjectHideFlags: 0 |
| | |
| | | - component: {fileID: 501810473} |
| | | - component: {fileID: 501810472} |
| | | - component: {fileID: 501810471} |
| | | - component: {fileID: 501810475} |
| | | m_Layer: 5 |
| | | m_Name: MainUI |
| | | m_TagString: Untagged |
| | |
| | | m_LocalScale: {x: 0, y: 0, z: 0} |
| | | m_Children: |
| | | - {fileID: 2083383110} |
| | | - {fileID: 1805855186} |
| | | m_Father: {fileID: 0} |
| | | m_RootOrder: 2 |
| | | m_RootOrder: 3 |
| | | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
| | | m_AnchorMin: {x: 0, y: 0} |
| | | m_AnchorMax: {x: 0, y: 0} |
| | | m_AnchoredPosition: {x: 0, y: 0} |
| | | m_SizeDelta: {x: 0, y: 0} |
| | | m_Pivot: {x: 0, y: 0} |
| | | --- !u!114 &501810475 |
| | | MonoBehaviour: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 501810470} |
| | | m_Enabled: 1 |
| | | m_EditorHideFlags: 0 |
| | | m_Script: {fileID: 11500000, guid: 5671a738ca063f047a1619ba0c199f45, type: 3} |
| | | m_Name: |
| | | m_EditorClassIdentifier: |
| | | imei0: |
| | | imei1: |
| | | meid: |
| | | --- !u!1 &901340337 |
| | | GameObject: |
| | | m_ObjectHideFlags: 0 |
| | |
| | | m_Father: {fileID: 0} |
| | | m_RootOrder: 1 |
| | | m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} |
| | | --- !u!1 &1121951090 |
| | | GameObject: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | serializedVersion: 6 |
| | | m_Component: |
| | | - component: {fileID: 1121951091} |
| | | - component: {fileID: 1121951093} |
| | | - component: {fileID: 1121951092} |
| | | m_Layer: 5 |
| | | m_Name: Text |
| | | m_TagString: Untagged |
| | | m_Icon: {fileID: 0} |
| | | m_NavMeshLayer: 0 |
| | | m_StaticEditorFlags: 0 |
| | | m_IsActive: 1 |
| | | --- !u!224 &1121951091 |
| | | RectTransform: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 1121951090} |
| | | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} |
| | | m_LocalPosition: {x: 0, y: 0, z: 0} |
| | | m_LocalScale: {x: 1, y: 1, z: 1} |
| | | m_Children: [] |
| | | m_Father: {fileID: 1495759452} |
| | | m_RootOrder: 0 |
| | | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
| | | m_AnchorMin: {x: 0, y: 0} |
| | | m_AnchorMax: {x: 1, y: 1} |
| | | m_AnchoredPosition: {x: 0, y: 0} |
| | | m_SizeDelta: {x: 0, y: 0} |
| | | m_Pivot: {x: 0.5, y: 0.5} |
| | | --- !u!114 &1121951092 |
| | | MonoBehaviour: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 1121951090} |
| | | m_Enabled: 1 |
| | | m_EditorHideFlags: 0 |
| | | m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} |
| | | m_Name: |
| | | m_EditorClassIdentifier: |
| | | m_Material: {fileID: 0} |
| | | m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} |
| | | m_RaycastTarget: 1 |
| | | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} |
| | | m_Maskable: 1 |
| | | m_OnCullStateChanged: |
| | | m_PersistentCalls: |
| | | m_Calls: [] |
| | | m_FontData: |
| | | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} |
| | | m_FontSize: 22 |
| | | m_FontStyle: 0 |
| | | m_BestFit: 0 |
| | | m_MinSize: 10 |
| | | m_MaxSize: 40 |
| | | m_Alignment: 4 |
| | | m_AlignByGeometry: 0 |
| | | m_RichText: 1 |
| | | m_HorizontalOverflow: 0 |
| | | m_VerticalOverflow: 0 |
| | | m_LineSpacing: 1 |
| | | m_Text: Login |
| | | --- !u!222 &1121951093 |
| | | CanvasRenderer: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 1121951090} |
| | | m_CullTransparentMesh: 0 |
| | | --- !u!1 &1495759451 |
| | | GameObject: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | serializedVersion: 6 |
| | | m_Component: |
| | | - component: {fileID: 1495759452} |
| | | - component: {fileID: 1495759455} |
| | | - component: {fileID: 1495759454} |
| | | - component: {fileID: 1495759453} |
| | | m_Layer: 5 |
| | | m_Name: Button |
| | | m_TagString: Untagged |
| | | m_Icon: {fileID: 0} |
| | | m_NavMeshLayer: 0 |
| | | m_StaticEditorFlags: 0 |
| | | m_IsActive: 1 |
| | | --- !u!224 &1495759452 |
| | | RectTransform: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 1495759451} |
| | | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} |
| | | m_LocalPosition: {x: 0, y: 0, z: 0} |
| | | m_LocalScale: {x: 1, y: 1, z: 1} |
| | | m_Children: |
| | | - {fileID: 1121951091} |
| | | m_Father: {fileID: 1805855186} |
| | | m_RootOrder: 0 |
| | | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
| | | m_AnchorMin: {x: 0.5, y: 0.5} |
| | | m_AnchorMax: {x: 0.5, y: 0.5} |
| | | m_AnchoredPosition: {x: 0, y: 0} |
| | | m_SizeDelta: {x: 160, y: 50} |
| | | m_Pivot: {x: 0.5, y: 0.5} |
| | | --- !u!114 &1495759453 |
| | | MonoBehaviour: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 1495759451} |
| | | m_Enabled: 1 |
| | | m_EditorHideFlags: 0 |
| | | m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} |
| | | m_Name: |
| | | m_EditorClassIdentifier: |
| | | m_Navigation: |
| | | m_Mode: 3 |
| | | m_SelectOnUp: {fileID: 0} |
| | | m_SelectOnDown: {fileID: 0} |
| | | m_SelectOnLeft: {fileID: 0} |
| | | m_SelectOnRight: {fileID: 0} |
| | | m_Transition: 1 |
| | | m_Colors: |
| | | m_NormalColor: {r: 1, g: 1, b: 1, a: 1} |
| | | m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} |
| | | m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} |
| | | m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} |
| | | m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} |
| | | m_ColorMultiplier: 1 |
| | | m_FadeDuration: 0.1 |
| | | m_SpriteState: |
| | | m_HighlightedSprite: {fileID: 0} |
| | | m_PressedSprite: {fileID: 0} |
| | | m_SelectedSprite: {fileID: 0} |
| | | m_DisabledSprite: {fileID: 0} |
| | | m_AnimationTriggers: |
| | | m_NormalTrigger: Normal |
| | | m_HighlightedTrigger: Highlighted |
| | | m_PressedTrigger: Pressed |
| | | m_SelectedTrigger: Selected |
| | | m_DisabledTrigger: Disabled |
| | | m_Interactable: 1 |
| | | m_TargetGraphic: {fileID: 1495759454} |
| | | m_OnClick: |
| | | m_PersistentCalls: |
| | | m_Calls: [] |
| | | --- !u!114 &1495759454 |
| | | MonoBehaviour: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 1495759451} |
| | | m_Enabled: 1 |
| | | m_EditorHideFlags: 0 |
| | | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} |
| | | m_Name: |
| | | m_EditorClassIdentifier: |
| | | m_Material: {fileID: 0} |
| | | m_Color: {r: 1, g: 1, b: 1, a: 1} |
| | | m_RaycastTarget: 1 |
| | | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} |
| | | m_Maskable: 1 |
| | | m_OnCullStateChanged: |
| | | m_PersistentCalls: |
| | | m_Calls: [] |
| | | m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} |
| | | m_Type: 1 |
| | | m_PreserveAspect: 0 |
| | | m_FillCenter: 1 |
| | | m_FillMethod: 4 |
| | | m_FillAmount: 1 |
| | | m_FillClockwise: 1 |
| | | m_FillOrigin: 0 |
| | | m_UseSpriteMesh: 0 |
| | | m_PixelsPerUnitMultiplier: 1 |
| | | --- !u!222 &1495759455 |
| | | CanvasRenderer: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 1495759451} |
| | | m_CullTransparentMesh: 0 |
| | | --- !u!1 &1575693006 |
| | | GameObject: |
| | | m_ObjectHideFlags: 0 |
| | |
| | | m_LocalScale: {x: 1, y: 1, z: 1} |
| | | m_Children: [] |
| | | m_Father: {fileID: 0} |
| | | m_RootOrder: 3 |
| | | m_RootOrder: 4 |
| | | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
| | | --- !u!1 &1601526459 |
| | | GameObject: |
| | |
| | | m_Father: {fileID: 0} |
| | | m_RootOrder: 0 |
| | | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
| | | --- !u!1 &1805855185 |
| | | GameObject: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | serializedVersion: 6 |
| | | m_Component: |
| | | - component: {fileID: 1805855186} |
| | | - component: {fileID: 1805855188} |
| | | - component: {fileID: 1805855187} |
| | | m_Layer: 5 |
| | | m_Name: Panel |
| | | m_TagString: Untagged |
| | | m_Icon: {fileID: 0} |
| | | m_NavMeshLayer: 0 |
| | | m_StaticEditorFlags: 0 |
| | | m_IsActive: 1 |
| | | --- !u!224 &1805855186 |
| | | RectTransform: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 1805855185} |
| | | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} |
| | | m_LocalPosition: {x: 0, y: 0, z: 0} |
| | | m_LocalScale: {x: 1, y: 1, z: 1} |
| | | m_Children: |
| | | - {fileID: 1495759452} |
| | | m_Father: {fileID: 501810474} |
| | | m_RootOrder: 1 |
| | | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
| | | m_AnchorMin: {x: 0, y: 0} |
| | | m_AnchorMax: {x: 1, y: 1} |
| | | m_AnchoredPosition: {x: 0, y: 0} |
| | | m_SizeDelta: {x: 0, y: 0} |
| | | m_Pivot: {x: 0.5, y: 0.5} |
| | | --- !u!114 &1805855187 |
| | | MonoBehaviour: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 1805855185} |
| | | m_Enabled: 1 |
| | | m_EditorHideFlags: 0 |
| | | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} |
| | | m_Name: |
| | | m_EditorClassIdentifier: |
| | | m_Material: {fileID: 0} |
| | | m_Color: {r: 1, g: 1, b: 1, a: 0.392} |
| | | m_RaycastTarget: 1 |
| | | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} |
| | | m_Maskable: 1 |
| | | m_OnCullStateChanged: |
| | | m_PersistentCalls: |
| | | m_Calls: [] |
| | | m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} |
| | | m_Type: 1 |
| | | m_PreserveAspect: 0 |
| | | m_FillCenter: 1 |
| | | m_FillMethod: 4 |
| | | m_FillAmount: 1 |
| | | m_FillClockwise: 1 |
| | | m_FillOrigin: 0 |
| | | m_UseSpriteMesh: 0 |
| | | m_PixelsPerUnitMultiplier: 1 |
| | | --- !u!222 &1805855188 |
| | | CanvasRenderer: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 1805855185} |
| | | m_CullTransparentMesh: 0 |
| | | --- !u!1 &2083383109 |
| | | GameObject: |
| | | m_ObjectHideFlags: 0 |
| | |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 2083383109} |
| | | m_Enabled: 1 |
| | | m_Enabled: 0 |
| | | m_EditorHideFlags: 0 |
| | | m_Script: {fileID: 11500000, guid: 1c3c4a281008bfb42a6882852b64f3b7, type: 3} |
| | | m_Name: |
| | | m_EditorClassIdentifier: |
| | | loadingTxt: {fileID: 295245704} |
| | | nextSceneName: Endless |
New file |
| | |
| | | %YAML 1.1 |
| | | %TAG !u! tag:unity3d.com,2011: |
| | | --- !u!29 &1 |
| | | OcclusionCullingSettings: |
| | | m_ObjectHideFlags: 0 |
| | | serializedVersion: 2 |
| | | m_OcclusionBakeSettings: |
| | | smallestOccluder: 5 |
| | | smallestHole: 0.25 |
| | | backfaceThreshold: 100 |
| | | m_SceneGUID: 00000000000000000000000000000000 |
| | | m_OcclusionCullingData: {fileID: 0} |
| | | --- !u!104 &2 |
| | | RenderSettings: |
| | | m_ObjectHideFlags: 0 |
| | | serializedVersion: 9 |
| | | m_Fog: 0 |
| | | m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} |
| | | m_FogMode: 3 |
| | | m_FogDensity: 0.01 |
| | | m_LinearFogStart: 0 |
| | | m_LinearFogEnd: 300 |
| | | m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} |
| | | m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} |
| | | m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} |
| | | m_AmbientIntensity: 1 |
| | | m_AmbientMode: 0 |
| | | m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} |
| | | m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} |
| | | m_HaloStrength: 0.5 |
| | | m_FlareStrength: 1 |
| | | m_FlareFadeSpeed: 3 |
| | | m_HaloTexture: {fileID: 0} |
| | | m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} |
| | | m_DefaultReflectionMode: 0 |
| | | m_DefaultReflectionResolution: 128 |
| | | m_ReflectionBounces: 1 |
| | | m_ReflectionIntensity: 1 |
| | | m_CustomReflection: {fileID: 0} |
| | | m_Sun: {fileID: 0} |
| | | m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} |
| | | m_UseRadianceAmbientProbe: 0 |
| | | --- !u!157 &3 |
| | | LightmapSettings: |
| | | m_ObjectHideFlags: 0 |
| | | serializedVersion: 12 |
| | | m_GIWorkflowMode: 1 |
| | | m_GISettings: |
| | | serializedVersion: 2 |
| | | m_BounceScale: 1 |
| | | m_IndirectOutputScale: 1 |
| | | m_AlbedoBoost: 1 |
| | | m_EnvironmentLightingMode: 0 |
| | | m_EnableBakedLightmaps: 1 |
| | | m_EnableRealtimeLightmaps: 0 |
| | | m_LightmapEditorSettings: |
| | | serializedVersion: 12 |
| | | m_Resolution: 2 |
| | | m_BakeResolution: 40 |
| | | m_AtlasSize: 1024 |
| | | m_AO: 0 |
| | | m_AOMaxDistance: 1 |
| | | m_CompAOExponent: 1 |
| | | m_CompAOExponentDirect: 0 |
| | | m_ExtractAmbientOcclusion: 0 |
| | | m_Padding: 2 |
| | | m_LightmapParameters: {fileID: 0} |
| | | m_LightmapsBakeMode: 1 |
| | | m_TextureCompression: 1 |
| | | m_FinalGather: 0 |
| | | m_FinalGatherFiltering: 1 |
| | | m_FinalGatherRayCount: 256 |
| | | m_ReflectionCompression: 2 |
| | | m_MixedBakeMode: 2 |
| | | m_BakeBackend: 1 |
| | | m_PVRSampling: 1 |
| | | m_PVRDirectSampleCount: 32 |
| | | m_PVRSampleCount: 512 |
| | | m_PVRBounces: 2 |
| | | m_PVREnvironmentSampleCount: 256 |
| | | m_PVREnvironmentReferencePointCount: 2048 |
| | | m_PVRFilteringMode: 1 |
| | | m_PVRDenoiserTypeDirect: 1 |
| | | m_PVRDenoiserTypeIndirect: 1 |
| | | m_PVRDenoiserTypeAO: 1 |
| | | m_PVRFilterTypeDirect: 0 |
| | | m_PVRFilterTypeIndirect: 0 |
| | | m_PVRFilterTypeAO: 0 |
| | | m_PVREnvironmentMIS: 1 |
| | | m_PVRCulling: 1 |
| | | m_PVRFilteringGaussRadiusDirect: 1 |
| | | m_PVRFilteringGaussRadiusIndirect: 5 |
| | | m_PVRFilteringGaussRadiusAO: 2 |
| | | m_PVRFilteringAtrousPositionSigmaDirect: 0.5 |
| | | m_PVRFilteringAtrousPositionSigmaIndirect: 2 |
| | | m_PVRFilteringAtrousPositionSigmaAO: 1 |
| | | m_ExportTrainingData: 0 |
| | | m_TrainingDataDestination: TrainingData |
| | | m_LightProbeSampleCountMultiplier: 4 |
| | | m_LightingDataAsset: {fileID: 0} |
| | | m_LightingSettings: {fileID: 0} |
| | | --- !u!196 &4 |
| | | NavMeshSettings: |
| | | serializedVersion: 2 |
| | | m_ObjectHideFlags: 0 |
| | | m_BuildSettings: |
| | | serializedVersion: 2 |
| | | agentTypeID: 0 |
| | | agentRadius: 0.5 |
| | | agentHeight: 2 |
| | | agentSlope: 45 |
| | | agentClimb: 0.4 |
| | | ledgeDropHeight: 0 |
| | | maxJumpAcrossDistance: 0 |
| | | minRegionArea: 2 |
| | | manualCellSize: 0 |
| | | cellSize: 0.16666667 |
| | | manualTileSize: 0 |
| | | tileSize: 256 |
| | | accuratePlacement: 0 |
| | | maxJobWorkers: 0 |
| | | preserveTilesOutsideBounds: 0 |
| | | debug: |
| | | m_Flags: 0 |
| | | m_NavMeshData: {fileID: 0} |
| | | --- !u!1 &1424913889 |
| | | GameObject: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | serializedVersion: 6 |
| | | m_Component: |
| | | - component: {fileID: 1424913892} |
| | | - component: {fileID: 1424913891} |
| | | - component: {fileID: 1424913890} |
| | | m_Layer: 0 |
| | | m_Name: Directional Light |
| | | m_TagString: Untagged |
| | | m_Icon: {fileID: 0} |
| | | m_NavMeshLayer: 0 |
| | | m_StaticEditorFlags: 0 |
| | | m_IsActive: 1 |
| | | --- !u!114 &1424913890 |
| | | MonoBehaviour: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 1424913889} |
| | | m_Enabled: 1 |
| | | m_EditorHideFlags: 0 |
| | | m_Script: {fileID: 11500000, guid: 7f8ff66103660e04096defa0bf88ae0b, type: 3} |
| | | m_Name: |
| | | m_EditorClassIdentifier: |
| | | --- !u!108 &1424913891 |
| | | Light: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 1424913889} |
| | | m_Enabled: 1 |
| | | serializedVersion: 10 |
| | | m_Type: 1 |
| | | m_Shape: 0 |
| | | m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} |
| | | m_Intensity: 1 |
| | | m_Range: 10 |
| | | m_SpotAngle: 30 |
| | | m_InnerSpotAngle: 21.80208 |
| | | m_CookieSize: 10 |
| | | m_Shadows: |
| | | m_Type: 2 |
| | | m_Resolution: -1 |
| | | m_CustomResolution: -1 |
| | | m_Strength: 1 |
| | | m_Bias: 0.05 |
| | | m_NormalBias: 0.4 |
| | | m_NearPlane: 0.2 |
| | | m_CullingMatrixOverride: |
| | | e00: 1 |
| | | e01: 0 |
| | | e02: 0 |
| | | e03: 0 |
| | | e10: 0 |
| | | e11: 1 |
| | | e12: 0 |
| | | e13: 0 |
| | | e20: 0 |
| | | e21: 0 |
| | | e22: 1 |
| | | e23: 0 |
| | | e30: 0 |
| | | e31: 0 |
| | | e32: 0 |
| | | e33: 1 |
| | | m_UseCullingMatrixOverride: 0 |
| | | m_Cookie: {fileID: 0} |
| | | m_DrawHalo: 0 |
| | | m_Flare: {fileID: 0} |
| | | m_RenderMode: 0 |
| | | m_CullingMask: |
| | | serializedVersion: 2 |
| | | m_Bits: 4294967295 |
| | | m_RenderingLayerMask: 1 |
| | | m_Lightmapping: 4 |
| | | m_LightShadowCasterMode: 0 |
| | | m_AreaSize: {x: 1, y: 1} |
| | | m_BounceIntensity: 1 |
| | | m_ColorTemperature: 6570 |
| | | m_UseColorTemperature: 0 |
| | | m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} |
| | | m_UseBoundingSphereOverride: 0 |
| | | m_ShadowRadius: 0 |
| | | m_ShadowAngle: 0 |
| | | --- !u!4 &1424913892 |
| | | Transform: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 1424913889} |
| | | m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} |
| | | m_LocalPosition: {x: 0, y: 3, z: 0} |
| | | m_LocalScale: {x: 1, y: 1, z: 1} |
| | | m_Children: [] |
| | | m_Father: {fileID: 0} |
| | | m_RootOrder: 1 |
| | | m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} |
| | | --- !u!1 &1771890347 |
| | | GameObject: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | serializedVersion: 6 |
| | | m_Component: |
| | | - component: {fileID: 1771890350} |
| | | - component: {fileID: 1771890349} |
| | | - component: {fileID: 1771890348} |
| | | m_Layer: 0 |
| | | m_Name: Main Camera |
| | | m_TagString: MainCamera |
| | | m_Icon: {fileID: 0} |
| | | m_NavMeshLayer: 0 |
| | | m_StaticEditorFlags: 0 |
| | | m_IsActive: 1 |
| | | --- !u!81 &1771890348 |
| | | AudioListener: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 1771890347} |
| | | m_Enabled: 1 |
| | | --- !u!20 &1771890349 |
| | | Camera: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 1771890347} |
| | | m_Enabled: 1 |
| | | serializedVersion: 2 |
| | | m_ClearFlags: 1 |
| | | m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} |
| | | m_projectionMatrixMode: 1 |
| | | m_GateFitMode: 2 |
| | | m_FOVAxisMode: 0 |
| | | m_SensorSize: {x: 36, y: 24} |
| | | m_LensShift: {x: 0, y: 0} |
| | | m_FocalLength: 50 |
| | | m_NormalizedViewPortRect: |
| | | serializedVersion: 2 |
| | | x: 0 |
| | | y: 0 |
| | | width: 1 |
| | | height: 1 |
| | | near clip plane: 0.3 |
| | | far clip plane: 1000 |
| | | field of view: 60 |
| | | orthographic: 0 |
| | | orthographic size: 5 |
| | | m_Depth: -1 |
| | | m_CullingMask: |
| | | serializedVersion: 2 |
| | | m_Bits: 4294967295 |
| | | m_RenderingPath: -1 |
| | | m_TargetTexture: {fileID: 0} |
| | | m_TargetDisplay: 0 |
| | | m_TargetEye: 3 |
| | | m_HDR: 1 |
| | | m_AllowMSAA: 1 |
| | | m_AllowDynamicResolution: 0 |
| | | m_ForceIntoRT: 0 |
| | | m_OcclusionCulling: 1 |
| | | m_StereoConvergence: 10 |
| | | m_StereoSeparation: 0.022 |
| | | --- !u!4 &1771890350 |
| | | Transform: |
| | | m_ObjectHideFlags: 0 |
| | | m_CorrespondingSourceObject: {fileID: 0} |
| | | m_PrefabInstance: {fileID: 0} |
| | | m_PrefabAsset: {fileID: 0} |
| | | m_GameObject: {fileID: 1771890347} |
| | | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} |
| | | m_LocalPosition: {x: 0, y: 1, z: -10} |
| | | m_LocalScale: {x: 1, y: 1, z: 1} |
| | | m_Children: [] |
| | | m_Father: {fileID: 0} |
| | | m_RootOrder: 0 |
| | | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 415e09a546f94cf4b883227ff1be6086 |
| | | DefaultImporter: |
| | | externalObjects: {} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | using Protobuf; |
| | | using UnityEngine; |
| | | |
| | | namespace KTGMGemClient |
| | | { |
| | | public class CommonDebugHelper |
| | | { |
| | | public static void Debug(object str) |
| | | { |
| | | if (GameConfig.OpenDebug) |
| | | { |
| | | UnityEngine.Debug.Log(str); |
| | | } |
| | | } |
| | | |
| | | public static void DebugLong(string str) |
| | | { |
| | | if (GameConfig.OpenDebug) |
| | | { |
| | | UnityEngine.Debug.Log("************** " + str + " **************"); |
| | | } |
| | | } |
| | | |
| | | public static void DebugError(string str) |
| | | { |
| | | if (GameConfig.OpenDebug) |
| | | { |
| | | UnityEngine.Debug.LogError(str); |
| | | } |
| | | } |
| | | |
| | | public static void DebugSocket(int Errorcode) |
| | | { |
| | | string log = ""; |
| | | ErrorCode code = (ErrorCode)Errorcode; |
| | | if (GameConfig.OpenDebug) |
| | | { |
| | | switch (code) |
| | | { |
| | | case ErrorCode.Success: |
| | | log = "成功"; |
| | | UnityEngine.Debug.Log("成功"); |
| | | break; |
| | | case ErrorCode.ChannelIdNoExist: |
| | | log = "************** 渠道ID不存在 **************"; |
| | | UnityEngine.Debug.LogWarning("************** 渠道ID不存在 **************"); |
| | | break; |
| | | case ErrorCode.UserNameInvalid: |
| | | log = "************** 账号名太短 **************"; |
| | | UnityEngine.Debug.LogWarning("************** 账号名太短 **************"); |
| | | break; |
| | | case ErrorCode.UserPassWordInvalid: |
| | | log = "************** 账号密码不正确 **************"; |
| | | UnityEngine.Debug.LogWarning("************** 账号密码不正确 **************"); |
| | | break; |
| | | case ErrorCode.UnknowError: |
| | | log = "************** 内部错误 **************"; |
| | | UnityEngine.Debug.LogWarning("************** 内部错误 **************"); |
| | | break; |
| | | case ErrorCode.InputInvalid: |
| | | log = "************** 参数错误 **************"; |
| | | UnityEngine.Debug.LogWarning("************** 参数错误 **************"); |
| | | break; |
| | | case ErrorCode.Timeout: |
| | | log = "************** 超时 **************"; |
| | | UnityEngine.Debug.LogWarning("************** 超时 **************"); |
| | | break; |
| | | case ErrorCode.SessionKeyInvalid: |
| | | log = "************** 登陆失败,SessionKey错误 **************"; |
| | | UnityEngine.Debug.LogWarning("************** 登陆失败,SessionKey错误 **************"); |
| | | break; |
| | | case ErrorCode.LoginNoUser: |
| | | log = "************** 没有角色,请创建 **************"; |
| | | UnityEngine.Debug.LogWarning("************** 没有角色,请创建 **************"); |
| | | break; |
| | | case ErrorCode.NotEnoughMoney: |
| | | log = "************** 金币不足 **************"; |
| | | UnityEngine.Debug.LogWarning("************** 金币不足 **************"); |
| | | break; |
| | | case ErrorCode.NotEnoughGold: |
| | | log = "************** 钻石不足 **************"; |
| | | UnityEngine.Debug.LogWarning("************** 钻石不足 **************"); |
| | | break; |
| | | case ErrorCode.NotEnoughGem: |
| | | log = "************** 宝石不足 **************"; |
| | | UnityEngine.Debug.LogWarning("************** 宝石不足 **************"); |
| | | break; |
| | | case ErrorCode.NotFoundFriend: |
| | | log = "************** 好友没有找到 **************"; |
| | | UnityEngine.Debug.LogWarning("************** 好友没有找到 **************"); |
| | | break; |
| | | case ErrorCode.AlreadyFriend: |
| | | log = "************** 已经是好友了 **************"; |
| | | UnityEngine.Debug.LogWarning("************** 已经是好友了 **************"); |
| | | break; |
| | | case ErrorCode.InBlockFriend: |
| | | log = "************** 黑名单不能添加好友 **************"; |
| | | UnityEngine.Debug.LogWarning("************** 黑名单不能添加好友 **************"); |
| | | break; |
| | | case ErrorCode.MaxFriend: |
| | | log = "************** 好友已经达到上限 **************"; |
| | | UnityEngine.Debug.LogWarning("************** 好友已经达到上限 **************"); |
| | | break; |
| | | case ErrorCode.MaxNickName: |
| | | log = "************** 昵称大于最大长度 **************"; |
| | | UnityEngine.Debug.LogWarning("************** 昵称大于最大长度 **************"); |
| | | break; |
| | | case ErrorCode.InvalidNickName: |
| | | log = "************** 昵称有非法字符 **************"; |
| | | UnityEngine.Debug.LogWarning("************** 昵称有非法字符 **************"); |
| | | break; |
| | | case ErrorCode.MaxStoreLimit: |
| | | log = "************** !购买失败,超过最大限制 **************"; |
| | | UnityEngine.Debug.LogWarning("************** !购买失败,超过最大限制 **************"); |
| | | break; |
| | | case ErrorCode.NotEnoughStoreBuy: |
| | | log = "************** !购买失败,货币不足 **************"; |
| | | UnityEngine.Debug.LogWarning("************** !购买失败,货币不足 **************"); |
| | | break; |
| | | case ErrorCode.NotOpenPassPort: |
| | | log = "************** !高级通行证购买失败,活动未开启 **************"; |
| | | UnityEngine.Debug.LogWarning("************** !高级通行证购买失败,活动未开启 **************"); |
| | | break; |
| | | case ErrorCode.AlreadyPassPort: |
| | | log = "************** !高级通行证购买失败,已经购买了 **************"; |
| | | UnityEngine.Debug.LogWarning("************** !高级通行证购买失败,已经购买了 **************"); |
| | | break; |
| | | case ErrorCode.NeedVipPassPortTakeItem: |
| | | log = "************** !领取通行证奖励失败,不是高级通行证 **************"; |
| | | UnityEngine.Debug.LogWarning("************** !领取通行证奖励失败,不是高级通行证 **************"); |
| | | break; |
| | | case ErrorCode.NeedLevelPassPortTakeItem: |
| | | log = "************** !领取通行证奖励失败,等级不足 **************"; |
| | | UnityEngine.Debug.LogWarning("************** !领取通行证奖励失败,等级不足 **************"); |
| | | break; |
| | | case ErrorCode.AlreadyPassPortTakeItem: |
| | | log = "************** !领取通行证奖励失败,已经领取了 **************"; |
| | | UnityEngine.Debug.LogWarning("************** !领取通行证奖励失败,已经领取了 **************"); |
| | | break; |
| | | case ErrorCode.InvalidPassPortBuyLevel: |
| | | log = "************** !购买通行证等级失败,购买等级小于当前等级 **************"; |
| | | UnityEngine.Debug.LogWarning("************** !购买通行证等级失败,购买等级小于当前等级 **************"); |
| | | break; |
| | | case ErrorCode.HasUnlockArenaBox: |
| | | log = "************** ! 解锁失败,已经解锁了 **************"; |
| | | UnityEngine.Debug.LogWarning("************** ! 解锁失败,已经解锁了 **************"); |
| | | break; |
| | | case ErrorCode.OtherUnlockingArenaBox: |
| | | log = "************** ! 解锁失败,另一个在解锁中 **************"; |
| | | UnityEngine.Debug.LogWarning("************** ! 解锁失败,另一个在解锁中 **************"); |
| | | break; |
| | | case ErrorCode.NotTimeTakeArenaBox: |
| | | log = "************** ! 开宝箱失败,时间没到 **************"; |
| | | UnityEngine.Debug.LogWarning("************** ! 开宝箱失败,时间没到 **************"); |
| | | break; |
| | | } |
| | | //UIManager.Instance.ShowWarningWind(log); |
| | | |
| | | } |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: dd0cad843edf8c9468d7eb9c1c57fc1a |
| | | MonoImporter: |
| | | externalObjects: {} |
| | | serializedVersion: 2 |
| | | defaultReferences: [] |
| | | executionOrder: 0 |
| | | icon: {instanceID: 0} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using UnityEngine; |
| | | |
| | | public class DoNotDestory : MonoBehaviour |
| | | { |
| | | public void Awake() |
| | | { |
| | | DontDestroyOnLoad(gameObject); |
| | | } |
| | | } |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: c0ec5249539813840acdad1e0bb1e045 |
| | | MonoImporter: |
| | | externalObjects: {} |
| | | serializedVersion: 2 |
| | | defaultReferences: [] |
| | | executionOrder: 0 |
| | | icon: {instanceID: 0} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
| | |
| | | /// LoadingScene 载入下一个场景的场景名 |
| | | /// </summary> |
| | | public static string NextSceneName = "GemBattle"; |
| | | |
| | | public static bool IsDebug = false; |
| | | public static string TestLoginUrl = "http://10.5.3.227:9000/user/login"; |
| | | public static string LoginUrl = "http://172.16.1.52:9000/user/login"; |
| | | public static bool OpenDebug = true; |
| | | |
| | | } |
| | | } |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 0236bbcdc61fb3e42bc1983e0f745ff7 |
| | | folderAsset: yes |
| | | DefaultImporter: |
| | | externalObjects: {} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | |
| | | namespace KTGMGemClient |
| | | { |
| | | /// <summary> |
| | | /// 事件中心基类 |
| | | /// </summary> |
| | | public class EventBase |
| | | { |
| | | //携带不同参数个数的委托(系统自带的Action 只有四个参数) |
| | | public delegate void CallBack(); |
| | | public delegate void CallBack<T>(T arg); |
| | | public delegate void CallBack<T, X>(T arg1, X arg2); |
| | | public delegate void CallBack<T, X, Y>(T arg1, X arg2, Y arg3); |
| | | public delegate void CallBack<T, X, Y, Z>(T arg1, X arg2, Y arg3, Z arg4); |
| | | public delegate void CallBack<T, X, Y, Z, W>(T arg1, X arg2, Y arg3, Z arg4, W arg5); |
| | | //存放各种事件的字典 |
| | | protected Dictionary<int, Delegate> m_EventTable = new Dictionary<int, Delegate>(); |
| | | |
| | | |
| | | #region 私有方法 |
| | | private void OnListenerAdding(int eventType, Delegate callback) |
| | | { |
| | | if (!m_EventTable.ContainsKey(eventType)) |
| | | { |
| | | m_EventTable.Add(eventType, null); |
| | | } |
| | | Delegate del = m_EventTable[eventType]; |
| | | //判断该事件码对应的事件类型(参数)是否一样 |
| | | if (del != null && del.GetType() != callback.GetType()) |
| | | { |
| | | throw new Exception(string.Format("尝试添加事件失败")); |
| | | } |
| | | } |
| | | |
| | | private void OnListenerRemoving(int eventType, Delegate callback) |
| | | { |
| | | if (m_EventTable.ContainsKey(eventType)) |
| | | { |
| | | Delegate del = m_EventTable[eventType]; |
| | | if (del == null) |
| | | { |
| | | throw new Exception(string.Format("移除失败,对应事件为空")); |
| | | } |
| | | else if (del.GetType() != callback.GetType()) |
| | | { |
| | | throw new Exception(string.Format("移除失败,对应事件不同")); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | throw new Exception(string.Format("移除失败,事件码为空")); |
| | | } |
| | | } |
| | | |
| | | private void OnListenerRemoved(int eventType) |
| | | { |
| | | if (m_EventTable[eventType] == null) |
| | | { |
| | | m_EventTable.Remove(eventType); |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | //下面方法自行扩展 |
| | | #region 没有参数,只传回调 |
| | | //添加事件 |
| | | public void Add(int eventType, CallBack callback) |
| | | { |
| | | OnListenerAdding(eventType, callback); |
| | | m_EventTable[eventType] = (CallBack)m_EventTable[eventType] + callback; |
| | | } |
| | | |
| | | //移除事件 |
| | | public void Remove(int eventType, CallBack callback) |
| | | { |
| | | OnListenerRemoving(eventType, callback); |
| | | m_EventTable[eventType] = (CallBack)m_EventTable[eventType] - callback; |
| | | OnListenerRemoved(eventType); |
| | | } |
| | | |
| | | //事件的广播 |
| | | public void BroadCast(int eventType) |
| | | { |
| | | Delegate del; |
| | | if (m_EventTable.TryGetValue(eventType, out del)) |
| | | { |
| | | CallBack callback = del as CallBack; |
| | | if (callback != null) |
| | | { |
| | | callback(); |
| | | } |
| | | else |
| | | { |
| | | throw new Exception(string.Format("广播事件错误,对应事件为空")); |
| | | } |
| | | } |
| | | |
| | | } |
| | | #endregion |
| | | |
| | | #region 一个参数 |
| | | |
| | | //添加事件 |
| | | public void Add<T>(int eventType, CallBack<T> callback) |
| | | { |
| | | OnListenerAdding(eventType, callback); |
| | | m_EventTable[eventType] = (CallBack<T>)m_EventTable[eventType] + callback; |
| | | } |
| | | |
| | | //移除事件 |
| | | public void Remove<T>(int eventType, CallBack<T> callback) |
| | | { |
| | | OnListenerRemoving(eventType, callback); |
| | | m_EventTable[eventType] = (CallBack<T>)m_EventTable[eventType] - callback; |
| | | OnListenerRemoved(eventType); |
| | | |
| | | } |
| | | |
| | | //事件的广播 |
| | | public void BroadCast<T>(int eventType, T arg) |
| | | { |
| | | Delegate del; |
| | | if (m_EventTable.TryGetValue(eventType, out del)) |
| | | { |
| | | CallBack<T> callback = del as CallBack<T>; |
| | | if (callback != null) |
| | | { |
| | | callback(arg); |
| | | } |
| | | else |
| | | { |
| | | throw new Exception(string.Format("广播事件错误,对应事件为空")); |
| | | } |
| | | } |
| | | |
| | | } |
| | | #endregion |
| | | |
| | | #region 两个参数 |
| | | //添加事件 |
| | | public void Add<T, X>(int eventType, CallBack<T, X> callback) |
| | | { |
| | | OnListenerAdding(eventType, callback); |
| | | m_EventTable[eventType] = (CallBack<T, X>)m_EventTable[eventType] + callback; |
| | | } |
| | | |
| | | //移除事件 |
| | | public void Remove<T, X>(int eventType, CallBack<T, X> callback) |
| | | { |
| | | OnListenerRemoving(eventType, callback); |
| | | m_EventTable[eventType] = (CallBack<T, X>)m_EventTable[eventType] - callback; |
| | | OnListenerRemoved(eventType); |
| | | |
| | | } |
| | | |
| | | //事件的广播 |
| | | public void BroadCast<T, X>(int eventType, T arg1, X arg2) |
| | | { |
| | | Delegate del; |
| | | if (m_EventTable.TryGetValue(eventType, out del)) |
| | | { |
| | | CallBack<T, X> callback = del as CallBack<T, X>; |
| | | if (callback != null) |
| | | { |
| | | callback(arg1, arg2); |
| | | } |
| | | else |
| | | { |
| | | throw new Exception(string.Format("广播事件错误,对应事件为空")); |
| | | } |
| | | } |
| | | |
| | | } |
| | | #endregion |
| | | |
| | | #region 三个参数 |
| | | //添加事件 |
| | | public void Add<T, X, Y>(int eventType, CallBack<T, X, Y> callback) |
| | | { |
| | | OnListenerAdding(eventType, callback); |
| | | m_EventTable[eventType] = (CallBack<T, X, Y>)m_EventTable[eventType] + callback; |
| | | } |
| | | |
| | | //移除事件 |
| | | public void Remove<T, X, Y>(int eventType, CallBack<T, X, Y> callback) |
| | | { |
| | | OnListenerRemoving(eventType, callback); |
| | | m_EventTable[eventType] = (CallBack<T, X, Y>)m_EventTable[eventType] - callback; |
| | | OnListenerRemoved(eventType); |
| | | |
| | | } |
| | | |
| | | //事件的广播 |
| | | public void BroadCast<T, X, Y>(int eventType, T arg1, X arg2, Y arg3) |
| | | { |
| | | Delegate del; |
| | | if (m_EventTable.TryGetValue(eventType, out del)) |
| | | { |
| | | CallBack<T, X, Y> callback = del as CallBack<T, X, Y>; |
| | | if (callback != null) |
| | | { |
| | | callback(arg1, arg2, arg3); |
| | | } |
| | | else |
| | | { |
| | | throw new Exception(string.Format("广播事件错误,对应事件为空")); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region 四个参数 |
| | | //添加事件 |
| | | public void Add<T, X, Y, Z>(int eventType, CallBack<T, X, Y, Z> callback) |
| | | { |
| | | OnListenerAdding(eventType, callback); |
| | | m_EventTable[eventType] = (CallBack<T, X, Y, Z>)m_EventTable[eventType] + callback; |
| | | } |
| | | |
| | | //移除事件 |
| | | public void Remove<T, X, Y, Z>(int eventType, CallBack<T, X, Y, Z> callback) |
| | | { |
| | | OnListenerRemoving(eventType, callback); |
| | | m_EventTable[eventType] = (CallBack<T, X, Y, Z>)m_EventTable[eventType] - callback; |
| | | OnListenerRemoved(eventType); |
| | | |
| | | } |
| | | |
| | | //事件的广播 |
| | | public void BroadCast<T, X, Y, Z>(int eventType, T arg1, X arg2, Y arg3, Z arg4) |
| | | { |
| | | Delegate del; |
| | | if (m_EventTable.TryGetValue(eventType, out del)) |
| | | { |
| | | CallBack<T, X, Y, Z> callback = del as CallBack<T, X, Y, Z>; |
| | | if (callback != null) |
| | | { |
| | | callback(arg1, arg2, arg3, arg4); |
| | | } |
| | | else |
| | | { |
| | | throw new Exception(string.Format("广播事件错误,对应事件为空")); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | |
| | | #region 五个参数 |
| | | //添加事件 |
| | | public void Add<T, X, Y, Z, W>(int eventType, CallBack<T, X, Y, Z, W> callback) |
| | | { |
| | | OnListenerAdding(eventType, callback); |
| | | m_EventTable[eventType] = (CallBack<T, X, Y, Z, W>)m_EventTable[eventType] + callback; |
| | | } |
| | | |
| | | //移除事件 |
| | | public void Remove<T, X, Y, Z, W>(int eventType, CallBack<T, X, Y, Z, W> callback) |
| | | { |
| | | OnListenerRemoving(eventType, callback); |
| | | m_EventTable[eventType] = (CallBack<T, X, Y, Z, W>)m_EventTable[eventType] - callback; |
| | | OnListenerRemoved(eventType); |
| | | |
| | | } |
| | | |
| | | //事件的广播 |
| | | public void BroadCast<T, X, Y, Z, W>(int eventType, T arg1, X arg2, Y arg3, Z arg4, W arg5) |
| | | { |
| | | Delegate del; |
| | | if (m_EventTable.TryGetValue(eventType, out del)) |
| | | { |
| | | CallBack<T, X, Y, Z, W> callback = del as CallBack<T, X, Y, Z, W>; |
| | | if (callback != null) |
| | | { |
| | | callback(arg1, arg2, arg3, arg4, arg5); |
| | | } |
| | | else |
| | | { |
| | | throw new Exception(string.Format("广播事件错误,对应事件为空")); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 6c80f8f5d59ea8e429ec761f4310c999 |
| | | MonoImporter: |
| | | externalObjects: {} |
| | | serializedVersion: 2 |
| | | defaultReferences: [] |
| | | executionOrder: 0 |
| | | icon: {instanceID: 0} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | |
| | | /** |
| | | * 模块,UI逻辑事件处理中心 |
| | | * @Author: chenxin |
| | | * @Date: 2020-09-02 17:34:25 |
| | | */ |
| | | namespace KTGMGemClient |
| | | { |
| | | public class EventCenter : EventBase |
| | | { |
| | | private EventCenter() { } |
| | | private static EventCenter ins = new EventCenter(); |
| | | public static EventCenter Ins { get { return ins; } private set { } } |
| | | } |
| | | } |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 9c9cd972e2e717542a49d8e9f887f0e1 |
| | | MonoImporter: |
| | | externalObjects: {} |
| | | serializedVersion: 2 |
| | | defaultReferences: [] |
| | | executionOrder: 0 |
| | | icon: {instanceID: 0} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | |
| | | namespace KTGMGemClient |
| | | { |
| | | |
| | | /// <summary> |
| | | /// 所有事件枚举 |
| | | /// </summary> |
| | | public enum EventType |
| | | { |
| | | // MasterSocket连接结果 |
| | | MasterSocketConnectResult, |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: b54dbf06a816feb419ba97f345f2cd0e |
| | | MonoImporter: |
| | | externalObjects: {} |
| | | serializedVersion: 2 |
| | | defaultReferences: [] |
| | | executionOrder: 0 |
| | | icon: {instanceID: 0} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | /** |
| | | * 消息事件 例:SocketEvent.Ins.Add<Google.Protobuf.IMessage>((int)Opcode.LoginS2C, LoginS2C); |
| | | * @Author: chenxin |
| | | * @Date: 2020-09-02 17:03:27 |
| | | */ |
| | | namespace KTGMGemClient |
| | | { |
| | | public sealed class SocketEvent : EventBase |
| | | { |
| | | private SocketEvent() { } |
| | | private static SocketEvent ins = new SocketEvent(); |
| | | public static SocketEvent Ins { get { return ins; } private set { } } |
| | | } |
| | | } |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: dc9d985ab44e50844a2f337b25b1a894 |
| | | MonoImporter: |
| | | externalObjects: {} |
| | | serializedVersion: 2 |
| | | defaultReferences: [] |
| | | executionOrder: 0 |
| | | icon: {instanceID: 0} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | using UnityEngine; |
| | | |
| | | public class GA_SDK_Manager : MonoBehaviour |
| | | { |
| | | private static GA_SDK_Manager _Ins; |
| | | public static GA_SDK_Manager Ins |
| | | { |
| | | get |
| | | { |
| | | return _Ins; |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// Awake is called when the script instance is being loaded. |
| | | /// </summary> |
| | | void Awake() |
| | | { |
| | | _Ins = this; |
| | | } |
| | | |
| | | public string GetDeviceId() |
| | | { |
| | | return TalkingDataGA.GetDeviceId(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 初始化 |
| | | /// </summary> |
| | | /// <param name="channelId">渠道id</param> |
| | | public void SDKInit(string channelId) |
| | | { |
| | | Debug.Log("Unity SDK init begin channelId:" + channelId); |
| | | TalkingDataGA.OnStart("B220F5C737384030947B202F19E32086", channelId);//appID是定死的 |
| | | Debug.Log("Unity SDK init completed "); |
| | | } |
| | | |
| | | TDGAAccount account;//当前账户 |
| | | |
| | | /// <summary> |
| | | /// 登录,使用自定义的 |
| | | /// </summary> |
| | | /// <param name="deviceID"></param> |
| | | public void Login(string deviceID) |
| | | { |
| | | account = TDGAAccount.SetAccount(TalkingDataGA.GetDeviceId()); |
| | | account.SetAccountType(AccountType.ANONYMOUS); |
| | | } |
| | | |
| | | |
| | | private void OnDestroy() |
| | | { |
| | | Debug.Log("onDestroy"); |
| | | TalkingDataGA.OnEnd(); |
| | | } |
| | | } |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 674cc1556f44ec642b009828ff006265 |
| | | folderAsset: yes |
| | | DefaultImporter: |
| | | externalObjects: {} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using UnityEngine; |
| | | using UnityEngine.SceneManagement; |
| | | using KTGMGemClient; |
| | | using UnityEngine.UI; |
| | | using LitJson; |
| | | using UnityEngine.Networking; |
| | | using Protobuf; |
| | | using Google.Protobuf; |
| | | |
| | | public class LoginUI : MonoBehaviour |
| | | { |
| | | private AsyncOperation async = null; |
| | | bool isLogining; |
| | | private JsonData loginData; |
| | | |
| | | // Start is called before the first frame update |
| | | void Start() |
| | | { |
| | | GA_SDK_Manager.Ins.SDKInit(ChannelID.Gm.ToString()); |
| | | isLogining = false; |
| | | |
| | | transform.Find("Panel/Button").GetComponent<Button>().onClick.AddListener(OnClickLoginBtn); |
| | | |
| | | // if (Application.platform == RuntimePlatform.Android) |
| | | // { |
| | | // GetetDeviceIMEI();//获取安卓手机IMEI |
| | | // } |
| | | // else if (Application.platform == RuntimePlatform.WindowsEditor) |
| | | // { |
| | | // imei0 = "MyTestGemBattle1"; |
| | | // } |
| | | |
| | | imei0 = GA_SDK_Manager.Ins. GetDeviceId();//使用设备ID |
| | | |
| | | } |
| | | |
| | | private void OnEnable() |
| | | { |
| | | SocketEvent.Ins.Add<IMessage>((int)Opcode.LoginS2C, LoginS2C); |
| | | |
| | | } |
| | | |
| | | private void OnDestroy() |
| | | { |
| | | SocketEvent.Ins.Remove<IMessage>((int)Opcode.LoginS2C, LoginS2C); |
| | | |
| | | } |
| | | |
| | | #region 获得安卓手机上的IMEI号 |
| | | public string imei0 = ""; |
| | | public string imei1 = ""; |
| | | public string meid = ""; |
| | | |
| | | void GetetDeviceIMEI() |
| | | { |
| | | var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); |
| | | var context = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); |
| | | var telephoneyManager = context.Call<AndroidJavaObject>("getSystemService", "phone"); |
| | | imei0 = telephoneyManager.Call<string>("getImei", 0);//如果手机双卡 双待 就会有两个MIEI号 |
| | | imei1 = telephoneyManager.Call<string>("getImei", 1); |
| | | meid = telephoneyManager.Call<string>("getMeid");//电信的手机 是MEID |
| | | |
| | | CommonDebugHelper.Debug($"获取到了安卓手机的IMEI!!! imei0:{imei0} imei1:{imei1} meid:{meid}"); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | private void OnClickLoginBtn() |
| | | { |
| | | Debug.Log("登录"); |
| | | LoginRequest(); |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 登录请求处理 |
| | | /// </summary> |
| | | /// <param name="req"></param> |
| | | private void LoginRequest() |
| | | { |
| | | if (!isLogining) |
| | | { |
| | | isLogining = true; |
| | | string url = GameConfig.IsDebug ? GameConfig.TestLoginUrl : GameConfig.LoginUrl; |
| | | JsonData data = new JsonData(); |
| | | data["account"] = imei0; |
| | | data["password"] = "123456"; |
| | | data["channelid"] = (int)ChannelID.Gm; |
| | | byte[] postBytes = System.Text.Encoding.Default.GetBytes(data.ToJson()); |
| | | StartCoroutine(Post(url, postBytes)); |
| | | } |
| | | } |
| | | |
| | | IEnumerator Post(string url, byte[] postBytes) |
| | | { |
| | | UnityWebRequest request = UnityWebRequest.Post(url, "POST"); |
| | | request.uploadHandler = new UploadHandlerRaw(postBytes); |
| | | request.downloadHandler = new DownloadHandlerBuffer(); |
| | | request.SetRequestHeader("Content-Type", "application/json"); |
| | | yield return request.SendWebRequest(); |
| | | |
| | | if (request.isDone) |
| | | { |
| | | string text = request.downloadHandler.text; |
| | | loginData = JsonMapper.ToObject(text); |
| | | if (loginData.Keys.Contains("errorcode")) |
| | | { |
| | | JsonData errorData = loginData["errorcode"]; |
| | | isLogining = false; |
| | | CommonDebugHelper.DebugSocket(int.Parse(errorData.ToString())); |
| | | |
| | | yield break; |
| | | } |
| | | |
| | | if (!string.IsNullOrEmpty(text)) |
| | | { |
| | | EventCenter.Ins.Add<bool>((int)KTGMGemClient.EventType.MasterSocketConnectResult, MasterSocketConnectSuccess); |
| | | MasterSocket.Ins.MasterIp = loginData["masterip"].ToString(); |
| | | MasterSocket.Ins.MasterPort = int.Parse(loginData["masterport"].ToString()); |
| | | MasterSocket.Ins.StartConnect(); |
| | | |
| | | // System.DateTime dt = GameUtils.GetTime(loginData["timestamp"].ToString()); |
| | | // GameConfig.dateTime = dt; |
| | | // GameConfig.timeSpan = dt - System.DateTime.Now; |
| | | } |
| | | else |
| | | { |
| | | isLogining = false; |
| | | //UIManager.Instance.ShowWarningWind("没有登录数据返回,text:" + text); |
| | | //CommonDebugHelper.DebugError("--------------------- 没有登录数据返回 ---------------------text:" + text); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | isLogining = false; |
| | | //UIManager.Instance.ShowWarningWind(request.error); |
| | | |
| | | //CommonDebugHelper.DebugError("登录失败 request.error" + request.error); |
| | | } |
| | | } |
| | | |
| | | private void MasterSocketConnectSuccess(bool res) |
| | | { |
| | | if (res) |
| | | { |
| | | Login_C2S login = new Login_C2S(); |
| | | login.Username = loginData["username"].ToString(); |
| | | login.Channel = (int)ChannelID.Gm; |
| | | login.SessionKey = loginData["sessionKey"].ToString(); |
| | | MasterSocket.Ins.SendMsg(Opcode.LoginC2S, login); |
| | | } |
| | | else |
| | | { |
| | | CommonDebugHelper.DebugError("Socket 链接失败了"); |
| | | } |
| | | } |
| | | |
| | | private void LoginS2C(IMessage msg) |
| | | { |
| | | Login_S2C login = (Login_S2C)msg; |
| | | if (login.Errorcode == 0) |
| | | { |
| | | Debug.Log("--------------------- 登录成功 ---------------------"); |
| | | UserDataMsg userData = login.Userdata; |
| | | |
| | | GA_SDK_Manager.Ins.Login(imei0); |
| | | //StartCoroutine(loginMy()); |
| | | StartCoroutine(LoadScene()); |
| | | |
| | | } |
| | | else |
| | | { |
| | | CommonDebugHelper.DebugSocket(login.Errorcode); |
| | | isLogining = false; |
| | | } |
| | | } |
| | | |
| | | |
| | | IEnumerator LoadScene() |
| | | { |
| | | async = SceneManager.LoadSceneAsync(GameConfig.NextSceneName); |
| | | async.allowSceneActivation = true; |
| | | /*while (!async.isDone) |
| | | { |
| | | |
| | | if (async.progress < 0.9f) |
| | | progressValue = async.progress; |
| | | else |
| | | progressValue = 1.0f; |
| | | slider.value = progressValue; |
| | | progress.text = (int)(slider.value * 100) + " %"; |
| | | |
| | | if (async.progress >= 0.89) |
| | | { |
| | | Debug.Log("进展时间分别是:" + async.progress + "," + totalTime); |
| | | if( totalTime >= 3.0f ) |
| | | async.allowSceneActivation = true; |
| | | |
| | | progress.text = "按任意键继续"; |
| | | if (Input.anyKeyDown) |
| | | { |
| | | async.allowSceneActivation = true; |
| | | } |
| | | |
| | | } |
| | | |
| | | //yield return null; |
| | | }*/ |
| | | yield return null; |
| | | } |
| | | |
| | | |
| | | IEnumerator loginMy() |
| | | { |
| | | int displayProgress = 0; |
| | | int toProgress = 0; |
| | | AsyncOperation op = SceneManager.LoadSceneAsync(GameConfig.NextSceneName); |
| | | op.allowSceneActivation = false; |
| | | while (op.progress < 0.9f) //此处如果是 <= 0.9f 则会出现死循环所以必须小0.9 |
| | | { |
| | | toProgress = (int)op.progress * 100; |
| | | while (displayProgress < toProgress) |
| | | { |
| | | ++displayProgress; |
| | | SetLoadingPercentage(displayProgress); |
| | | yield return new WaitForEndOfFrame();//ui渲染完成之后 |
| | | } |
| | | } |
| | | toProgress = 100; |
| | | while (displayProgress < toProgress) |
| | | { |
| | | ++displayProgress; |
| | | SetLoadingPercentage(displayProgress); |
| | | yield return new WaitForEndOfFrame(); |
| | | } |
| | | op.allowSceneActivation = true; |
| | | yield break; |
| | | |
| | | } |
| | | |
| | | private void SetLoadingPercentage(int displayProgress) |
| | | { |
| | | CommonDebugHelper.Debug($"当前进度{displayProgress}%"); |
| | | |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 5671a738ca063f047a1619ba0c199f45 |
| | | MonoImporter: |
| | | externalObjects: {} |
| | | serializedVersion: 2 |
| | | defaultReferences: [] |
| | | executionOrder: 0 |
| | | icon: {instanceID: 0} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: fb488c6ad5dea3846997a0be584afee4 |
| | | folderAsset: yes |
| | | DefaultImporter: |
| | | externalObjects: {} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | using System; |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using Protobuf; |
| | | using UnityEngine; |
| | | |
| | | namespace KTGMGemClient |
| | | { |
| | | public class ManagerRoot : MonoBehaviour |
| | | { |
| | | |
| | | //private bool canChangeScene = false; |
| | | |
| | | public void Awake() |
| | | { |
| | | gameObject.AddComponent<DoNotDestory>(); |
| | | gameObject.AddComponent<MasterSocket>(); |
| | | gameObject.AddComponent<GA_SDK_Manager>(); |
| | | |
| | | //gameObject.AddComponent<ErrorLogOnGUIMyTools>(); |
| | | //gameObject.AddComponent<JsonDataReader>(); |
| | | |
| | | } |
| | | |
| | | // public void AfterRead() |
| | | // { |
| | | // JsonDataReader.Instance.StartRead(() => |
| | | // { |
| | | // StartCoroutine(CloseUpdateCanvas()); |
| | | // }); |
| | | |
| | | // } |
| | | |
| | | // IEnumerator CloseUpdateCanvas() |
| | | // { |
| | | // yield return new WaitForSeconds(1f); |
| | | // canChangeScene = true; |
| | | // //gameObject.AddComponent<GameEnter>(); |
| | | // yield return new WaitForSeconds(1f); |
| | | // GameObject.Find("Canvas").SetActive(false); |
| | | |
| | | // } |
| | | |
| | | // private void OnGUI() |
| | | // { |
| | | // // if (canChangeScene) |
| | | // // { |
| | | // // GUILayout.BeginArea(new Rect(5, 460, 150, 300)); |
| | | // // if (GUILayout.Button("GM", GUILayout.Width(150), GUILayout.Height(70))) |
| | | // // { |
| | | // // //UIManager.Instance.ShowWind("GmWin"); |
| | | // // } |
| | | |
| | | // // GUILayout.EndArea(); |
| | | // // } |
| | | // } |
| | | } |
| | | } |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: a2dbd68be62ff4e4dbab85b3bbae1547 |
| | | MonoImporter: |
| | | externalObjects: {} |
| | | serializedVersion: 2 |
| | | defaultReferences: [] |
| | | executionOrder: 0 |
| | | icon: {instanceID: 0} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using UnityEngine; |
| | | using Protobuf; |
| | | using System.IO; |
| | | using System.Net; |
| | | using System.Net.Sockets; |
| | | using Google.Protobuf; |
| | | |
| | | namespace KTGMGemClient |
| | | { |
| | | public class BaseSocket : MonoBehaviour |
| | | { |
| | | |
| | | |
| | | |
| | | |
| | | protected static int NET_HEADER_SIZE = 4; |
| | | |
| | | //protected Dictionary<short, System.Type> packetReflections = new Dictionary<short, System.Type>(); |
| | | |
| | | protected Socket tcpSock; |
| | | |
| | | string ip; |
| | | int port; |
| | | |
| | | short remaining = 0; |
| | | short size = 0; |
| | | Opcode opcode; |
| | | |
| | | |
| | | protected virtual void OnConnected(bool connected) |
| | | { |
| | | |
| | | } |
| | | protected virtual void OnData(Opcode opcode, IMessage msg) |
| | | { |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | public void Connect(string _host, int _port) |
| | | { |
| | | |
| | | NetMapping.Init(); |
| | | //IPHostEntry host = Dns.GetHostEntry(_host); |
| | | //endPoint = new IPEndPoint(host.AddressList[0], _port); |
| | | ip = _host; |
| | | port = _port; |
| | | //icount = 0; |
| | | |
| | | |
| | | |
| | | //if(Defines.DebugNetWork) |
| | | // Debug.Log("StartConnect New Socket"); |
| | | tcpSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); |
| | | //_hasRecvBuf = false; |
| | | //! for next loop |
| | | //yield return 0; |
| | | |
| | | // Setup our options: |
| | | // * NoDelay - don't use packet coalescing |
| | | // * DontLinger - don't keep sockets around once they've been disconnected |
| | | tcpSock.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.NoDelay, true); |
| | | tcpSock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.DontLinger, true); |
| | | |
| | | |
| | | //tcpSock.ReceiveTimeout = SOCKET_CONNECT_TIME_OUT * 1000; |
| | | //tcpSock.SendTimeout = SOCKET_SEND_TIME_OUT * 1000; |
| | | |
| | | //if(Defines.DebugNetWork) |
| | | // Debug.Log("Net Connect:"+__ip+":"+__port); |
| | | tcpSock.BeginConnect(ip, port, OnEndConnect, tcpSock); |
| | | |
| | | //float connectingTime = 0; |
| | | |
| | | //while (!tcpSock.Connected && connectingTime <= SOCKET_CONNECT_TIME_OUT) |
| | | //{ |
| | | // //if(Defines.DebugNetWork) |
| | | // // Debug.Log("NetConnecting: Time:"+_connectingTime); |
| | | // connectingTime += Time.deltaTime; |
| | | // yield return 0; |
| | | //} |
| | | |
| | | } |
| | | |
| | | private void OnEndConnect(System.IAsyncResult ar) |
| | | { |
| | | try |
| | | { |
| | | Socket client = (Socket)ar.AsyncState; |
| | | if (client != null) |
| | | { |
| | | client.EndConnect(ar); |
| | | } |
| | | OnConnected(true); |
| | | } |
| | | catch (System.Exception e) |
| | | { |
| | | Debug.Log(e); |
| | | OnConnected(false); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | protected IEnumerator StartRecv() |
| | | { |
| | | //if(!_tcpSock.Connected) |
| | | // yield break; |
| | | |
| | | CircleBuffer receiveBuffer = new CircleBuffer(); |
| | | |
| | | size = 0; |
| | | remaining = 0; |
| | | opcode = 0; |
| | | |
| | | //float connectingTime = 0; |
| | | while (true) |
| | | { |
| | | yield return new WaitForEndOfFrame(); |
| | | |
| | | if (tcpSock == null || !tcpSock.Connected) |
| | | yield break; |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | // connectingTime += Time.deltaTime; |
| | | |
| | | //DEBUG MODE DISABLE TRY CATCH... |
| | | // must have ,just in some socketException case |
| | | |
| | | if (tcpSock.Poll(1, SelectMode.SelectRead)) |
| | | { |
| | | // connectingTime = 0; |
| | | |
| | | // try |
| | | // { |
| | | //byte[] buf = new byte[CircleBuffer.MAX_RECEIVE_BUFFER_SIZE]; |
| | | |
| | | int len = tcpSock.Receive(receiveBuffer.DataBuffer, receiveBuffer.Length, receiveBuffer.LeftSpaceSize, SocketFlags.None); |
| | | receiveBuffer.Enlarge(len); |
| | | // _totalBytesReceived += len; |
| | | |
| | | // } |
| | | // catch (System.Exception) |
| | | // { |
| | | // Debug.LogWarning(e); |
| | | // yield break; |
| | | // } |
| | | |
| | | OnReceive(receiveBuffer); |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | void OnReceive(CircleBuffer segment) |
| | | { |
| | | //Debug.Log("OnReceive: " ); |
| | | //byte[] recvBuffer = segment.DataBuffer; |
| | | |
| | | do |
| | | { |
| | | //const int offset = 0; |
| | | |
| | | |
| | | if (remaining == 0) |
| | | { |
| | | if (segment.Length < NET_HEADER_SIZE) |
| | | return; |
| | | //_option = recvBuffer[4]; |
| | | remaining = size = bytesToShort(segment.DataBuffer, 0);//recvBuffer[offset] | recvBuffer[offset + 1] << 8; |
| | | opcode = (Opcode)bytesToShort(segment.DataBuffer, 2);//(OpcodeType)(recvBuffer[offset + 2] | recvBuffer[offset + 3] << 8); |
| | | |
| | | } |
| | | |
| | | if (remaining > 0 && remaining > segment.Length) |
| | | return; |
| | | |
| | | // bool compressed = ((_option & PACKAGE_OPTION_MASK_COMPRESS) == PACKAGE_OPTION_MASK_COMPRESS); |
| | | //if(GameDefine.isDevelopBuild) |
| | | //#if UNITY_EDITOR |
| | | Debug.Log("rev:" + opcode.ToString() + " Size:" + size); |
| | | //#endif |
| | | //Stream stm = null; |
| | | |
| | | |
| | | IMessage message = DesrializePacket(opcode, segment, NET_HEADER_SIZE, size); |
| | | OnData(opcode, message); |
| | | // Stream stm = new MemoryStream(recvBuffer, NET_HEADER_SIZE, size - NET_HEADER_SIZE); |
| | | |
| | | //if (compressed) |
| | | //{ |
| | | // stm = new InflaterInputStream(stm); |
| | | //} |
| | | |
| | | // Packet pkt = packetMgr.DeserializeGamePacket(_opcode, stm); |
| | | |
| | | // packetMgr.HandleGamePacket(pkt); |
| | | |
| | | //UIManager.I.ReceiveSocketType(pkt.OpCode); |
| | | |
| | | // _hasRecvBuf = true; |
| | | segment.Shrink(size); |
| | | size = remaining = 0; |
| | | } while (segment.Length > 0); |
| | | |
| | | //return ; |
| | | } |
| | | |
| | | public void SendMsg(Opcode _opcode, IMessage _message) |
| | | { |
| | | |
| | | byte[] databytes = _message.ToByteArray(); |
| | | |
| | | |
| | | short send_size = (short)(databytes.Length + NET_HEADER_SIZE);//+ 2; |
| | | |
| | | byte[] protobuf = new byte[send_size]; |
| | | |
| | | //bool compressed = ((_option & PACKAGE_OPTION_MASK_COMPRESS) == PACKAGE_OPTION_MASK_COMPRESS); |
| | | this.shortToBytes(send_size, ref protobuf, 0); |
| | | this.shortToBytes((short)_opcode, ref protobuf, 2); |
| | | System.Buffer.BlockCopy(databytes, 0, protobuf, NET_HEADER_SIZE, databytes.Length); |
| | | |
| | | |
| | | tcpSock.Send(protobuf); |
| | | |
| | | //MemoryStream ms = new MemoryStream(); |
| | | |
| | | ////FastBuf.BufferWriter bw = new FastBuf.BufferWriter(ms); |
| | | //ms.SetLength(0); |
| | | //send_pak.PacketObject.setSession(pid, key); |
| | | //packetMgr.SerializePacket(ms, send_pak.PacketObject); |
| | | |
| | | //int size = (int)(ms.Length) + SEND_HEADER_SIZE;//+ 2; |
| | | |
| | | //byte[] protobuf = new byte[size]; |
| | | |
| | | ////bool compressed = ((_option & PACKAGE_OPTION_MASK_COMPRESS) == PACKAGE_OPTION_MASK_COMPRESS); |
| | | |
| | | //MakePacketHeader(ref protobuf, size, (short)send_pak.OpCode, pid); |
| | | |
| | | //ms.Position = 0; |
| | | //ms.Read(protobuf, SEND_HEADER_SIZE, (int)ms.Length); |
| | | |
| | | //if (send_pak.OpCode != OpcodeType.C2S_LOGIN) |
| | | //{ |
| | | // //byte[] encrypt_data = protobuf + SEND_HEADER_SIZE; |
| | | // RC4.Cipher(ref protobuf, SEND_HEADER_SIZE, rc4key + (icount).ToString()); |
| | | //} |
| | | |
| | | ////if(Application.isEditor||Defines.DebugNetWork) |
| | | |
| | | //_totalBytesSent += protobuf.Length; |
| | | //try |
| | | //{ |
| | | // _tcpSock.Send(protobuf); |
| | | //} |
| | | //catch (System.Exception) |
| | | //{ |
| | | // return false; |
| | | //} |
| | | //return true; |
| | | |
| | | } |
| | | |
| | | private void shortToBytes(short s, ref byte[] bytes, int offset) |
| | | { |
| | | bytes[offset + 0] = (byte)s; |
| | | bytes[offset + 1] = (byte)(s >> 8); |
| | | |
| | | } |
| | | |
| | | private short bytesToShort(byte[] bytes, int offset) |
| | | { |
| | | |
| | | return (short)((bytes[offset] & 0xFF) | ((bytes[offset + 1] & 0xFF) << 8)); |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | private IMessage DesrializePacket(Opcode opcode, CircleBuffer circleBuffer, int offset, int size) |
| | | { |
| | | //if (this._packetReflections.Count == 0) |
| | | //{ |
| | | |
| | | //} |
| | | System.Type optype; |
| | | |
| | | if (NetMapping.packetReflections.TryGetValue(opcode, out optype)) |
| | | { |
| | | if (null == optype) |
| | | { |
| | | return null; |
| | | } |
| | | Stream stream = new MemoryStream(circleBuffer.DataBuffer, offset, size - offset); |
| | | |
| | | IMessage IMperson = System.Activator.CreateInstance(optype) as IMessage; |
| | | // Person2 p1 = new Person2(); |
| | | return IMperson.Descriptor.Parser.ParseFrom(stream); |
| | | //return new Packet(opcode, msg); |
| | | |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 关闭socket |
| | | /// </summary> |
| | | protected void Close() |
| | | { |
| | | if (tcpSock != null) |
| | | { |
| | | CommonDebugHelper.Debug("开始关闭Socket"); |
| | | if (tcpSock.Connected) tcpSock.Shutdown(SocketShutdown.Both); |
| | | tcpSock.Close(); |
| | | tcpSock = null; |
| | | |
| | | StopCoroutine(StartRecv()); |
| | | } |
| | | } |
| | | |
| | | protected int reconnectTime = 0;//重连次数 |
| | | /// <summary> |
| | | /// 断线重连 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | IEnumerator Reconnect() |
| | | { |
| | | Close(); |
| | | reconnectTime++; |
| | | Connect(ip, port); |
| | | if (!tcpSock.Connected) |
| | | { |
| | | if (reconnectTime <= 3) |
| | | { |
| | | yield return new WaitForSecondsRealtime(5); |
| | | StartCoroutine(Reconnect()); |
| | | } |
| | | else |
| | | { |
| | | CommonDebugHelper.DebugError("重连超过3次,确定是断线了"); |
| | | } |
| | | |
| | | } |
| | | else |
| | | { |
| | | CommonDebugHelper.Debug("重连成功"); |
| | | reconnectTime = 0; |
| | | StartCoroutine(StartRecv()); |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: a914b2a2c1ec73d42947c3d23bb76664 |
| | | MonoImporter: |
| | | externalObjects: {} |
| | | serializedVersion: 2 |
| | | defaultReferences: [] |
| | | executionOrder: 0 |
| | | icon: {instanceID: 0} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | //====================================== |
| | | // Copyright (C) 2014-2015 xkMob Technology Co., Ltd. |
| | | // All rights reserved |
| | | // |
| | | // filename :CircleBuffer.cs |
| | | // description : |
| | | //====================================== |
| | | using System; |
| | | using System.Collections; |
| | | |
| | | |
| | | public class CircleBuffer |
| | | { |
| | | |
| | | public static int MAX_RECEIVE_BUFFER_SIZE = 1024 * 2 * 1024; // 32k |
| | | |
| | | public int Length |
| | | { |
| | | get; |
| | | internal set; |
| | | } |
| | | public byte[] DataBuffer |
| | | { |
| | | get; |
| | | internal set; |
| | | } |
| | | public int LeftSpaceSize |
| | | { |
| | | get |
| | | { |
| | | return MAX_RECEIVE_BUFFER_SIZE - Length; |
| | | } |
| | | } |
| | | |
| | | |
| | | public CircleBuffer() |
| | | { |
| | | DataBuffer = new byte[MAX_RECEIVE_BUFFER_SIZE]; |
| | | //Offset = 0; |
| | | Length = 0; |
| | | } |
| | | public void Enlarge(int bufLength) |
| | | { |
| | | //Helpers.DebugAssert(Length + bufLength <= MAX_RECEIVE_BUFFER_SIZE); |
| | | //if(Length + bufLength > SocketMgr.MAX_RECEIVE_BUFFER_SIZE) |
| | | |
| | | // Debug.LogError("CircleBuffer Enlarge Out of Range "); |
| | | |
| | | //Array.Copy(buf, 0, DataBuffer, Length, bufLength); |
| | | Length += bufLength; |
| | | |
| | | } |
| | | public void Shrink(int size) |
| | | { |
| | | if (size >= Length) |
| | | Length = 0; |
| | | else |
| | | { |
| | | Array.Copy(DataBuffer, size, DataBuffer, 0, Length - size); |
| | | Length -= size; |
| | | } |
| | | } |
| | | } |
| | | |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 3d1fd51dbc2da0a4baf10185e2d8540b |
| | | MonoImporter: |
| | | externalObjects: {} |
| | | serializedVersion: 2 |
| | | defaultReferences: [] |
| | | executionOrder: 0 |
| | | icon: {instanceID: 0} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
New file |
| | |
| | | using System; |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using UnityEngine; |
| | | using Protobuf; |
| | | using Google.Protobuf; |
| | | |
| | | namespace KTGMGemClient |
| | | { |
| | | public class MasterSocket : BaseSocket |
| | | { |
| | | private static MasterSocket _Ins; |
| | | public static MasterSocket Ins{ |
| | | get{ |
| | | return _Ins; |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// Awake is called when the script instance is being loaded. |
| | | /// </summary> |
| | | void Awake() |
| | | { |
| | | _Ins=this; |
| | | } |
| | | public string MasterIp; |
| | | public int MasterPort; |
| | | |
| | | /// <summary> |
| | | /// 建立tcp链接 |
| | | /// </summary> |
| | | public void StartConnect() |
| | | { |
| | | Connect(MasterIp, MasterPort); |
| | | StartCoroutine(StartRecv()); |
| | | } |
| | | |
| | | protected override void OnConnected(bool connected) |
| | | { |
| | | Debug.Log("connected master:" + connected); |
| | | EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.MasterSocketConnectResult, connected); |
| | | } |
| | | |
| | | protected override void OnData(Opcode opcode, IMessage msg) |
| | | { |
| | | Debug.Log("on data: " + opcode + " msg:" + msg); |
| | | SocketEvent.Ins.BroadCast((int)opcode, msg); |
| | | } |
| | | |
| | | public void SetTestData(Opcode opcode, IMessage msg){ |
| | | CommonDebugHelper.Debug("开始使用测试假数据"); |
| | | OnData(opcode,msg); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// Callback sent to all game objects before the application is quit. |
| | | /// </summary> |
| | | void OnApplicationQuit() |
| | | { |
| | | Close(); |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 2c5d1a0acc46c6c4d922e093fc11af32 |
| | | MonoImporter: |
| | | externalObjects: {} |
| | | serializedVersion: 2 |
| | | defaultReferences: [] |
| | | executionOrder: 0 |
| | | icon: {instanceID: 0} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
| | |
| | | serializedVersion: 2 |
| | | m_Scenes: |
| | | - enabled: 1 |
| | | path: Assets/Scenes/TestTalkingData.unity |
| | | guid: 415e09a546f94cf4b883227ff1be6086 |
| | | - enabled: 1 |
| | | path: Assets/Scenes/MainManuScene.unity |
| | | guid: 520ddc4fdac3ea246b57984ad40aea6c |
| | | - enabled: 1 |