Merge branch 'develop' of https://git.pthub.vn/Unity/perfect-world-unity into feature/update-ui
This commit is contained in:
@@ -15,7 +15,7 @@ MonoBehaviour:
|
||||
m_DefaultGroup: 712e3991f28e549e7a56ee582a977810
|
||||
m_currentHash:
|
||||
serializedVersion: 2
|
||||
Hash: 7485ec100318cf3e6317baa9f1a495cc
|
||||
Hash: 00000000000000000000000000000000
|
||||
m_OptimizeCatalogSize: 0
|
||||
m_BuildRemoteCatalog: 0
|
||||
m_CatalogRequestsTimeout: 0
|
||||
|
||||
@@ -9450,13 +9450,6 @@ MonoBehaviour:
|
||||
- equipment
|
||||
- models
|
||||
FlaggedDuringContentUpdateRestriction: 0
|
||||
- m_GUID: 5b277a1f2f5574e50a73d3d5a97e8c0c
|
||||
m_Address: "models/npcs/\u602A\u7269/2013/\u82B1\u8C79/\u82B1\u8C79.ecm"
|
||||
m_ReadOnly: 0
|
||||
m_SerializedLabels:
|
||||
- models
|
||||
- npc
|
||||
FlaggedDuringContentUpdateRestriction: 0
|
||||
- m_GUID: 5b5a5eccdfc0d4ad49dffcdb2e696008
|
||||
m_Address: "models/weapons/\u4EBA\u7269/\u62F3\u5957/\u77ED\u5203/\u65B017\u54C1\u722A/\u65B017\u54C1\u722A_\u53F31\u6863.ecm"
|
||||
m_ReadOnly: 0
|
||||
@@ -17625,6 +17618,13 @@ MonoBehaviour:
|
||||
- equipment
|
||||
- models
|
||||
FlaggedDuringContentUpdateRestriction: 0
|
||||
- m_GUID: a89ee34d10dfeb44aa744c9f960dbdcc
|
||||
m_Address: "models/npcs/\u602A\u7269/2013/\u767D\u733F\u957F\u8001/\u767D\u733F\u957F\u8001.ecm"
|
||||
m_ReadOnly: 0
|
||||
m_SerializedLabels:
|
||||
- models
|
||||
- npc
|
||||
FlaggedDuringContentUpdateRestriction: 0
|
||||
- m_GUID: a8aea825fbe6f4e0db75f5e9bcfd7a9f
|
||||
m_Address: "models/weapons/\u4EBA\u7269/\u65F6\u88C5\u6B66\u5668/\u901A\u7528/2015\u9F99\u5934\u68D2\u53CC\u624B\u77ED/\u5DE6\u624B.ecm"
|
||||
m_ReadOnly: 0
|
||||
@@ -23160,13 +23160,6 @@ MonoBehaviour:
|
||||
- equipment
|
||||
- models
|
||||
FlaggedDuringContentUpdateRestriction: 0
|
||||
- m_GUID: deb3dbe71e7644440ab7d59d9c929d56
|
||||
m_Address: "models/npcs/\u602A\u7269/\u722C\u866B/\u6BD2\u8702/\u6587\u6587.ecm"
|
||||
m_ReadOnly: 0
|
||||
m_SerializedLabels:
|
||||
- models
|
||||
- npc
|
||||
FlaggedDuringContentUpdateRestriction: 0
|
||||
- m_GUID: debb5c80999fc4ec1880a7900dedb004
|
||||
m_Address: "models/weapons/\u4EBA\u7269/\u65F6\u88C5\u6B66\u5668/\u901A\u7528/2016\u718A\u732B\u62F3\u5957/\u6389\u843D.ecm"
|
||||
m_ReadOnly: 0
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ff9300eb3694d3642a9d853d551bd305
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 26c0f433f8d1c8147b08912b4d4e3d56
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+507
@@ -0,0 +1,507 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1102 &-7940368841760511339
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: "\u6124\u6012\u65BD\u653E\u8D77"
|
||||
m_Speed: 1
|
||||
m_CycleOffset: 0
|
||||
m_Transitions: []
|
||||
m_StateMachineBehaviours: []
|
||||
m_Position: {x: 50, y: 50, z: 0}
|
||||
m_IKOnFeet: 0
|
||||
m_WriteDefaultValues: 1
|
||||
m_Mirror: 0
|
||||
m_SpeedParameterActive: 0
|
||||
m_MirrorParameterActive: 0
|
||||
m_CycleOffsetParameterActive: 0
|
||||
m_TimeParameterActive: 0
|
||||
m_Motion: {fileID: 7400000, guid: d09fbe55744a87d41a15079a29ef4f72, type: 2}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1102 &-7892801132788218278
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: "\u666E\u653B2\u8D77"
|
||||
m_Speed: 1
|
||||
m_CycleOffset: 0
|
||||
m_Transitions: []
|
||||
m_StateMachineBehaviours: []
|
||||
m_Position: {x: 50, y: 50, z: 0}
|
||||
m_IKOnFeet: 0
|
||||
m_WriteDefaultValues: 1
|
||||
m_Mirror: 0
|
||||
m_SpeedParameterActive: 0
|
||||
m_MirrorParameterActive: 0
|
||||
m_CycleOffsetParameterActive: 0
|
||||
m_TimeParameterActive: 0
|
||||
m_Motion: {fileID: 7400000, guid: 2e4b5d11ca460d04db7824871af26d07, type: 2}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1102 &-6328317098167708187
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: "\u53D7\u4F24"
|
||||
m_Speed: 1
|
||||
m_CycleOffset: 0
|
||||
m_Transitions: []
|
||||
m_StateMachineBehaviours: []
|
||||
m_Position: {x: 50, y: 50, z: 0}
|
||||
m_IKOnFeet: 0
|
||||
m_WriteDefaultValues: 1
|
||||
m_Mirror: 0
|
||||
m_SpeedParameterActive: 0
|
||||
m_MirrorParameterActive: 0
|
||||
m_CycleOffsetParameterActive: 0
|
||||
m_TimeParameterActive: 0
|
||||
m_Motion: {fileID: 7400000, guid: d2b913f99cf59864ab73fcbb7ca4b997, type: 2}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1102 &-5011457074097057168
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: "\u666E\u653B2\u843D"
|
||||
m_Speed: 1
|
||||
m_CycleOffset: 0
|
||||
m_Transitions: []
|
||||
m_StateMachineBehaviours: []
|
||||
m_Position: {x: 50, y: 50, z: 0}
|
||||
m_IKOnFeet: 0
|
||||
m_WriteDefaultValues: 1
|
||||
m_Mirror: 0
|
||||
m_SpeedParameterActive: 0
|
||||
m_MirrorParameterActive: 0
|
||||
m_CycleOffsetParameterActive: 0
|
||||
m_TimeParameterActive: 0
|
||||
m_Motion: {fileID: 7400000, guid: c69e9481db8d63d47bf3892b453ebe79, type: 2}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1102 &-3472683170181341158
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: "\u6280\u80FD\u65BD\u653E\u843D"
|
||||
m_Speed: 1
|
||||
m_CycleOffset: 0
|
||||
m_Transitions: []
|
||||
m_StateMachineBehaviours: []
|
||||
m_Position: {x: 50, y: 50, z: 0}
|
||||
m_IKOnFeet: 0
|
||||
m_WriteDefaultValues: 1
|
||||
m_Mirror: 0
|
||||
m_SpeedParameterActive: 0
|
||||
m_MirrorParameterActive: 0
|
||||
m_CycleOffsetParameterActive: 0
|
||||
m_TimeParameterActive: 0
|
||||
m_Motion: {fileID: 7400000, guid: dd8111fd78af7ad40ad15edcd03e0838, type: 2}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1102 &-2755906967862810922
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: "\u6302\u70B9"
|
||||
m_Speed: 1
|
||||
m_CycleOffset: 0
|
||||
m_Transitions: []
|
||||
m_StateMachineBehaviours: []
|
||||
m_Position: {x: 50, y: 50, z: 0}
|
||||
m_IKOnFeet: 0
|
||||
m_WriteDefaultValues: 1
|
||||
m_Mirror: 0
|
||||
m_SpeedParameterActive: 0
|
||||
m_MirrorParameterActive: 0
|
||||
m_CycleOffsetParameterActive: 0
|
||||
m_TimeParameterActive: 0
|
||||
m_Motion: {fileID: 7400000, guid: f1e6c09fe1b2f4743a6fed30629be73b, type: 2}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1102 &-1552743526941003336
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: "\u6B7B\u4EA1"
|
||||
m_Speed: 1
|
||||
m_CycleOffset: 0
|
||||
m_Transitions: []
|
||||
m_StateMachineBehaviours: []
|
||||
m_Position: {x: 50, y: 50, z: 0}
|
||||
m_IKOnFeet: 0
|
||||
m_WriteDefaultValues: 1
|
||||
m_Mirror: 0
|
||||
m_SpeedParameterActive: 0
|
||||
m_MirrorParameterActive: 0
|
||||
m_CycleOffsetParameterActive: 0
|
||||
m_TimeParameterActive: 0
|
||||
m_Motion: {fileID: 7400000, guid: 1de0f0fad82a1e24980ebdd461511a57, type: 2}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1107 &-1385044693834464900
|
||||
AnimatorStateMachine:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: Base Layer
|
||||
m_ChildStates:
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: 2798646575986590306}
|
||||
m_Position: {x: 200, y: 0, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: -6328317098167708187}
|
||||
m_Position: {x: 235, y: 65, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: 6742634033130207628}
|
||||
m_Position: {x: 270, y: 130, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: 2828341503876324491}
|
||||
m_Position: {x: 305, y: 195, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: -7940368841760511339}
|
||||
m_Position: {x: 340, y: 260, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: 6841952353044144601}
|
||||
m_Position: {x: 375, y: 325, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: 5974260307876595752}
|
||||
m_Position: {x: 410, y: 390, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: -3472683170181341158}
|
||||
m_Position: {x: 445, y: 455, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: 7941248052073167876}
|
||||
m_Position: {x: 480, y: 520, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: -2755906967862810922}
|
||||
m_Position: {x: 515, y: 585, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: -92875853942891718}
|
||||
m_Position: {x: 550, y: 650, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: -763542667587207948}
|
||||
m_Position: {x: 585, y: 715, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: -5011457074097057168}
|
||||
m_Position: {x: 620, y: 780, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: -7892801132788218278}
|
||||
m_Position: {x: 655, y: 845, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: -1552743526941003336}
|
||||
m_Position: {x: 690, y: 910, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: 8203433932688559491}
|
||||
m_Position: {x: 725, y: 975, z: 0}
|
||||
m_ChildStateMachines: []
|
||||
m_AnyStateTransitions: []
|
||||
m_EntryTransitions: []
|
||||
m_StateMachineTransitions: {}
|
||||
m_StateMachineBehaviours: []
|
||||
m_AnyStatePosition: {x: 50, y: 20, z: 0}
|
||||
m_EntryPosition: {x: 50, y: 120, z: 0}
|
||||
m_ExitPosition: {x: 800, y: 120, z: 0}
|
||||
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
|
||||
m_DefaultState: {fileID: 2798646575986590306}
|
||||
--- !u!1102 &-763542667587207948
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: "\u666E\u653B1\u8D77"
|
||||
m_Speed: 1
|
||||
m_CycleOffset: 0
|
||||
m_Transitions: []
|
||||
m_StateMachineBehaviours: []
|
||||
m_Position: {x: 50, y: 50, z: 0}
|
||||
m_IKOnFeet: 0
|
||||
m_WriteDefaultValues: 1
|
||||
m_Mirror: 0
|
||||
m_SpeedParameterActive: 0
|
||||
m_MirrorParameterActive: 0
|
||||
m_CycleOffsetParameterActive: 0
|
||||
m_TimeParameterActive: 0
|
||||
m_Motion: {fileID: 7400000, guid: 484aa8924c33d5047b6cc6ae56013c45, type: 2}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1102 &-92875853942891718
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: "\u666E\u653B1\u843D"
|
||||
m_Speed: 1
|
||||
m_CycleOffset: 0
|
||||
m_Transitions: []
|
||||
m_StateMachineBehaviours: []
|
||||
m_Position: {x: 50, y: 50, z: 0}
|
||||
m_IKOnFeet: 0
|
||||
m_WriteDefaultValues: 1
|
||||
m_Mirror: 0
|
||||
m_SpeedParameterActive: 0
|
||||
m_MirrorParameterActive: 0
|
||||
m_CycleOffsetParameterActive: 0
|
||||
m_TimeParameterActive: 0
|
||||
m_Motion: {fileID: 7400000, guid: 707edf95f18e50d4885155eb3b018058, type: 2}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!91 &9100000
|
||||
AnimatorController:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: "tcks_\u767D\u733F\u957F\u8001"
|
||||
serializedVersion: 5
|
||||
m_AnimatorParameters: []
|
||||
m_AnimatorLayers:
|
||||
- serializedVersion: 5
|
||||
m_Name: Base Layer
|
||||
m_StateMachine: {fileID: -1385044693834464900}
|
||||
m_Mask: {fileID: 0}
|
||||
m_Motions: []
|
||||
m_Behaviours: []
|
||||
m_BlendingMode: 0
|
||||
m_SyncedLayerIndex: -1
|
||||
m_DefaultWeight: 0
|
||||
m_IKPass: 0
|
||||
m_SyncedLayerAffectsTiming: 0
|
||||
m_Controller: {fileID: 9100000}
|
||||
--- !u!1102 &2798646575986590306
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: "\u4F11\u95F2"
|
||||
m_Speed: 1
|
||||
m_CycleOffset: 0
|
||||
m_Transitions: []
|
||||
m_StateMachineBehaviours: []
|
||||
m_Position: {x: 50, y: 50, z: 0}
|
||||
m_IKOnFeet: 0
|
||||
m_WriteDefaultValues: 1
|
||||
m_Mirror: 0
|
||||
m_SpeedParameterActive: 0
|
||||
m_MirrorParameterActive: 0
|
||||
m_CycleOffsetParameterActive: 0
|
||||
m_TimeParameterActive: 0
|
||||
m_Motion: {fileID: 7400000, guid: 0957f1befe5a09041b74898883ed49dd, type: 2}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1102 &2828341503876324491
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: "\u6124\u6012\u65BD\u653E\u843D"
|
||||
m_Speed: 1
|
||||
m_CycleOffset: 0
|
||||
m_Transitions: []
|
||||
m_StateMachineBehaviours: []
|
||||
m_Position: {x: 50, y: 50, z: 0}
|
||||
m_IKOnFeet: 0
|
||||
m_WriteDefaultValues: 1
|
||||
m_Mirror: 0
|
||||
m_SpeedParameterActive: 0
|
||||
m_MirrorParameterActive: 0
|
||||
m_CycleOffsetParameterActive: 0
|
||||
m_TimeParameterActive: 0
|
||||
m_Motion: {fileID: 7400000, guid: 352863a86b1da2d4880d737044a5fe8d, type: 2}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1102 &5974260307876595752
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: "\u6212\u5907"
|
||||
m_Speed: 1
|
||||
m_CycleOffset: 0
|
||||
m_Transitions: []
|
||||
m_StateMachineBehaviours: []
|
||||
m_Position: {x: 50, y: 50, z: 0}
|
||||
m_IKOnFeet: 0
|
||||
m_WriteDefaultValues: 1
|
||||
m_Mirror: 0
|
||||
m_SpeedParameterActive: 0
|
||||
m_MirrorParameterActive: 0
|
||||
m_CycleOffsetParameterActive: 0
|
||||
m_TimeParameterActive: 0
|
||||
m_Motion: {fileID: 7400000, guid: 446127ed905d3b34cb8516096d0fcf50, type: 2}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1102 &6742634033130207628
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: "\u5FEB\u901F\u79FB\u52A8"
|
||||
m_Speed: 1
|
||||
m_CycleOffset: 0
|
||||
m_Transitions: []
|
||||
m_StateMachineBehaviours: []
|
||||
m_Position: {x: 50, y: 50, z: 0}
|
||||
m_IKOnFeet: 0
|
||||
m_WriteDefaultValues: 1
|
||||
m_Mirror: 0
|
||||
m_SpeedParameterActive: 0
|
||||
m_MirrorParameterActive: 0
|
||||
m_CycleOffsetParameterActive: 0
|
||||
m_TimeParameterActive: 0
|
||||
m_Motion: {fileID: 7400000, guid: 6b6a24e82e386bd4cac0f5d2d46c11e1, type: 2}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1102 &6841952353044144601
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: "\u6162\u901F\u79FB\u52A8"
|
||||
m_Speed: 1
|
||||
m_CycleOffset: 0
|
||||
m_Transitions: []
|
||||
m_StateMachineBehaviours: []
|
||||
m_Position: {x: 50, y: 50, z: 0}
|
||||
m_IKOnFeet: 0
|
||||
m_WriteDefaultValues: 1
|
||||
m_Mirror: 0
|
||||
m_SpeedParameterActive: 0
|
||||
m_MirrorParameterActive: 0
|
||||
m_CycleOffsetParameterActive: 0
|
||||
m_TimeParameterActive: 0
|
||||
m_Motion: {fileID: 7400000, guid: 1166565733a5b6748b23dc247f16772d, type: 2}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1102 &7941248052073167876
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: "\u6280\u80FD\u65BD\u653E\u8D77"
|
||||
m_Speed: 1
|
||||
m_CycleOffset: 0
|
||||
m_Transitions: []
|
||||
m_StateMachineBehaviours: []
|
||||
m_Position: {x: 50, y: 50, z: 0}
|
||||
m_IKOnFeet: 0
|
||||
m_WriteDefaultValues: 1
|
||||
m_Mirror: 0
|
||||
m_SpeedParameterActive: 0
|
||||
m_MirrorParameterActive: 0
|
||||
m_CycleOffsetParameterActive: 0
|
||||
m_TimeParameterActive: 0
|
||||
m_Motion: {fileID: 7400000, guid: e1c0280631f419346be08e3751cdc5c9, type: 2}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1102 &8203433932688559491
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: "\u7AD9\u7ACB"
|
||||
m_Speed: 1
|
||||
m_CycleOffset: 0
|
||||
m_Transitions: []
|
||||
m_StateMachineBehaviours: []
|
||||
m_Position: {x: 50, y: 50, z: 0}
|
||||
m_IKOnFeet: 0
|
||||
m_WriteDefaultValues: 1
|
||||
m_Mirror: 0
|
||||
m_SpeedParameterActive: 0
|
||||
m_MirrorParameterActive: 0
|
||||
m_CycleOffsetParameterActive: 0
|
||||
m_TimeParameterActive: 0
|
||||
m_Motion: {fileID: 7400000, guid: c17162019ee06d0439a83f896b1bf4b2, type: 2}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f56502c40826c8e45a8945e170bc7192
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 9100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0957f1befe5a09041b74898883ed49dd
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d2b913f99cf59864ab73fcbb7ca4b997
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6b6a24e82e386bd4cac0f5d2d46c11e1
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 352863a86b1da2d4880d737044a5fe8d
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d09fbe55744a87d41a15079a29ef4f72
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1166565733a5b6748b23dc247f16772d
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 446127ed905d3b34cb8516096d0fcf50
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dd8111fd78af7ad40ad15edcd03e0838
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e1c0280631f419346be08e3751cdc5c9
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f1e6c09fe1b2f4743a6fed30629be73b
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 707edf95f18e50d4885155eb3b018058
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 484aa8924c33d5047b6cc6ae56013c45
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c69e9481db8d63d47bf3892b453ebe79
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2e4b5d11ca460d04db7824871af26d07
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1de0f0fad82a1e24980ebdd461511a57
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c17162019ee06d0439a83f896b1bf4b2
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -28,8 +28,8 @@ Transform:
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_LocalScale: {x: 0.13, y: 0.13, z: 0.13}
|
||||
m_ConstrainProportionsScale: 1
|
||||
m_Children: []
|
||||
m_Father: {fileID: 9155628035416155594}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
@@ -275,7 +275,7 @@ Transform:
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_ConstrainProportionsScale: 1
|
||||
m_Children:
|
||||
- {fileID: 7616501457336328776}
|
||||
- {fileID: 5906686267044891739}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &7713099438858920395
|
||||
--- !u!1 &8818927298683511634
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
@@ -8,10 +8,9 @@ GameObject:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8541071098212086176}
|
||||
- component: {fileID: 8251708342008786854}
|
||||
- component: {fileID: 5338557265443283231}
|
||||
- component: {fileID: 2744124511780171599}
|
||||
- component: {fileID: 2983467356394752744}
|
||||
- component: {fileID: 729212007038685270}
|
||||
- component: {fileID: 7473354552125375242}
|
||||
m_Layer: 0
|
||||
m_Name: Box01_0
|
||||
m_TagString: Untagged
|
||||
@@ -19,13 +18,13 @@ GameObject:
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &8541071098212086176
|
||||
--- !u!4 &2983467356394752744
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7713099438858920395}
|
||||
m_GameObject: {fileID: 8818927298683511634}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
@@ -34,21 +33,21 @@ Transform:
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &8251708342008786854
|
||||
--- !u!33 &729212007038685270
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7713099438858920395}
|
||||
m_Mesh: {fileID: 4300000, guid: a1247c34d893541a3a5ec98560d36de3, type: 2}
|
||||
--- !u!137 &5338557265443283231
|
||||
m_GameObject: {fileID: 8818927298683511634}
|
||||
m_Mesh: {fileID: 4300000, guid: 14a8d57279f1d0347ac7a11ed56bf9d1, type: 2}
|
||||
--- !u!137 &7473354552125375242
|
||||
SkinnedMeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7713099438858920395}
|
||||
m_GameObject: {fileID: 8818927298683511634}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
@@ -65,7 +64,7 @@ SkinnedMeshRenderer:
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: f218be753e5034be8a25f5fdf6ae0f25, type: 2}
|
||||
- {fileID: 2100000, guid: 7a16c5d6e020d84488a3e36890bfdcf1, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
@@ -90,7 +89,7 @@ SkinnedMeshRenderer:
|
||||
m_Quality: 0
|
||||
m_UpdateWhenOffscreen: 0
|
||||
m_SkinnedMotionVectors: 1
|
||||
m_Mesh: {fileID: 4300000, guid: a1247c34d893541a3a5ec98560d36de3, type: 2}
|
||||
m_Mesh: {fileID: 4300000, guid: 14a8d57279f1d0347ac7a11ed56bf9d1, type: 2}
|
||||
m_Bones:
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
@@ -100,20 +99,3 @@ SkinnedMeshRenderer:
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Extent: {x: 0, y: 0, z: 0}
|
||||
m_DirtyAABB: 0
|
||||
--- !u!114 &2744124511780171599
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7713099438858920395}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 2189a384460241f89635c90802d6c270, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
_skeletonBuilder: {fileID: 0}
|
||||
_meshFilter: {fileID: 8251708342008786854}
|
||||
_skinnedMeshRenderer: {fileID: 5338557265443283231}
|
||||
BoneNames:
|
||||
- 000
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 73290134e51c4e2468f3fea2afd9d7c4
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 14edd929dbc58d24e97307f3eb4fcfee
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a89ee34d10dfeb44aa744c9f960dbdcc
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,136 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: "\u767D\u733F\u957F\u8001_0"
|
||||
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
||||
m_Parent: {fileID: 0}
|
||||
m_ModifiedSerializedProperties: 0
|
||||
m_ValidKeywords: []
|
||||
m_InvalidKeywords: []
|
||||
m_LightmapFlags: 4
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: 2000
|
||||
stringTagMap:
|
||||
RenderType: Opaque
|
||||
disabledShaderPasses:
|
||||
- MOTIONVECTORS
|
||||
m_LockedProperties:
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _BaseMap:
|
||||
m_Texture: {fileID: 2800000, guid: aa799bd993e3b7145af30716f8d24245, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _BumpMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailAlbedoMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailMask:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailNormalMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _EmissionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 2800000, guid: aa799bd993e3b7145af30716f8d24245, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _OcclusionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _ParallaxMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _SpecGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- unity_Lightmaps:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- unity_LightmapsInd:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- unity_ShadowMasks:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _AddPrecomputedVelocity: 0
|
||||
- _AlphaClip: 0
|
||||
- _AlphaToMask: 0
|
||||
- _Blend: 0
|
||||
- _BlendModePreserveSpecular: 1
|
||||
- _BumpScale: 1
|
||||
- _ClearCoatMask: 0
|
||||
- _ClearCoatSmoothness: 0
|
||||
- _Cull: 2
|
||||
- _Cutoff: 0.001
|
||||
- _DetailAlbedoMapScale: 1
|
||||
- _DetailNormalMapScale: 1
|
||||
- _DstBlend: 0
|
||||
- _DstBlendAlpha: 0
|
||||
- _EnvironmentReflections: 1
|
||||
- _GlossMapScale: 0
|
||||
- _Glossiness: 0
|
||||
- _GlossyReflections: 0
|
||||
- _Metallic: 0
|
||||
- _OcclusionStrength: 1
|
||||
- _Parallax: 0.005
|
||||
- _QueueOffset: 0
|
||||
- _ReceiveShadows: 1
|
||||
- _Smoothness: 0.1
|
||||
- _SmoothnessTextureChannel: 0
|
||||
- _SpecularHighlights: 1
|
||||
- _SrcBlend: 1
|
||||
- _SrcBlendAlpha: 1
|
||||
- _Surface: 0
|
||||
- _WorkflowMode: 1
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
||||
m_BuildTextureStacks: []
|
||||
m_AllowLocking: 1
|
||||
--- !u!114 &6964018125319239203
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 11
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
version: 10
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 35991abe98ac2594fbcdf9111798431b
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 35d0f0f60cd3b114490eb376533723a8
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 4300000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,207 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &6702435733042153723
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2815518877128253445}
|
||||
- component: {fileID: 2507621421060211671}
|
||||
- component: {fileID: 3713260510743648894}
|
||||
- component: {fileID: 123736032699877470}
|
||||
m_Layer: 0
|
||||
m_Name: "\u767D\u733F\u957F\u8001_0"
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &2815518877128253445
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6702435733042153723}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &2507621421060211671
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6702435733042153723}
|
||||
m_Mesh: {fileID: 4300000, guid: 35d0f0f60cd3b114490eb376533723a8, type: 2}
|
||||
--- !u!137 &3713260510743648894
|
||||
SkinnedMeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6702435733042153723}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 3
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: 35991abe98ac2594fbcdf9111798431b, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
serializedVersion: 2
|
||||
m_Quality: 0
|
||||
m_UpdateWhenOffscreen: 0
|
||||
m_SkinnedMotionVectors: 1
|
||||
m_Mesh: {fileID: 4300000, guid: 35d0f0f60cd3b114490eb376533723a8, type: 2}
|
||||
m_Bones:
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
m_BlendShapeWeights: []
|
||||
m_RootBone: {fileID: 0}
|
||||
m_AABB:
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Extent: {x: 0, y: 0, z: 0}
|
||||
m_DirtyAABB: 0
|
||||
--- !u!114 &123736032699877470
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 6702435733042153723}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 2189a384460241f89635c90802d6c270, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
_skeletonBuilder: {fileID: 0}
|
||||
_meshFilter: {fileID: 2507621421060211671}
|
||||
_skinnedMeshRenderer: {fileID: 3713260510743648894}
|
||||
BoneNames:
|
||||
- Bip01 Pelvis
|
||||
- Bip01 R Thigh
|
||||
- Bip01 R Calf
|
||||
- Bip01 Spine1
|
||||
- Bip01 Neck
|
||||
- Bip01 R Clavicle
|
||||
- Bone07
|
||||
- Bip01 R UpperArm
|
||||
- Bip01 Spine
|
||||
- Bip01 Head
|
||||
- Bip01 R Forearm
|
||||
- Bip01 R Hand
|
||||
- Bip01 R Finger01
|
||||
- Bip01 R Finger1
|
||||
- Bip01 R Finger11
|
||||
- Bip01 R Finger0
|
||||
- Bip01 R Finger02
|
||||
- Bip01 R Finger2
|
||||
- Bip01 R Finger21
|
||||
- Bip01 R Finger22
|
||||
- Bip01 R Finger12
|
||||
- Bip01 R Foot
|
||||
- Bip01 R Toe0
|
||||
- Bone01
|
||||
- Bone03
|
||||
- Bone04
|
||||
- Bone05
|
||||
- Bip01 L Thigh
|
||||
- Bip01 L Calf
|
||||
- Bip01 L Clavicle
|
||||
- Bip01 L UpperArm
|
||||
- Bip01 L Foot
|
||||
- Bip01 L Toe0
|
||||
- Bip01 L Forearm
|
||||
- Bip01 L Hand
|
||||
- Bip01 L Finger0
|
||||
- Bip01 L Finger01
|
||||
- Bip01 L Finger02
|
||||
- Bip01 L Finger1
|
||||
- Bip01 L Finger11
|
||||
- Bip01 L Finger2
|
||||
- Bip01 L Finger12
|
||||
- Bip01 L Finger21
|
||||
- Bip01 L Finger22
|
||||
- Bip01 Prop1
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5c0496625c0fe3440b8cc3c90f045de1
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,136 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: "\u767D\u733F\u957F\u8001_1"
|
||||
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
||||
m_Parent: {fileID: 0}
|
||||
m_ModifiedSerializedProperties: 0
|
||||
m_ValidKeywords: []
|
||||
m_InvalidKeywords: []
|
||||
m_LightmapFlags: 4
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: 2000
|
||||
stringTagMap:
|
||||
RenderType: Opaque
|
||||
disabledShaderPasses:
|
||||
- MOTIONVECTORS
|
||||
m_LockedProperties:
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _BaseMap:
|
||||
m_Texture: {fileID: 2800000, guid: 5f67ed6893915ab4ab70cca49bda16fb, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _BumpMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailAlbedoMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailMask:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailNormalMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _EmissionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 2800000, guid: 5f67ed6893915ab4ab70cca49bda16fb, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _OcclusionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _ParallaxMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _SpecGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- unity_Lightmaps:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- unity_LightmapsInd:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- unity_ShadowMasks:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _AddPrecomputedVelocity: 0
|
||||
- _AlphaClip: 0
|
||||
- _AlphaToMask: 0
|
||||
- _Blend: 0
|
||||
- _BlendModePreserveSpecular: 1
|
||||
- _BumpScale: 1
|
||||
- _ClearCoatMask: 0
|
||||
- _ClearCoatSmoothness: 0
|
||||
- _Cull: 2
|
||||
- _Cutoff: 0.001
|
||||
- _DetailAlbedoMapScale: 1
|
||||
- _DetailNormalMapScale: 1
|
||||
- _DstBlend: 0
|
||||
- _DstBlendAlpha: 0
|
||||
- _EnvironmentReflections: 1
|
||||
- _GlossMapScale: 0
|
||||
- _Glossiness: 0
|
||||
- _GlossyReflections: 0
|
||||
- _Metallic: 0
|
||||
- _OcclusionStrength: 1
|
||||
- _Parallax: 0.005
|
||||
- _QueueOffset: 0
|
||||
- _ReceiveShadows: 1
|
||||
- _Smoothness: 0.1
|
||||
- _SmoothnessTextureChannel: 0
|
||||
- _SpecularHighlights: 1
|
||||
- _SrcBlend: 1
|
||||
- _SrcBlendAlpha: 1
|
||||
- _Surface: 0
|
||||
- _WorkflowMode: 1
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
||||
m_BuildTextureStacks: []
|
||||
m_AllowLocking: 1
|
||||
--- !u!114 &430445841483180446
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 11
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
version: 10
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3d7327b7b5e6e8a4f9209cf21cc82775
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4637ff22e47672a45aa7699f4b74c3c7
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 4300000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,207 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &5393730335013088468
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6657875078929472931}
|
||||
- component: {fileID: 7480118836749265618}
|
||||
- component: {fileID: 3350935766882964325}
|
||||
- component: {fileID: 6929615340777829853}
|
||||
m_Layer: 0
|
||||
m_Name: "\u767D\u733F\u957F\u8001_1"
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &6657875078929472931
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5393730335013088468}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &7480118836749265618
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5393730335013088468}
|
||||
m_Mesh: {fileID: 4300000, guid: 4637ff22e47672a45aa7699f4b74c3c7, type: 2}
|
||||
--- !u!137 &3350935766882964325
|
||||
SkinnedMeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5393730335013088468}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 3
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: 3d7327b7b5e6e8a4f9209cf21cc82775, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
serializedVersion: 2
|
||||
m_Quality: 0
|
||||
m_UpdateWhenOffscreen: 0
|
||||
m_SkinnedMotionVectors: 1
|
||||
m_Mesh: {fileID: 4300000, guid: 4637ff22e47672a45aa7699f4b74c3c7, type: 2}
|
||||
m_Bones:
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
m_BlendShapeWeights: []
|
||||
m_RootBone: {fileID: 0}
|
||||
m_AABB:
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Extent: {x: 0, y: 0, z: 0}
|
||||
m_DirtyAABB: 0
|
||||
--- !u!114 &6929615340777829853
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5393730335013088468}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 2189a384460241f89635c90802d6c270, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
_skeletonBuilder: {fileID: 0}
|
||||
_meshFilter: {fileID: 7480118836749265618}
|
||||
_skinnedMeshRenderer: {fileID: 3350935766882964325}
|
||||
BoneNames:
|
||||
- Bip01 Pelvis
|
||||
- Bip01 R Thigh
|
||||
- Bip01 R Calf
|
||||
- Bip01 Spine1
|
||||
- Bip01 Neck
|
||||
- Bip01 R Clavicle
|
||||
- Bone07
|
||||
- Bip01 R UpperArm
|
||||
- Bip01 Spine
|
||||
- Bip01 Head
|
||||
- Bip01 R Forearm
|
||||
- Bip01 R Hand
|
||||
- Bip01 R Finger01
|
||||
- Bip01 R Finger1
|
||||
- Bip01 R Finger11
|
||||
- Bip01 R Finger0
|
||||
- Bip01 R Finger02
|
||||
- Bip01 R Finger2
|
||||
- Bip01 R Finger21
|
||||
- Bip01 R Finger22
|
||||
- Bip01 R Finger12
|
||||
- Bip01 R Foot
|
||||
- Bip01 R Toe0
|
||||
- Bone01
|
||||
- Bone03
|
||||
- Bone04
|
||||
- Bone05
|
||||
- Bip01 L Thigh
|
||||
- Bip01 L Calf
|
||||
- Bip01 L Clavicle
|
||||
- Bip01 L UpperArm
|
||||
- Bip01 L Foot
|
||||
- Bip01 L Toe0
|
||||
- Bip01 L Forearm
|
||||
- Bip01 L Hand
|
||||
- Bip01 L Finger0
|
||||
- Bip01 L Finger01
|
||||
- Bip01 L Finger02
|
||||
- Bip01 L Finger1
|
||||
- Bip01 L Finger11
|
||||
- Bip01 L Finger2
|
||||
- Bip01 L Finger12
|
||||
- Bip01 L Finger21
|
||||
- Bip01 L Finger22
|
||||
- Bip01 Prop1
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 01ea103b953de714f95105f9fd6471f8
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8a414fa4bf2b667449d449b25e39552f
|
||||
guid: c451031ead54941afa5d10ce108ed6a1
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d2283884d42d2ad43b8ff11d8b7db57d
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1334011b7eaa15e47a431f022d503866
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 448 KiB |
@@ -0,0 +1,143 @@
|
||||
fileFormatVersion: 2
|
||||
guid: aa799bd993e3b7145af30716f8d24245
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 352 KiB |
@@ -0,0 +1,143 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5f67ed6893915ab4ab70cca49bda16fb
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable: {}
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:b8acb69bc58b3b383d9e8795f8fb9e18be2da3256801fc1a1e5fbee9096e2d40
|
||||
size 298567
|
||||
oid sha256:b013fb5e1a03c91240682019bd88c08a2e17ad520bb308d2ecec16cc03643250
|
||||
size 302199
|
||||
|
||||
@@ -47,4 +47,4 @@ MonoBehaviour:
|
||||
iconName:
|
||||
icon: {fileID: 0}
|
||||
prefix: '!#'
|
||||
maxRawCharactersPerMessage: 80
|
||||
maxRawCharactersPerMessage: 200
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using System;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using CSNetwork;
|
||||
@@ -10,7 +11,19 @@ namespace BrewMonster.Scripts.Chat
|
||||
/// </summary>
|
||||
public static class ChatWireTmpCodec
|
||||
{
|
||||
private static readonly Regex SpriteTagRegex = new Regex(@"<sprite\s[^>]*>", RegexOptions.IgnoreCase | RegexOptions.Compiled);
|
||||
/// <summary>
|
||||
/// Thẻ <sprite …> nội bộ (TMP cho phép <sprite="asset" …> không có khoảng sau "sprite").
|
||||
/// English: Inner <sprite …> tag (TMP allows <sprite="asset" …> with no space after "sprite").
|
||||
/// </summary>
|
||||
private static readonly Regex InnerSpriteTagRegex = new Regex(@"<sprite[^>]*>", RegexOptions.IgnoreCase | RegexOptions.Compiled);
|
||||
|
||||
/// <summary>
|
||||
/// Một emoji hiển thị trong input = <size> + sprite + </size> (EmotionTMPTagBuilder).
|
||||
/// English: One in-game emoji in input = size wrapper + sprite + closing size tag.
|
||||
/// </summary>
|
||||
private static readonly Regex EmotionSizedBlockRegex =
|
||||
new Regex(@"<size=\d+%>\s*<sprite[^>]*>\s*</size>", RegexOptions.IgnoreCase | RegexOptions.Compiled);
|
||||
|
||||
private static readonly Regex OrphanSpriteFragmentRegex = new Regex(@"^\s*sprite\s[^>]*>", RegexOptions.IgnoreCase | RegexOptions.Compiled);
|
||||
|
||||
/// <summary>
|
||||
@@ -44,9 +57,36 @@ namespace BrewMonster.Scripts.Chat
|
||||
|
||||
var sb = new StringBuilder(tmpBody.Length);
|
||||
int last = 0;
|
||||
foreach (Match m in SpriteTagRegex.Matches(tmpBody))
|
||||
foreach (Match block in EmotionSizedBlockRegex.Matches(tmpBody))
|
||||
{
|
||||
AppendSanitizedPlainText(sb, tmpBody, last, m.Index - last);
|
||||
AppendTmpSegmentToWire(sb, tmpBody, last, block.Index - last, map);
|
||||
last = block.Index + block.Length;
|
||||
|
||||
Match inner = InnerSpriteTagRegex.Match(block.Value);
|
||||
if (inner.Success && TryMatchSpriteTagToEmotion(map, inner.Value, out int es, out int ei))
|
||||
sb.Append(BuildMarshaledEmotionWire(es, ei));
|
||||
else
|
||||
sb.Append(block.Value);
|
||||
}
|
||||
|
||||
AppendTmpSegmentToWire(sb, tmpBody, last, tmpBody.Length - last, map);
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Đoạn TMP (không gồm khối <size>…</size> đã xử lý ở ngoài): chữ thường + <sprite> rời.
|
||||
/// English: TMP segment: plain text plus bare sprite tags (outside size-wrapped emotion blocks).
|
||||
/// </summary>
|
||||
private static void AppendTmpSegmentToWire(StringBuilder sb, string tmpBody, int start, int length, IEmotionSpriteMap map)
|
||||
{
|
||||
if (length <= 0)
|
||||
return;
|
||||
|
||||
string gap = tmpBody.Substring(start, length);
|
||||
int last = 0;
|
||||
foreach (Match m in InnerSpriteTagRegex.Matches(gap))
|
||||
{
|
||||
AppendSanitizedPlainText(sb, gap, last, m.Index - last);
|
||||
string tag = m.Value;
|
||||
if (TryMatchSpriteTagToEmotion(map, tag, out int es, out int ei))
|
||||
sb.Append(BuildMarshaledEmotionWire(es, ei));
|
||||
@@ -54,16 +94,12 @@ namespace BrewMonster.Scripts.Chat
|
||||
sb.Append(tag);
|
||||
last = m.Index + m.Length;
|
||||
|
||||
// Defensive: TMP_InputField can transiently expose an orphan fragment like
|
||||
// `sprite anim="..."` right after a valid <sprite ...> tag when input updates race.
|
||||
// Skip it so we do not leak malformed rich-text into wire text.
|
||||
var orphan = OrphanSpriteFragmentRegex.Match(tmpBody, last);
|
||||
var orphan = OrphanSpriteFragmentRegex.Match(gap, last);
|
||||
if (orphan.Success)
|
||||
last += orphan.Length;
|
||||
}
|
||||
|
||||
AppendSanitizedPlainText(sb, tmpBody, last, tmpBody.Length - last);
|
||||
return sb.ToString();
|
||||
AppendSanitizedPlainText(sb, gap, last, gap.Length - last);
|
||||
}
|
||||
|
||||
private static void AppendSanitizedPlainText(StringBuilder sb, string source, int start, int length)
|
||||
@@ -81,8 +117,44 @@ namespace BrewMonster.Scripts.Chat
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Khớp tag với EmotionTMPTagBuilder — duyệt (set,index) đủ nhỏ.
|
||||
/// Match tag to EmotionTMPTagBuilder output — brute-force over (set,index) within reasonable bounds.
|
||||
/// Nếu charIndex nằm trong một emoji TMP (khối <size>… hoặc thẻ <sprite> rời), trả khoảng xóa [start, end).
|
||||
/// English: If charIndex is inside one TMP emoji unit, returns delete span [start, end).
|
||||
/// </summary>
|
||||
public static bool TryGetSpriteTagRangeContainingCharacterIndex(string text, int charIndex, out int tagStart, out int tagEndExclusive)
|
||||
{
|
||||
tagStart = 0;
|
||||
tagEndExclusive = 0;
|
||||
if (string.IsNullOrEmpty(text) || charIndex < 0 || charIndex >= text.Length)
|
||||
return false;
|
||||
|
||||
foreach (Match m in EmotionSizedBlockRegex.Matches(text))
|
||||
{
|
||||
int end = m.Index + m.Length;
|
||||
if (charIndex >= m.Index && charIndex < end)
|
||||
{
|
||||
tagStart = m.Index;
|
||||
tagEndExclusive = end;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
foreach (Match m in InnerSpriteTagRegex.Matches(text))
|
||||
{
|
||||
int end = m.Index + m.Length;
|
||||
if (charIndex >= m.Index && charIndex < end)
|
||||
{
|
||||
tagStart = m.Index;
|
||||
tagEndExclusive = end;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Khớp tag <sprite…> với EmotionTMPTagBuilder — so sánh phần sprite bên trong <size>…</size>.
|
||||
/// English: Match inner <sprite…> to EmotionTMPTagBuilder output (full tag includes size wrapper).
|
||||
/// </summary>
|
||||
public static bool TryMatchSpriteTagToEmotion(IEmotionSpriteMap map, string spriteTag, out int emotionSet, out int emotionIndex)
|
||||
{
|
||||
@@ -98,7 +170,11 @@ namespace BrewMonster.Scripts.Chat
|
||||
{
|
||||
if (!EmotionTMPTagBuilder.TryBuildEmotionTag(map, s, e, out string built))
|
||||
continue;
|
||||
if (built == normalized)
|
||||
|
||||
Match builtSprite = InnerSpriteTagRegex.Match(built);
|
||||
if (!builtSprite.Success)
|
||||
continue;
|
||||
if (string.Equals(builtSprite.Value, normalized, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
emotionSet = s;
|
||||
emotionIndex = e;
|
||||
|
||||
@@ -22,6 +22,10 @@ namespace BrewMonster.Scripts.Chat.EmotionData
|
||||
"TMP_SpriteAsset matching this atlas (cell_0000…). Required for animated emoji (multi-frame).")]
|
||||
public TMP_SpriteAsset TmpSpriteAsset;
|
||||
|
||||
[Tooltip("Bản sao tên asset (khớp TmpSpriteAsset.name) — dùng khi build tag chat từ thread mạng; không được đọc TmpSpriteAsset.name ngoài main thread. " +
|
||||
"Cached asset name (matches TmpSpriteAsset.name) — used when building chat tags from the network thread; never read TmpSpriteAsset.name off the main thread.")]
|
||||
public string TmpSpriteAssetName = "";
|
||||
|
||||
public List<EmotionEntryData> Entries = new List<EmotionEntryData>();
|
||||
}
|
||||
|
||||
@@ -35,6 +39,27 @@ namespace BrewMonster.Scripts.Chat.EmotionData
|
||||
[Tooltip("Danh sách các bộ theo EmotionSetIndex (0,1,2,…).")]
|
||||
public List<EmotionSetSnapshot> Sets = new List<EmotionSetSnapshot>();
|
||||
|
||||
private void OnValidate()
|
||||
{
|
||||
SyncCachedTmpSpriteAssetNamesFromObjects();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 把各 set 的 TmpSpriteAsset.name 写入 TmpSpriteAssetName(仅应在主线程调用,例如 Awake / OnValidate)。
|
||||
/// Writes each set's TmpSpriteAsset.name into TmpSpriteAssetName (call from main thread only, e.g. Awake / OnValidate).
|
||||
/// </summary>
|
||||
public void SyncCachedTmpSpriteAssetNamesFromObjects()
|
||||
{
|
||||
if (Sets == null)
|
||||
return;
|
||||
foreach (EmotionSetSnapshot s in Sets)
|
||||
{
|
||||
if (s == null)
|
||||
continue;
|
||||
s.TmpSpriteAssetName = s.TmpSpriteAsset != null ? s.TmpSpriteAsset.name : string.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
public EmotionSetSnapshot GetSetOrNull(int emotionSetIndex)
|
||||
{
|
||||
if (Sets == null) return null;
|
||||
|
||||
@@ -15,6 +15,7 @@ namespace BrewMonster.Scripts.Chat.EmotionData
|
||||
/// 1) Tạo EmotionLibrarySO bằng Emotion Atlas Converter.
|
||||
/// 2) Gán TMP_SpriteAsset cho từng set vào EmotionSetSnapshot.TmpSpriteAsset trong Library
|
||||
/// (chỉ cần cho emoji động nhiều frame hoặc khi PreferSpriteNameTag = false).
|
||||
/// OnValidate / SetEmotionSpriteMap đồng bộ TmpSpriteAssetName từ asset — English: sync cached name so network thread never calls GetName().
|
||||
/// 3) Kéo SO này vào field trên GameObject có CECUIManager (Awake gọi SetEmotionSpriteMap).
|
||||
/// </summary>
|
||||
[CreateAssetMenu(fileName = "EmotionLibrarySpriteMap", menuName = "Perfect World/Chat/Emotion Library Sprite Map", order = 2)]
|
||||
@@ -23,6 +24,20 @@ namespace BrewMonster.Scripts.Chat.EmotionData
|
||||
[Tooltip("Dữ liệu emotion đã convert. Emotion data converted by the atlas tool.")]
|
||||
public EmotionLibrarySO Library;
|
||||
|
||||
private void OnValidate()
|
||||
{
|
||||
EnsureCachedTmpSpriteAssetNames();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 主线程:把 Library 里各 TmpSpriteAsset.name 写入快照字段,供 TryGetSprite 在任意线程读取。
|
||||
/// Main thread: copy TmpSpriteAsset.name into snapshot fields so TryGetSprite can run off the main thread.
|
||||
/// </summary>
|
||||
public void EnsureCachedTmpSpriteAssetNames()
|
||||
{
|
||||
Library?.SyncCachedTmpSpriteAssetNamesFromObjects();
|
||||
}
|
||||
|
||||
[Tooltip("Nếu true và emoji chỉ 1 frame: dùng <sprite name=\"cell_XXXX\"> thay vì <sprite index=N>. " +
|
||||
"If true and single-frame: use <sprite name=\"cell_XXXX\"> instead of <sprite index=N>.")]
|
||||
public bool PreferSpriteNameTag = true;
|
||||
@@ -53,7 +68,9 @@ namespace BrewMonster.Scripts.Chat.EmotionData
|
||||
return false;
|
||||
}
|
||||
|
||||
string spriteAssetName = set.TmpSpriteAsset != null ? set.TmpSpriteAsset.name : string.Empty;
|
||||
// 禁止 TmpSpriteAsset.name:GetName() 仅主线程(网络收包线程会调 TryGetSprite)。
|
||||
// Never use TmpSpriteAsset.name here — GetName() is main-thread-only (network receive may call TryGetSprite).
|
||||
string spriteAssetName = set.TmpSpriteAssetName ?? string.Empty;
|
||||
|
||||
if (emotionIndex < 0 || emotionIndex >= set.Entries.Count)
|
||||
{
|
||||
|
||||
@@ -135,6 +135,9 @@ namespace BrewMonster.Scripts.ChatUI
|
||||
EventBus.Unsubscribe<ChatChannelFilterChangedEvent>(OnChannelFilterChanged);
|
||||
EventBus.Unsubscribe<OpenChatPanelRequestedEvent>(OnOpenChatPanelRequested);
|
||||
|
||||
if (scrollRect != null)
|
||||
scrollRect.onValueChanged.RemoveListener(OnScrollChanged);
|
||||
|
||||
if (_pool != null)
|
||||
{
|
||||
_pool.Clear();
|
||||
@@ -309,8 +312,12 @@ namespace BrewMonster.Scripts.ChatUI
|
||||
ScrollToBottom();
|
||||
}
|
||||
|
||||
/// <summary>Cuộn log chat xuống dòng cuối (sau khi layout xong).</summary>
|
||||
public void ScrollToBottom()
|
||||
{
|
||||
if (scrollRect == null) return;
|
||||
if (content != null)
|
||||
LayoutRebuilder.ForceRebuildLayoutImmediate(content);
|
||||
Canvas.ForceUpdateCanvases();
|
||||
scrollRect.verticalNormalizedPosition = 0f;
|
||||
}
|
||||
|
||||
@@ -16,6 +16,8 @@ namespace BrewMonster.Scripts.ChatUI
|
||||
public Button onOpenChatPanelButton;
|
||||
[Tooltip("Parent cho các dòng tin xem trước (nên có VerticalLayoutGroup).")]
|
||||
public RectTransform miniChatContent;
|
||||
[Tooltip("ScrollRect bọc mini chat (null = không cuộn). Nếu để trống, Awake sẽ thử GetComponentInParent từ miniChatContent.")]
|
||||
[SerializeField] ScrollRect miniChatScrollRect;
|
||||
[Tooltip("Null = dùng messagePrefab (fallback).")]
|
||||
public ChatMessageView miniMessagePrefab;
|
||||
[Tooltip("Prefab dòng tin khi miniMessagePrefab null (giống messagePrefab panel chính).")]
|
||||
@@ -36,6 +38,9 @@ namespace BrewMonster.Scripts.ChatUI
|
||||
|
||||
void Awake()
|
||||
{
|
||||
if (miniChatScrollRect == null && miniChatContent != null)
|
||||
miniChatScrollRect = miniChatContent.GetComponentInParent<ScrollRect>();
|
||||
|
||||
_iconCache = new Dictionary<byte, Sprite>();
|
||||
if (chatSystemSO != null && chatSystemSO.channelIcons != null)
|
||||
{
|
||||
@@ -160,7 +165,17 @@ namespace BrewMonster.Scripts.ChatUI
|
||||
view.Bind(icon, data.message);
|
||||
}
|
||||
|
||||
ScrollMiniChatToBottom();
|
||||
}
|
||||
|
||||
/// <summary>Cuộn mini log xuống dòng cuối (khi có ScrollRect và nội dung cao hơn viewport).</summary>
|
||||
void ScrollMiniChatToBottom()
|
||||
{
|
||||
if (miniChatScrollRect == null) return;
|
||||
if (miniChatContent != null)
|
||||
LayoutRebuilder.ForceRebuildLayoutImmediate(miniChatContent);
|
||||
Canvas.ForceUpdateCanvases();
|
||||
miniChatScrollRect.verticalNormalizedPosition = 0f;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -1,85 +0,0 @@
|
||||
using UnityEngine;
|
||||
using System.Collections.Generic;
|
||||
using TMPro;
|
||||
using DG.Tweening; // cần DOTween
|
||||
|
||||
public class DamageTextManager : MonoBehaviour
|
||||
{
|
||||
public static DamageTextManager Instance { get; private set; }
|
||||
|
||||
[Header("Prefab")]
|
||||
[SerializeField] private TextMeshPro damageTextPrefab;
|
||||
|
||||
[Header("Settings")]
|
||||
[SerializeField] private int poolSize = 20;
|
||||
[SerializeField] private Vector3 offset = new Vector3(0, 2f, 0);
|
||||
[SerializeField] private float riseDistance = 1.5f;
|
||||
[SerializeField] private float riseDuration = 0.8f;
|
||||
|
||||
private readonly Queue<TextMeshPro> pool = new();
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
// Singleton
|
||||
if (Instance != null && Instance != this)
|
||||
{
|
||||
Destroy(gameObject);
|
||||
return;
|
||||
}
|
||||
Instance = this;
|
||||
DontDestroyOnLoad(gameObject);
|
||||
|
||||
// Tạo sẵn pool
|
||||
for (int i = 0; i < poolSize; i++)
|
||||
{
|
||||
var textObj = Instantiate(damageTextPrefab, transform);
|
||||
textObj.gameObject.SetActive(false);
|
||||
pool.Enqueue(textObj);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gọi để spawn text damage
|
||||
/// </summary>
|
||||
public void ShowDamageText(Vector3 worldPos, int damage, Color color = default, float scale = 1f)
|
||||
{
|
||||
var text = GetFromPool();
|
||||
text.text = damage.ToString();
|
||||
text.color = color;
|
||||
text.fontSize = 6;
|
||||
text.transform.localScale = Vector3.one * scale;
|
||||
|
||||
Vector3 startPos = worldPos + offset;
|
||||
text.transform.position = startPos;
|
||||
text.gameObject.SetActive(true);
|
||||
|
||||
// Hiệu ứng bay lên + mờ dần
|
||||
text.transform.DOMoveY(startPos.y + riseDistance, riseDuration).SetEase(Ease.OutQuad);
|
||||
text.DOFade(0f, riseDuration)
|
||||
.SetEase(Ease.InQuad)
|
||||
.OnComplete(() =>
|
||||
{
|
||||
text.alpha = 1f;
|
||||
text.gameObject.SetActive(false);
|
||||
ReturnToPool(text);
|
||||
});
|
||||
}
|
||||
|
||||
private TextMeshPro GetFromPool()
|
||||
{
|
||||
if (pool.Count > 0)
|
||||
{
|
||||
return pool.Dequeue();
|
||||
}
|
||||
|
||||
// Nếu hết pool, tạo thêm
|
||||
var text = Instantiate(damageTextPrefab, transform);
|
||||
text.gameObject.SetActive(false);
|
||||
return text;
|
||||
}
|
||||
|
||||
private void ReturnToPool(TextMeshPro text)
|
||||
{
|
||||
pool.Enqueue(text);
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e7981b037b60f4a4989ff59265a308ad
|
||||
@@ -154,6 +154,7 @@ public partial class CECObject : MonoBehaviour
|
||||
{
|
||||
return EC_Utility.ToA3DVECTOR3(useTransform ? _objectTransform.position : objectPosition);
|
||||
}
|
||||
|
||||
|
||||
public Vector3 GetPosVector3(bool useTransform = true)
|
||||
{
|
||||
|
||||
@@ -0,0 +1,242 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.AddressableAssets;
|
||||
using UnityEngine.ResourceManagement.AsyncOperations;
|
||||
using TMPro;
|
||||
using DG.Tweening; // cần DOTween
|
||||
using BrewMonster.Scripts.UI.GamePlay;
|
||||
public enum ImageResType
|
||||
{
|
||||
IMG_POPUPNUM = 0,
|
||||
IMG_HITMISSED,
|
||||
IMG_FACTION,
|
||||
IMG_PATEQUEST,
|
||||
IMG_LEVELUP,
|
||||
IMG_GOTEXP,
|
||||
IMG_GOTMONEY,
|
||||
IMG_DEADLYSTRIKE,
|
||||
IMG_GOTSP,
|
||||
IMG_INVALIDHIT,
|
||||
IMG_TEAMLEADER,
|
||||
IMG_BOOTHBAR,
|
||||
IMG_HPWARN,
|
||||
IMG_MPWARN,
|
||||
IMG_RETORT,
|
||||
IMG_IMMUNE,
|
||||
IMG_TEAMMATE,
|
||||
IMG_PKSTATE,
|
||||
IMG_GMFLAG,
|
||||
IMG_ATTACKLOSE,
|
||||
IMG_SUCCESS,
|
||||
IMG_REBOUND,
|
||||
IMG_BEAT_BACK,
|
||||
IMG_ADD,
|
||||
IMG_DODGE_DEBUFF,
|
||||
IMG_KING,
|
||||
NUM_IMAGE,
|
||||
}
|
||||
public class FLoatingTextManager : MonoBehaviour
|
||||
{
|
||||
public static FLoatingTextManager Instance { get; private set; }
|
||||
|
||||
[Header("Prefab")]
|
||||
[SerializeField] private AUIFloatTextIcon floatTextIconPrefab;
|
||||
|
||||
[Header("Settings")]
|
||||
[SerializeField] private int poolSize = 20;
|
||||
[SerializeField] private Vector3 offset = new Vector3(0, 2f, 0);
|
||||
[SerializeField] private float riseDistance = 1.5f;
|
||||
[SerializeField] private float riseDuration = 0.8f;
|
||||
/// <summary>
|
||||
/// Minimum spacing between floating texts for the same source object (seconds).
|
||||
/// 同一来源物体连续飘字的最小间隔(秒)。
|
||||
/// </summary>
|
||||
[SerializeField] private float staggerIntervalSeconds = 0.3f;
|
||||
|
||||
private readonly Queue<AUIFloatTextIcon> pool = new();
|
||||
/// <summary>
|
||||
/// Per-source next allowed show time (Unity instance ID → Time.time).
|
||||
/// </summary>
|
||||
private readonly Dictionary<int, float> _nextFloatingTextTimeBySourceId = new();
|
||||
|
||||
[Header("Sprite List")]
|
||||
[SerializeField] private Dictionary<ImageResType, Sprite> imageDic = new Dictionary<ImageResType, Sprite>();
|
||||
|
||||
/// <summary>
|
||||
/// Keeps Addressables handles alive so sprites in imageDic are not released.
|
||||
/// 保留 Addressables 句柄,避免已加载的 Sprite 被卸载。
|
||||
/// </summary>
|
||||
private readonly List<AsyncOperationHandle<Sprite>> _spriteLoadHandles = new List<AsyncOperationHandle<Sprite>>();
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
// Singleton
|
||||
if (Instance != null && Instance != this)
|
||||
{
|
||||
Destroy(gameObject);
|
||||
return;
|
||||
}
|
||||
Instance = this;
|
||||
DontDestroyOnLoad(gameObject);
|
||||
|
||||
// Tạo sẵn pool
|
||||
for (int i = 0; i < poolSize; i++)
|
||||
{
|
||||
var textObj = Instantiate(floatTextIconPrefab, transform);
|
||||
textObj.gameObject.SetActive(false);
|
||||
pool.Enqueue(textObj);
|
||||
}
|
||||
LoadAllImages();
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
foreach (var h in _spriteLoadHandles)
|
||||
{
|
||||
if (h.IsValid())
|
||||
Addressables.Release(h);
|
||||
}
|
||||
_spriteLoadHandles.Clear();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gọi để spawn text damage
|
||||
/// </summary>
|
||||
/// <param name="sourceForStagger">If set, multiple calls for this object are spaced by <see cref="staggerIntervalSeconds"/>.</param>
|
||||
public void ShowText(Vector3 worldPos, int damage, Color color = default, float scale = 1f, ImageResType imageResType = ImageResType.NUM_IMAGE, UnityEngine.Object sourceForStagger = null)
|
||||
{
|
||||
float delay = 0f;
|
||||
UnityEngine.Object staggerSource = sourceForStagger;
|
||||
if (staggerSource != null)
|
||||
{
|
||||
int key = staggerSource.GetInstanceID();
|
||||
float now = Time.time;
|
||||
if (!_nextFloatingTextTimeBySourceId.TryGetValue(key, out float nextSlot))
|
||||
nextSlot = now;
|
||||
float showAt = Mathf.Max(now, nextSlot);
|
||||
delay = showAt - now;
|
||||
_nextFloatingTextTimeBySourceId[key] = showAt + staggerIntervalSeconds;
|
||||
}
|
||||
|
||||
void DoShow()
|
||||
{
|
||||
if (staggerSource != null && !staggerSource)
|
||||
return;
|
||||
|
||||
var text = GetFromPool();
|
||||
var imageShow = imageResType == ImageResType.NUM_IMAGE ? null : imageDic[imageResType];
|
||||
if (damage > 0)
|
||||
text.Show(worldPos, damage.ToString(), color, scale, riseDistance, riseDuration, imageShow, () => ReturnToPool(text));
|
||||
else
|
||||
text.Show(worldPos, "", color, scale, riseDistance, riseDuration, imageShow, () => ReturnToPool(text));
|
||||
}
|
||||
|
||||
if (delay <= 0f)
|
||||
DoShow();
|
||||
else
|
||||
DOVirtual.DelayedCall(delay, DoShow, false).SetTarget(this);
|
||||
}
|
||||
|
||||
private AUIFloatTextIcon GetFromPool()
|
||||
{
|
||||
if (pool.Count > 0)
|
||||
{
|
||||
return pool.Dequeue();
|
||||
}
|
||||
|
||||
// Nếu hết pool, tạo thêm
|
||||
var text = Instantiate(floatTextIconPrefab, transform);
|
||||
text.gameObject.SetActive(false);
|
||||
return text;
|
||||
}
|
||||
|
||||
private void ReturnToPool(AUIFloatTextIcon text)
|
||||
{
|
||||
pool.Enqueue(text);
|
||||
}
|
||||
public bool LoadAllImages()
|
||||
{
|
||||
LoadImage(ImageResType.IMG_HITMISSED, "InGame/未命中.tga");
|
||||
LoadImage(ImageResType.IMG_LEVELUP, "InGame/升级了.tga");
|
||||
LoadImage(ImageResType.IMG_GOTEXP, "InGame/经验.tga");
|
||||
LoadImage(ImageResType.IMG_GOTMONEY, "InGame/金钱.tga");
|
||||
LoadImage(ImageResType.IMG_DEADLYSTRIKE, "InGame/爆击.tga");
|
||||
LoadImage(ImageResType.IMG_GOTSP, "InGame/元神.tga");
|
||||
LoadImage(ImageResType.IMG_INVALIDHIT, "InGame/无效.tga");
|
||||
//LoadImage(ImageResType.IMG_TEAMLEADER, "Window/LeaderMark.tga");
|
||||
LoadImage(ImageResType.IMG_HPWARN, "InGame/hp_warn.tga");
|
||||
LoadImage(ImageResType.IMG_MPWARN, "InGame/mp_warn.tga");
|
||||
LoadImage(ImageResType.IMG_RETORT, "InGame/反震.tga");
|
||||
LoadImage(ImageResType.IMG_IMMUNE, "InGame/免疫.tga");
|
||||
//LoadImage(ImageResType.IMG_TEAMMATE, "Window/Teammate.tga");
|
||||
LoadImage(ImageResType.IMG_PKSTATE, "InGame/PK状态标记.tga");
|
||||
LoadImage(ImageResType.IMG_GMFLAG, "InGame/GM标志.dds");
|
||||
LoadImage(ImageResType.IMG_ATTACKLOSE, "InGame/失败.tga");
|
||||
LoadImage(ImageResType.IMG_SUCCESS, "InGame/成功.tga");
|
||||
LoadImage(ImageResType.IMG_REBOUND, "InGame/复仇惩戒.tga");
|
||||
LoadImage(ImageResType.IMG_BEAT_BACK, "InGame/复仇镜像.tga");
|
||||
LoadImage(ImageResType.IMG_ADD, "InGame/吸血.tga");
|
||||
LoadImage(ImageResType.IMG_DODGE_DEBUFF, "InGame/状态闪避.tga");
|
||||
//LoadImage(ImageResType.IMG_KING, "King/皇冠图标.tga");
|
||||
return false;
|
||||
}
|
||||
private void LoadImage(ImageResType type, string path)
|
||||
{
|
||||
if (string.IsNullOrEmpty(path))
|
||||
return;
|
||||
|
||||
// Same normalization as skill/gfx paths (PC backslashes → Addressables-style slashes).
|
||||
// 与技能 gfx 路径一致:反斜杠转为斜杠,便于与 Addressables 地址对齐。
|
||||
string normalized = path.Replace('\\', '/');
|
||||
IReadOnlyList<string> candidates = BuildSpriteAddressCandidates(normalized);
|
||||
|
||||
foreach (string address in candidates)
|
||||
{
|
||||
var handle = Addressables.LoadAssetAsync<Sprite>(address);
|
||||
handle.WaitForCompletion();
|
||||
|
||||
if (handle.Status == AsyncOperationStatus.Succeeded && handle.Result != null)
|
||||
{
|
||||
imageDic[type] = handle.Result;
|
||||
_spriteLoadHandles.Add(handle);
|
||||
return;
|
||||
}
|
||||
|
||||
if (handle.IsValid())
|
||||
Addressables.Release(handle);
|
||||
|
||||
}
|
||||
Debug.Log($"[FLoatingTextManager] Sprite load failed for {type}. Addressables keys must match the catalog exactly; " +
|
||||
$"tried: {string.Join("; ", candidates)}. " +
|
||||
$"Similar file names are not auto-resolved (unlike fuzzy file search).");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Addressables uses exact string addresses. Imported UI art may drop .tga/.dds in the key; try those variants.
|
||||
/// Addressables 为精确字符串地址;导入后地址可能没有 .tga/.dds 等后缀,依次尝试这些候选。
|
||||
/// </summary>
|
||||
private static List<string> BuildSpriteAddressCandidates(string path)
|
||||
{
|
||||
var list = new List<string> { path };
|
||||
|
||||
void addUnique(string s)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(s) && !list.Contains(s))
|
||||
list.Add(s);
|
||||
}
|
||||
|
||||
string[] sourceExtensions = { ".tga", ".dds", ".bmp", ".png", ".jpg", ".jpeg" };
|
||||
foreach (string ext in sourceExtensions)
|
||||
{
|
||||
if (path.EndsWith(ext, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
addUnique(path.Substring(0, path.Length - ext.Length));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8635fe618431341d796413e99407c5fc
|
||||
@@ -2044,13 +2044,12 @@ namespace BrewMonster
|
||||
{
|
||||
if (nDamage == -2)
|
||||
{
|
||||
// this message is caused by a help skill, so don't use a wounded action here
|
||||
/* if (dwModifier & CECAttackEvent::MOD_IMMUNE)
|
||||
BubbleText(BUBBLE_IMMUNE, 0);
|
||||
else if (dwModifier & CECAttackEvent::MOD_NULLITY)
|
||||
BubbleText(BUBBLE_INVALIDHIT, 0);
|
||||
else if (dwModifier & CECAttackEvent::MOD_DODGE_DEBUFF)
|
||||
BubbleText(BUBBLE_DODGE_DEBUFF, 0);*/
|
||||
if ((dwModifier & (uint)MOD.MOD_IMMUNE) != 0)
|
||||
BubbleText((int)BubbleTextType.BUBBLE_IMMUNE, 0);
|
||||
else if ((dwModifier & (uint)MOD.MOD_NULLITY) != 0)
|
||||
BubbleText((int)BubbleTextType.BUBBLE_INVALIDHIT, 0);
|
||||
else if ((dwModifier & (uint)MOD.MOD_DODGE_DEBUFF) != 0)
|
||||
BubbleText((int)BubbleTextType.BUBBLE_DODGE_DEBUFF, 0);
|
||||
}
|
||||
else if (nDamage == -1)
|
||||
{
|
||||
@@ -2058,14 +2057,14 @@ namespace BrewMonster
|
||||
// Just play a wounded action
|
||||
if (!OnDamaged(skill))
|
||||
{
|
||||
// PlayAction((int)PLAYER_ACTION_TYPE.ACT_WOUNDED);
|
||||
PlayAction((int)PLAYER_ACTION_TYPE.ACT_WOUNDED);
|
||||
}
|
||||
/*if (dwModifier & CECAttackEvent::MOD_IMMUNE)
|
||||
BubbleText(BUBBLE_IMMUNE, 0);
|
||||
else if (dwModifier & CECAttackEvent::MOD_NULLITY)
|
||||
BubbleText(BUBBLE_INVALIDHIT, 0);
|
||||
else if (dwModifier & CECAttackEvent::MOD_DODGE_DEBUFF)
|
||||
BubbleText(BUBBLE_DODGE_DEBUFF, 0);*/
|
||||
if ((dwModifier & (uint)MOD.MOD_IMMUNE) != 0)
|
||||
BubbleText((int)BubbleTextType.BUBBLE_IMMUNE, 0);
|
||||
else if ((dwModifier & (uint)MOD.MOD_NULLITY) != 0)
|
||||
BubbleText((int)BubbleTextType.BUBBLE_INVALIDHIT, 0);
|
||||
else if ((dwModifier & (uint)MOD.MOD_DODGE_DEBUFF) != 0)
|
||||
BubbleText((int)BubbleTextType.BUBBLE_DODGE_DEBUFF, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2073,34 +2072,178 @@ namespace BrewMonster
|
||||
if (nDamage > 0)
|
||||
{
|
||||
int p1 = 0;
|
||||
/*if (dwModifier & CECAttackEvent::MOD_CRITICAL_STRIKE)
|
||||
if ((dwModifier & (int)MOD.MOD_CRITICAL_STRIKE) != 0)
|
||||
p1 |= 0x0001;
|
||||
|
||||
if (dwModifier & CECAttackEvent::MOD_RETORT)
|
||||
p1 |= 0x0002;*/
|
||||
if ((dwModifier & (uint)MOD.MOD_RETORT) != 0)
|
||||
p1 |= 0x0002;
|
||||
|
||||
if (!OnDamaged(skill))
|
||||
// PlayAction((int)PLAYER_ACTION_TYPE.ACT_WOUNDED);
|
||||
PlayAction((int)PLAYER_ACTION_TYPE.ACT_WOUNDED);
|
||||
|
||||
DamageTextManager.Instance.ShowDamageText(
|
||||
transform.position, nDamage, Color.yellow, 1.0f);
|
||||
/* if (dwModifier & CECAttackEvent::MOD_IMMUNE)
|
||||
BubbleText(BUBBLE_IMMUNE, 0);
|
||||
else if (dwModifier & CECAttackEvent::MOD_REBOUND)
|
||||
BubbleText(BUBBLE_REBOUND, nDamage);
|
||||
else if (dwModifier & CECAttackEvent::MOD_BEAT_BACK)
|
||||
BubbleText(BUBBLE_BEAT_BACK, nDamage);
|
||||
else
|
||||
BubbleText(BUBBLE_DAMAGE, nDamage, p1);*/
|
||||
if ((dwModifier & (uint)MOD.MOD_IMMUNE) != 0)
|
||||
BubbleText((int)BubbleTextType.BUBBLE_IMMUNE, 0);
|
||||
else if ((dwModifier & (uint)MOD.MOD_REBOUND) != 0)
|
||||
BubbleText((int)BubbleTextType.BUBBLE_REBOUND, (uint)nDamage);
|
||||
else if ((dwModifier & (uint)MOD.MOD_BEAT_BACK) != 0)
|
||||
BubbleText((int)BubbleTextType.BUBBLE_BEAT_BACK, (uint)nDamage);
|
||||
else
|
||||
BubbleText((int)BubbleTextType.BUBBLE_DAMAGE, (uint)nDamage, p1);
|
||||
}
|
||||
/* else if (dwModifier & CECAttackEvent::MOD_IMMUNE)
|
||||
BubbleText(BUBBLE_IMMUNE, 0);
|
||||
else if (dwModifier & CECAttackEvent::MOD_NULLITY)
|
||||
BubbleText(BUBBLE_INVALIDHIT, 0);
|
||||
else if ((dwModifier & (uint)MOD.MOD_IMMUNE) != 0)
|
||||
BubbleText((int)BubbleTextType.BUBBLE_IMMUNE, 0);
|
||||
else if ((dwModifier & (uint)MOD.MOD_NULLITY) != 0)
|
||||
BubbleText((int)BubbleTextType.BUBBLE_INVALIDHIT, 0);
|
||||
else
|
||||
BubbleText(BUBBLE_HITMISSED, 0);*/
|
||||
BubbleText((int)BubbleTextType.BUBBLE_HITMISSED, 0);
|
||||
}
|
||||
}
|
||||
|
||||
public void BubbleText(int iIndex, uint dwNum, int p1 = 0)
|
||||
{
|
||||
|
||||
bool bHost = IsHostPlayer();
|
||||
// if (iIndex == BUBBLE_EXP || iIndex == BUBBLE_SP)
|
||||
// bHost = false;
|
||||
|
||||
Color dwCol = new Color(255, 205, 75);
|
||||
|
||||
if (bHost)
|
||||
{
|
||||
var pGameRun = EC_Game.GetGameRun();
|
||||
CECHostPlayer pHost = pGameRun?.GetHostPlayer();
|
||||
if (iIndex == (int)BubbleTextType.BUBBLE_EXP)
|
||||
{
|
||||
bool hasBookExp = pHost != null && pHost.IsReincarnationTomeActive;
|
||||
int msgId = (int)dwNum > 0
|
||||
? (hasBookExp ? (int)FixedMsg.FIXMSG_GOT_BOOKEXP : (int)FixedMsg.FIXMSG_GOTEXP)
|
||||
: (int)FixedMsg.FIXMSG_LOSTEXP;
|
||||
pGameRun?.AddFixedChannelMsg(msgId, (int)ChatChannel.GP_CHAT_FIGHT, (int)dwNum);
|
||||
}
|
||||
if (iIndex == (int)BubbleTextType.BUBBLE_SP)
|
||||
pGameRun?.AddFixedChannelMsg((int)FixedMsg.FIXMSG_GOTSP, (int)ChatChannel.GP_CHAT_FIGHT, (int)dwNum);
|
||||
if (iIndex == (int)BubbleTextType.BUBBLE_REALMEXP)
|
||||
pGameRun?.AddFixedChannelMsg((int)FixedMsg.FIXMSG_GOT_REALMEXP, (int)ChatChannel.GP_CHAT_FIGHT, (int)dwNum);
|
||||
}
|
||||
|
||||
// Chariot / mount (C++): raise bubble by mount dummy AABB * 2.3f. IsInChariot() lives on CECHostPlayer; wire via override or protected hook when ready.
|
||||
// if (IsInChariot())
|
||||
// {
|
||||
// var dummy = GetDummyModel((int)PLAYERMODEL_TYPE.PLAYERMODEL_DUMMYTYPE2);
|
||||
// if (dummy != null)
|
||||
// vPos = GetPosVector3() + g_vAxisY * (dummy.GetModelAABB().Extents.y * 2.3f);
|
||||
// else
|
||||
// vPos = GetPosVector3() + g_vAxisY * (m_aabb.Extents.y * 2.5f);
|
||||
// }
|
||||
// else
|
||||
// vPos = GetPosVector3() + g_vAxisY * (m_aabb.Extents.y * 2.5f);
|
||||
Vector3 vPos = GetPosVector3() + g_vAxisY * (m_aabb.Extents.y * 2.5f);
|
||||
|
||||
ImageResType bubbleTextType = ImageResType.NUM_IMAGE;
|
||||
|
||||
switch (iIndex)
|
||||
{
|
||||
case (int)BubbleTextType.BUBBLE_DAMAGE:
|
||||
|
||||
if (!bHost)
|
||||
dwCol = new Color(237, 56, 0);
|
||||
|
||||
if ((p1 & 0x0001) != 0)
|
||||
bubbleTextType = ImageResType.IMG_DEADLYSTRIKE;
|
||||
else if ((p1 & 0x0002) != 0)
|
||||
bubbleTextType = ImageResType.IMG_RETORT;
|
||||
break;
|
||||
|
||||
case (int)BubbleTextType.BUBBLE_EXP:
|
||||
|
||||
bubbleTextType = ImageResType.IMG_GOTEXP;
|
||||
// pDecal->SetScreenPos(80, 70);
|
||||
// pDecal->EnableScreenPos(true);
|
||||
break;
|
||||
|
||||
case (int)BubbleTextType.BUBBLE_SP:
|
||||
|
||||
bubbleTextType = ImageResType.IMG_GOTSP;
|
||||
// pDecal->SetScreenPos(80, 90);
|
||||
// pDecal->EnableScreenPos(true);
|
||||
break;
|
||||
|
||||
case (int)BubbleTextType.BUBBLE_MONEY:
|
||||
|
||||
bubbleTextType = ImageResType.IMG_GOTMONEY;
|
||||
break;
|
||||
|
||||
case (int)BubbleTextType.BUBBLE_LEVELUP:
|
||||
|
||||
bubbleTextType = ImageResType.IMG_LEVELUP;
|
||||
break;
|
||||
|
||||
case (int)BubbleTextType.BUBBLE_HITMISSED:
|
||||
|
||||
if (!bHost)
|
||||
dwCol = new Color(237, 56, 0);
|
||||
|
||||
bubbleTextType = ImageResType.IMG_HITMISSED;
|
||||
break;
|
||||
|
||||
case (int)BubbleTextType.BUBBLE_INVALIDHIT:
|
||||
|
||||
if (!bHost)
|
||||
dwCol = new Color(237, 56, 0);
|
||||
|
||||
bubbleTextType = ImageResType.IMG_INVALIDHIT;
|
||||
break;
|
||||
|
||||
case (int)BubbleTextType.BUBBLE_IMMUNE:
|
||||
|
||||
if (!bHost)
|
||||
dwCol = new Color(237, 56, 0);
|
||||
|
||||
bubbleTextType = ImageResType.IMG_IMMUNE;
|
||||
break;
|
||||
|
||||
case (int)BubbleTextType.BUBBLE_HPWARN:
|
||||
|
||||
dwCol = new Color(255, 255, 255);
|
||||
bubbleTextType = ImageResType.IMG_HPWARN;
|
||||
break;
|
||||
|
||||
case (int)BubbleTextType.BUBBLE_MPWARN:
|
||||
|
||||
dwCol = new Color(255, 255, 255);
|
||||
bubbleTextType = ImageResType.IMG_MPWARN;
|
||||
break;
|
||||
|
||||
case (int)BubbleTextType.BUBBLE_REBOUND:
|
||||
|
||||
bubbleTextType = ImageResType.IMG_REBOUND;
|
||||
break;
|
||||
|
||||
case (int)BubbleTextType.BUBBLE_BEAT_BACK:
|
||||
|
||||
bubbleTextType = ImageResType.IMG_BEAT_BACK;
|
||||
break;
|
||||
|
||||
case (int)BubbleTextType.BUBBLE_ADD:
|
||||
|
||||
dwCol = new Color(126, 206, 244);
|
||||
bubbleTextType = ImageResType.IMG_ADD;
|
||||
break;
|
||||
|
||||
case (int)BubbleTextType.BUBBLE_DODGE_DEBUFF:
|
||||
|
||||
if (!bHost)
|
||||
dwCol = new Color(237, 56, 0);
|
||||
|
||||
bubbleTextType = ImageResType.IMG_DODGE_DEBUFF;
|
||||
break;
|
||||
|
||||
default:
|
||||
bubbleTextType = ImageResType.NUM_IMAGE;
|
||||
break;
|
||||
}
|
||||
|
||||
FLoatingTextManager.Instance.ShowText(vPos, (int)dwNum, dwCol, 1f, bubbleTextType, this);
|
||||
}
|
||||
public void StopSkillAttackAction()
|
||||
{
|
||||
if (m_pActionController != null)
|
||||
@@ -3894,6 +4037,26 @@ namespace BrewMonster
|
||||
WINGTYPE_FLYSWORD, // 飞行器类型:飞剑
|
||||
WINGTYPE_DOUBLEWHEEL, // 飞行器类型:双脚飞行器
|
||||
};
|
||||
// Bubble text
|
||||
public enum BubbleTextType
|
||||
{
|
||||
BUBBLE_DAMAGE = 0,
|
||||
BUBBLE_EXP,
|
||||
BUBBLE_SP,
|
||||
BUBBLE_MONEY,
|
||||
BUBBLE_LEVELUP,
|
||||
BUBBLE_HITMISSED,
|
||||
BUBBLE_INVALIDHIT,
|
||||
BUBBLE_IMMUNE,
|
||||
BUBBLE_HPWARN,
|
||||
BUBBLE_MPWARN,
|
||||
BUBBLE_REBOUND, // ����
|
||||
BUBBLE_BEAT_BACK, // ����
|
||||
BUBBLE_ADD, // ��Ѫ�ļӺ�
|
||||
BUBBLE_DODGE_DEBUFF,
|
||||
BUBBLE_REALMEXP,
|
||||
BUBBLE_NUM,
|
||||
};
|
||||
public struct PVPINFO
|
||||
{
|
||||
public bool bEnable; // PVP switch
|
||||
|
||||
@@ -8,7 +8,6 @@ using System;
|
||||
using System.Threading.Tasks;
|
||||
using BrewMonster.Scripts.Chat;
|
||||
using UnityEngine;
|
||||
|
||||
public class CECNPC : CECObject
|
||||
{
|
||||
[SerializeField] protected INFO m_NPCInfo;
|
||||
@@ -824,58 +823,105 @@ public class CECNPC : CECObject
|
||||
// so if iDamage is -1 we will shoud the wounded animation
|
||||
if (iDamage == -1 && !m_bStartFight)
|
||||
PlayModelAction((int)NPCActionIndex.ACT_WOUNDED);
|
||||
DamageTextManager.Instance.ShowDamageText(transform.position, iDamage, Color.red, 1.0f);
|
||||
FLoatingTextManager.Instance.ShowText(transform.position, iDamage, Color.red, 1.0f, ImageResType.NUM_IMAGE, this);
|
||||
|
||||
/*if ((dwModifier & (uint)MOD.MOD_IMMUNE) != 0 *//* && !IsImmuneDisable()*//*)
|
||||
textma
|
||||
else if (dwModifier & CECAttackEvent::MOD_NULLITY)
|
||||
BubbleText(BUBBLE_INVALIDHIT, 0);
|
||||
else if (dwModifier & CECAttackEvent::MOD_ENCHANT_FAILED)
|
||||
BubbleText(BUBBLE_LOSE, 0);
|
||||
else if (dwModifier & CECAttackEvent::MOD_SUCCESS)
|
||||
BubbleText(BUBBLE_SUCCESS, 0);
|
||||
else if (dwModifier & CECAttackEvent::MOD_DODGE_DEBUFF)
|
||||
BubbleText(BUBBLE_DODGE_DEBUFF, 0);*/
|
||||
if ((dwModifier & (uint)MOD.MOD_IMMUNE) != 0 /* && !IsImmuneDisable()*/)
|
||||
BubbleText((int)MOD.MOD_IMMUNE, 0);
|
||||
else if ((dwModifier & (uint)MOD.MOD_NULLITY) != 0)
|
||||
BubbleText((int)MOD.MOD_NULLITY, 0);
|
||||
else if ((dwModifier & (uint)MOD.MOD_ENCHANT_FAILED) != 0)
|
||||
BubbleText((int)MOD.MOD_ENCHANT_FAILED, 0);
|
||||
else if ((dwModifier & (uint)MOD.MOD_SUCCESS) != 0)
|
||||
BubbleText((int)MOD.MOD_SUCCESS, 0);
|
||||
else if ((dwModifier & (uint)MOD.MOD_DODGE_DEBUFF) != 0)
|
||||
BubbleText((int)MOD.MOD_DODGE_DEBUFF, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
// this message is related to the host, so we should show a pop up message
|
||||
// Popup a damage decal
|
||||
/* bool bDeadlyStrike = (dwModifier & CECAttackEvent::MOD_CRITICAL_STRIKE) ? true : false;
|
||||
bool bRetort = (dwModifier & CECAttackEvent::MOD_RETORT) ? true : false;*/
|
||||
bool bDeadlyStrike = (dwModifier & (uint)MOD.MOD_CRITICAL_STRIKE) != 0;
|
||||
bool bRetort = (dwModifier & (uint)MOD.MOD_RETORT) != 0;
|
||||
|
||||
if (iDamage > 0)
|
||||
{
|
||||
if (!m_bStartFight)
|
||||
PlayModelAction((int)NPCActionIndex.ACT_WOUNDED);
|
||||
|
||||
DamageTextManager.Instance.ShowDamageText(transform.position, iDamage, Color.red, 1.0f);
|
||||
/* int p1 = 0;
|
||||
if (bDeadlyStrike)
|
||||
p1 |= 0x0001;
|
||||
else if (bRetort)
|
||||
p1 |= 0x0002;*/
|
||||
// Damage number + tint/icons: BubbleText → ShowText only (avoid duplicate red plain text + orange BubbleText).
|
||||
// 伤害数字与图标只走 BubbleText,避免先红字再橙字飘两次。
|
||||
int p1 = 0;
|
||||
if (bDeadlyStrike)
|
||||
p1 |= 0x0001;
|
||||
else if (bRetort)
|
||||
p1 |= 0x0002;
|
||||
|
||||
/* if (dwModifier & CECAttackEvent::MOD_REBOUND)
|
||||
BubbleText(BUBBLE_REBOUND, (DWORD)iDamage);
|
||||
else if (dwModifier & CECAttackEvent::MOD_BEAT_BACK)
|
||||
BubbleText(BUBBLE_BEAT_BACK, (DWORD)iDamage);
|
||||
else
|
||||
BubbleText(BUBBLE_DAMAGE, (DWORD)iDamage, p1);*/
|
||||
if ((dwModifier & (uint)MOD.MOD_REBOUND) != 0)
|
||||
BubbleText((int)BubbleTextType.BUBBLE_REBOUND, iDamage);
|
||||
else if ((dwModifier & (uint)MOD.MOD_BEAT_BACK) != 0)
|
||||
BubbleText((int)BubbleTextType.BUBBLE_BEAT_BACK, iDamage);
|
||||
else
|
||||
BubbleText((int)BubbleTextType.BUBBLE_DAMAGE, iDamage, p1);
|
||||
}
|
||||
/* else if ((dwModifier & CECAttackEvent::MOD_IMMUNE) && !IsImmuneDisable())
|
||||
BubbleText(BUBBLE_IMMUNE, 0);
|
||||
else if (dwModifier & CECAttackEvent::MOD_NULLITY)
|
||||
BubbleText(BUBBLE_INVALIDHIT, 0);
|
||||
else if (dwModifier & CECAttackEvent::MOD_ENCHANT_FAILED)
|
||||
BubbleText(BUBBLE_LOSE, 0);
|
||||
else if (dwModifier & CECAttackEvent::MOD_SUCCESS)
|
||||
BubbleText(BUBBLE_SUCCESS, 0);
|
||||
else if ((dwModifier & (uint)MOD.MOD_IMMUNE) != 0 /*&& !IsImmuneDisable()*/)
|
||||
BubbleText((int)BubbleTextType.BUBBLE_IMMUNE, 0);
|
||||
else if ((dwModifier & (uint)MOD.MOD_NULLITY) != 0)
|
||||
BubbleText((int)BubbleTextType.BUBBLE_INVALIDHIT, 0);
|
||||
else if ((dwModifier & (uint)MOD.MOD_ENCHANT_FAILED) != 0)
|
||||
BubbleText((int)BubbleTextType.BUBBLE_LOSE, 0);
|
||||
else if ((dwModifier & (uint)MOD.MOD_SUCCESS) != 0)
|
||||
BubbleText((int)BubbleTextType.BUBBLE_SUCCESS, 0);
|
||||
else
|
||||
BubbleText(BUBBLE_HITMISSED, 0);*/
|
||||
BubbleText((int)BubbleTextType.BUBBLE_HITMISSED, 0);
|
||||
}
|
||||
}
|
||||
|
||||
public void BubbleText(int iIndex, int dwNum, int p1 = 0/* 0 */)
|
||||
{
|
||||
//FLoatingTextManager.Instance.ShowText(transform.position, dwNum, Color.red, 1.0f, (uint)iIndex);
|
||||
Color displayColor = new Color(237, 56, 0);
|
||||
ImageResType imageResType = ImageResType.NUM_IMAGE;
|
||||
switch (iIndex)
|
||||
{
|
||||
case (int)BubbleTextType.BUBBLE_DAMAGE:
|
||||
if ((p1 & 0x0001) != 0)
|
||||
imageResType = ImageResType.IMG_DEADLYSTRIKE;
|
||||
else if ((p1 & 0x0002) != 0)
|
||||
imageResType = ImageResType.IMG_RETORT;
|
||||
break;
|
||||
|
||||
case (int)BubbleTextType.BUBBLE_HITMISSED:
|
||||
imageResType = ImageResType.IMG_HITMISSED;
|
||||
break;
|
||||
case (int)BubbleTextType.BUBBLE_INVALIDHIT:
|
||||
imageResType = ImageResType.IMG_INVALIDHIT;
|
||||
break;
|
||||
case (int)BubbleTextType.BUBBLE_IMMUNE:
|
||||
imageResType = ImageResType.IMG_IMMUNE;
|
||||
break;
|
||||
case (int)BubbleTextType.BUBBLE_HPWARN:
|
||||
imageResType = ImageResType.IMG_HPWARN;
|
||||
break;
|
||||
case (int)BubbleTextType.BUBBLE_LOSE:
|
||||
imageResType = ImageResType.IMG_ATTACKLOSE;
|
||||
break;
|
||||
case (int)BubbleTextType.BUBBLE_SUCCESS:
|
||||
imageResType = ImageResType.IMG_SUCCESS;
|
||||
break;
|
||||
case (int)BubbleTextType.BUBBLE_REBOUND:
|
||||
imageResType = ImageResType.IMG_REBOUND;
|
||||
break;
|
||||
case (int)BubbleTextType.BUBBLE_BEAT_BACK:
|
||||
imageResType = ImageResType.IMG_BEAT_BACK;
|
||||
break;
|
||||
case (int)BubbleTextType.BUBBLE_DODGE_DEBUFF:
|
||||
imageResType = ImageResType.IMG_DODGE_DEBUFF;
|
||||
break;
|
||||
default:
|
||||
imageResType = ImageResType.NUM_IMAGE;
|
||||
break;
|
||||
}
|
||||
FLoatingTextManager.Instance.ShowText(transform.position, dwNum, displayColor, 1.0f, imageResType, this);
|
||||
}
|
||||
public void WorkFinished(int iWorkID)
|
||||
{
|
||||
// Note: below judge can prevent many problems when we attempt to
|
||||
@@ -1710,6 +1756,19 @@ public class CECNPC : CECObject
|
||||
CECModel model = GetModel();
|
||||
return model?.GetHook(hookName, recursive);
|
||||
}
|
||||
public enum BubbleTextType
|
||||
{
|
||||
BUBBLE_DAMAGE = 0,
|
||||
BUBBLE_HITMISSED,
|
||||
BUBBLE_INVALIDHIT,
|
||||
BUBBLE_IMMUNE,
|
||||
BUBBLE_HPWARN,
|
||||
BUBBLE_LOSE,
|
||||
BUBBLE_SUCCESS,
|
||||
BUBBLE_REBOUND, // ����
|
||||
BUBBLE_BEAT_BACK, // ����
|
||||
BUBBLE_DODGE_DEBUFF,
|
||||
};
|
||||
}
|
||||
public struct ClearComActFlagEvent
|
||||
{
|
||||
@@ -1777,6 +1836,8 @@ public enum NPCActionIndex
|
||||
ACT_WOUNDED2,
|
||||
ACT_MAX,
|
||||
};
|
||||
//BUBBLE TEXT TYPE FOR NPC. HOST IS DIFFERENT FROM NPC.
|
||||
|
||||
public ref struct ByteReader
|
||||
{
|
||||
private ReadOnlySpan<byte> _span;
|
||||
|
||||
@@ -3039,5 +3039,11 @@ namespace CSNetwork.GPDataType
|
||||
{
|
||||
public int id; // self id or pet id.
|
||||
};
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
public struct cmd_receive_exp
|
||||
{
|
||||
public int exp;
|
||||
public int sp;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ using System.Threading.Tasks;
|
||||
using BrewMonster.PerfectWorld.Scripts.UI;
|
||||
using BrewMonster.Scripts;
|
||||
using BrewMonster.Scripts.Chat;
|
||||
using BrewMonster.Scripts.ChatUI;
|
||||
using BrewMonster.Scripts.Managers;
|
||||
using BrewMonster.Scripts.UI;
|
||||
using BrewMonster.Scripts;
|
||||
@@ -1290,6 +1291,9 @@ namespace CSNetwork
|
||||
|
||||
break;
|
||||
}
|
||||
case CommandID.RECEIVE_EXP:
|
||||
EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_RECEIVEEXP, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
|
||||
break;
|
||||
case CommandID.LEVEL_UP:
|
||||
{
|
||||
cmd_level_up pCmdLevelUp = GPDataTypeHelper.FromBytes<cmd_level_up>(pDataBuf); ;
|
||||
@@ -1937,42 +1941,51 @@ namespace CSNetwork
|
||||
// [Port] C++: DlgChat::OnCommand_speak dòng 736:
|
||||
// Server KHÔNG echo tin nhắn quay lại cho chính người gửi.
|
||||
// => Phải gọi AddChatMessage ngay tại local để hiển thị lên UI Chat Panel.
|
||||
string szMsgCopy = szMsg;
|
||||
byte cChannelCopy = cChannel;
|
||||
EnqueueChatUI(() => SendChatData_ApplyLocalEchoToChatPanel(cChannelCopy, szMsgCopy));
|
||||
}
|
||||
|
||||
/// <summary>Echo local sau SendProtocol — chỉ chạy trên main thread qua EnqueueChatUI.</summary>
|
||||
private static void SendChatData_ApplyLocalEchoToChatPanel(byte cChannel, string szMsgBody)
|
||||
{
|
||||
CECHostPlayer pHost = EC_Game.GetGameRun().GetHostPlayer();
|
||||
if (pHost == null)
|
||||
return;
|
||||
|
||||
int nEmotionSet = 0;
|
||||
|
||||
// Giữ logic C++ port: SUPERFARCRY → bộ emotion 6; strMsg cắt 8 ký tự trong bản gốc không dùng cho Format (Format vẫn dùng szMsg đầy đủ).
|
||||
// Keep C++ port: SUPERFARCRY → emotion set 6; original trimmed strMsg was unused for Format (Format still used full szMsg).
|
||||
if (cChannel is (byte)ChatChannel.GP_CHAT_LOCAL
|
||||
or (byte)ChatChannel.GP_CHAT_FARCRY
|
||||
or (byte)ChatChannel.GP_CHAT_SUPERFARCRY
|
||||
or (byte)ChatChannel.GP_CHAT_BATTLE
|
||||
or (byte)ChatChannel.GP_CHAT_COUNTRY)
|
||||
{
|
||||
CECHostPlayer pHost = EC_Game.GetGameRun().GetHostPlayer();
|
||||
int nEmotionSet = 0;
|
||||
|
||||
// Head Bubble: Chỉ hiện bong bóng đầu cho các kênh "quanh người" (giống C++ SendChatData)
|
||||
if (cChannel is (byte)ChatChannel.GP_CHAT_LOCAL
|
||||
or (byte)ChatChannel.GP_CHAT_FARCRY
|
||||
or (byte)ChatChannel.GP_CHAT_SUPERFARCRY
|
||||
or (byte)ChatChannel.GP_CHAT_BATTLE
|
||||
or (byte)ChatChannel.GP_CHAT_COUNTRY)
|
||||
{
|
||||
string strMsg = szMsg;
|
||||
if (cChannel == (byte)ChatChannel.GP_CHAT_SUPERFARCRY)
|
||||
{
|
||||
if (strMsg.Length > 8)
|
||||
strMsg = strMsg.Substring(0, strMsg.Length - 8);
|
||||
nEmotionSet = SUPER_FAR_CRY_EMOTION_SET;
|
||||
}
|
||||
}
|
||||
|
||||
// UI Chat Panel: Hiển thị cho TẤT CẢ kênh (Local, Team, Faction, Trade...)
|
||||
CECStringTab pStrTab = EC_Game.GetFixedMsgs();
|
||||
string szName = pHost.GetName();
|
||||
char[] szText = new char[80];
|
||||
AUICommon.AUI_ConvertChatString(ref szName, ref szText, false);
|
||||
|
||||
string fmt = AUIDialog.FormatPrintf(pStrTab.GetWideString((int)FixedMsg.FIXMSG_CHAT));
|
||||
string str;
|
||||
try {
|
||||
str = string.Format(fmt, szName, szMsg);
|
||||
} catch {
|
||||
str = $"{szName}: {szMsg}";
|
||||
}
|
||||
EC_Game.GetGameRun().AddChatMessage(str, cChannel, pHost.GetCharacterID(),
|
||||
null, 0, nEmotionSet, null, szMsg);
|
||||
if (cChannel == (byte)ChatChannel.GP_CHAT_SUPERFARCRY)
|
||||
nEmotionSet = SUPER_FAR_CRY_EMOTION_SET;
|
||||
}
|
||||
|
||||
string pszMsgOrigion = szMsgBody;
|
||||
CECStringTab pStrTab = EC_Game.GetFixedMsgs();
|
||||
string szName = pHost.GetName();
|
||||
char[] szText = new char[80];
|
||||
AUICommon.AUI_ConvertChatString(ref szName, ref szText, false);
|
||||
|
||||
string fmt = AUIDialog.FormatPrintf(pStrTab.GetWideString((int)FixedMsg.FIXMSG_CHAT));
|
||||
string str;
|
||||
try
|
||||
{
|
||||
str = string.Format(fmt, szName, szMsgBody);
|
||||
}
|
||||
catch
|
||||
{
|
||||
str = $"{szName}: {szMsgBody}";
|
||||
}
|
||||
|
||||
EC_Game.GetGameRun().AddChatMessage(str, cChannel, pHost.GetCharacterID(),
|
||||
null, 0, nEmotionSet, null, pszMsgOrigion);
|
||||
}
|
||||
|
||||
public void SendPrivateChatData(string szDstName, string szMsg, byte byFlag = 0,
|
||||
@@ -2056,6 +2069,128 @@ namespace CSNetwork
|
||||
return ui != null ? ui.ConvertWireChatBodyForDisplay(wireBody, cEmotion) : wireBody;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Luồng mạng → SynchronizationContext (main) → hàng đợi ChatThreadDispatcher — cùng pipeline với ChatSystemlUI / MiniChatUI.
|
||||
/// Network thread → SynchronizationContext (main) → ChatThreadDispatcher queue (same pipeline as ChatSystemlUI / MiniChatUI).
|
||||
/// </summary>
|
||||
private void EnqueueChatUI(Action action)
|
||||
{
|
||||
if (action == null)
|
||||
return;
|
||||
SynchronizationContext ctx = Context;
|
||||
if (ctx == null)
|
||||
{
|
||||
_logger.Log(LogType.Error, "[GameSession] EnqueueChatUI: Context is null; chat UI not marshaled.");
|
||||
return;
|
||||
}
|
||||
|
||||
ctx.Post(_ => ChatThreadDispatcher.Instance.Post(action), null);
|
||||
}
|
||||
|
||||
private void OnPrtcWorldChat_Apply(int roleId, byte channel, int emotion, string strMsg, string strSrcName)
|
||||
{
|
||||
CECGameUIMan pGameUI = EC_Game.GetGameRun().GetUIManager().GetInGameUIMan();
|
||||
CECStringTab pStrTab = EC_Game.GetFixedMsgs();
|
||||
|
||||
Debug.Log($"[Cuong] {strMsg}");
|
||||
string fmt = AUIDialog.FormatPrintf(pStrTab.GetWideString((int)FixedMsg.FIXMSG_CHAT));
|
||||
string formatted;
|
||||
try
|
||||
{
|
||||
formatted = string.Format(fmt, strSrcName, strMsg);
|
||||
}
|
||||
catch
|
||||
{
|
||||
formatted = $"{strSrcName}: {strMsg}";
|
||||
}
|
||||
|
||||
pGameUI.AddChatMessage(formatted, (ChatChannel)channel, roleId, strSrcName,
|
||||
0, emotion, null, strMsg);
|
||||
|
||||
if (!CECGameUIMan.ChannelShowsChatBubbleAboveHead((ChatChannel)channel))
|
||||
{
|
||||
CECPlayer pSrcPlayer = EC_Game.GetGameRun().GetWorld().GetPlayerMan().GetPlayer(roleId);
|
||||
if (pSrcPlayer != null)
|
||||
{
|
||||
string bubbleTmp = pGameUI.ConvertWireBodyForHeadBubble(
|
||||
strMsg, (ChatChannel)channel, roleId, emotion);
|
||||
EventBus.PublishChannel(roleId, new EventChatMessageOnTopPlayer(roleId, bubbleTmp));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void OnPrtcChatMessage_ApplyNpcBranch(int srcRoleid, int channel, int emotion, string szMsgBody, string strTempFull)
|
||||
{
|
||||
BMLogger.Log("[Cuong] ISNPCID " + strTempFull);
|
||||
CECStringTab pStrTab = EC_Game.GetFixedMsgs();
|
||||
CECNPC pNPC = EC_Game.GetGameRun().GetWorld().GetNPCMan().GetNPC(srcRoleid);
|
||||
|
||||
if (pNPC == null)
|
||||
return;
|
||||
|
||||
string template = AUIDialog.FormatPrintf(pStrTab.GetWideString((int)FixedMsg.FIXMSG_CHAT2));
|
||||
|
||||
string message = string.Format(
|
||||
template,
|
||||
pNPC.GetName(),
|
||||
szMsgBody);
|
||||
|
||||
EC_Game.GetGameRun().AddChatMessage(
|
||||
message,
|
||||
channel,
|
||||
srcRoleid,
|
||||
null,
|
||||
0,
|
||||
emotion);
|
||||
|
||||
string szMsgOut = szMsgBody;
|
||||
CECUIHelper.RemoveNameFlagFromNPCChat(strTempFull, out szMsgOut);
|
||||
|
||||
pNPC.SetLastSaidWords(szMsgOut);
|
||||
}
|
||||
|
||||
private void OnPrtcPrivateChat_Apply(
|
||||
int srcRoleid,
|
||||
byte whisperChannelFlag,
|
||||
int emotion,
|
||||
string strMsg,
|
||||
string strSrcName)
|
||||
{
|
||||
CECGameUIMan pGameUI = EC_Game.GetGameRun().GetUIManager().GetInGameUIMan();
|
||||
CECStringTab pStrTab = EC_Game.GetFixedMsgs();
|
||||
|
||||
if (whisperChannelFlag == 0 || whisperChannelFlag == 1)
|
||||
{
|
||||
string fmt = AUIDialog.FormatPrintf(pStrTab.GetWideString((int)FixedMsg.FIXMSG_PRIVATECHAT1));
|
||||
BMLogger.Log($"[Cuong] OnPrtcPrivateChat {fmt}");
|
||||
string formatted;
|
||||
try
|
||||
{
|
||||
formatted = string.Format(fmt, strSrcName, strMsg);
|
||||
}
|
||||
catch
|
||||
{
|
||||
formatted = $"{strSrcName} whispers to you: {strMsg}";
|
||||
}
|
||||
|
||||
pGameUI.AddChatMessage(formatted, ChatChannel.GP_CHAT_WHISPER, srcRoleid, strSrcName,
|
||||
whisperChannelFlag, emotion, null, strMsg);
|
||||
}
|
||||
else
|
||||
{
|
||||
pGameUI.AddChatMessage(strMsg, ChatChannel.GP_CHAT_WHISPER, srcRoleid, strSrcName,
|
||||
whisperChannelFlag, emotion, null, strMsg);
|
||||
}
|
||||
|
||||
CECPlayer pSrcPlayer = EC_Game.GetGameRun().GetWorld().GetPlayerMan().GetPlayer(srcRoleid);
|
||||
if (pSrcPlayer != null)
|
||||
{
|
||||
string bubbleTmp = pGameUI.ConvertWireBodyForHeadBubble(
|
||||
strMsg, ChatChannel.GP_CHAT_WHISPER, srcRoleid, emotion);
|
||||
EventBus.PublishChannel(srcRoleid, new EventChatMessageOnTopPlayer(srcRoleid, bubbleTmp));
|
||||
}
|
||||
}
|
||||
|
||||
private bool OnPrtcWorldChat(Protocol pProtocol, bool bCalledagain)
|
||||
{
|
||||
worldchat p = (worldchat)pProtocol;
|
||||
@@ -2065,36 +2200,13 @@ namespace CSNetwork
|
||||
if (p.Roleid == m_iCharID)
|
||||
return true;
|
||||
|
||||
CECGameUIMan pGameUI = EC_Game.GetGameRun().GetUIManager().GetInGameUIMan();
|
||||
CECStringTab pStrTab = EC_Game.GetFixedMsgs();
|
||||
|
||||
int roleId = p.Roleid;
|
||||
byte channel = p.Channel;
|
||||
int emotion = p.Emotion;
|
||||
string strMsg = Encoding.Unicode.GetString(p.Msg.ToArray());
|
||||
string strSrcName = Encoding.Unicode.GetString(p.Name.ToArray());
|
||||
Debug.Log($"[Cuong] {strMsg}");
|
||||
// Wire → TMP 在 AddChatMessage / ChatEmotionDisplayPipeline 内完成 — English: wire → TMP inside AddChatMessage.
|
||||
string fmt = AUIDialog.FormatPrintf(pStrTab.GetWideString((int)FixedMsg.FIXMSG_CHAT));
|
||||
string formatted;
|
||||
try {
|
||||
formatted = string.Format(fmt, strSrcName, strMsg);
|
||||
} catch {
|
||||
formatted = $"{strSrcName}: {strMsg}";
|
||||
}
|
||||
|
||||
pGameUI.AddChatMessage(formatted, (ChatChannel)p.Channel, p.Roleid, strSrcName,
|
||||
0, p.Emotion, null, strMsg);
|
||||
|
||||
// Kênh không thuộc showsAboveHead trong AddChatMessage 时 vẫn cần bong bóng — English: extra bubble for channels AddChatMessage does not publish.
|
||||
if (!CECGameUIMan.ChannelShowsChatBubbleAboveHead((ChatChannel)p.Channel))
|
||||
{
|
||||
CECPlayer pSrcPlayer = EC_Game.GetGameRun().GetWorld().GetPlayerMan().GetPlayer(p.Roleid);
|
||||
if (pSrcPlayer != null)
|
||||
{
|
||||
string bubbleTmp = pGameUI.ConvertWireBodyForHeadBubble(
|
||||
strMsg, (ChatChannel)p.Channel, p.Roleid, p.Emotion);
|
||||
EventBus.PublishChannel(p.Roleid, new EventChatMessageOnTopPlayer(p.Roleid, bubbleTmp));
|
||||
}
|
||||
}
|
||||
|
||||
EnqueueChatUI(() => OnPrtcWorldChat_Apply(roleId, channel, emotion, strMsg, strSrcName));
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2172,10 +2284,17 @@ namespace CSNetwork
|
||||
}
|
||||
break;
|
||||
case 18: case 19: case 20: case 21: case 22: // Auction Message
|
||||
// pGameUI.AddSysAuctionMessage(...)
|
||||
Debug.Log("[Cuong] Auction " + strTemp);
|
||||
EventBus.Publish(new ChatMessageEvent(ConvertWireBodyForChatPanel(strTemp, p.Emotion), p.Channel));
|
||||
{
|
||||
string strAuction = strTemp;
|
||||
byte chAuction = p.Channel;
|
||||
int emoAuction = p.Emotion;
|
||||
EnqueueChatUI(() =>
|
||||
{
|
||||
Debug.Log("[Cuong] Auction " + strAuction);
|
||||
EventBus.Publish(new ChatMessageEvent(ConvertWireBodyForChatPanel(strAuction, emoAuction), chAuction));
|
||||
});
|
||||
break;
|
||||
}
|
||||
case 24: // Task Message
|
||||
// OnTaskChatMessage(p.Data.RawBuffer, p.Data.Size);
|
||||
break;
|
||||
@@ -2198,17 +2317,22 @@ namespace CSNetwork
|
||||
}
|
||||
else
|
||||
{
|
||||
EventBus.Publish(new ChatMessageEvent(ConvertWireBodyForChatPanel(strTemp, p.Emotion), p.Channel));
|
||||
string strSys = strTemp;
|
||||
byte chSys = p.Channel;
|
||||
int emoSys = p.Emotion;
|
||||
EnqueueChatUI(() =>
|
||||
{
|
||||
EventBus.Publish(new ChatMessageEvent(ConvertWireBodyForChatPanel(strSys, emoSys), chSys));
|
||||
});
|
||||
}
|
||||
}else if (p.Channel == (byte)ChatChannel.GP_CHAT_INSTANCE && p.Srcroleid == 1)
|
||||
}
|
||||
else if (p.Channel == (byte)ChatChannel.GP_CHAT_INSTANCE && p.Srcroleid == 1)
|
||||
{
|
||||
// Chat_GameSession.AUICTranslate trans;
|
||||
// EC_Game.GetGameRun().GetUIManager().GetInGameUIMan().AddHeartBeatHint(trans.Translate(szMsg ));
|
||||
}
|
||||
else
|
||||
{
|
||||
CECStringTab pStrTab = EC_Game.GetFixedMsgs();
|
||||
|
||||
if (ISPLAYERID(p.Srcroleid))
|
||||
{
|
||||
string szName = EC_Game.GetGameRun().GetPlayerName(p.Srcroleid, false);
|
||||
@@ -2221,53 +2345,42 @@ namespace CSNetwork
|
||||
}
|
||||
return false;
|
||||
}
|
||||
else
|
||||
|
||||
string szNameCopy = szName;
|
||||
string szMsgCopy = szMsg;
|
||||
int srcRole = p.Srcroleid;
|
||||
int chPl = p.Channel;
|
||||
int emoPl = p.Emotion;
|
||||
string strOrigCopy = strMsgOrigion;
|
||||
EnqueueChatUI(() =>
|
||||
{
|
||||
CECStringTab pStrTab = EC_Game.GetFixedMsgs();
|
||||
char[] szText = new char[80];
|
||||
AUICommon.AUI_ConvertChatString(ref szName, ref szText, false);
|
||||
// Same as SendChatData / OnPrtcWorldChat: convert printf → {0}/{1}, then fill name + body.
|
||||
// Do not pass szText into FormatPrintf — it is a scratch buffer from AUI_ConvertChatString, not a format arg.
|
||||
string szNameMut = szNameCopy;
|
||||
AUICommon.AUI_ConvertChatString(ref szNameMut, ref szText, false);
|
||||
string fmt = AUIDialog.FormatPrintf(pStrTab.GetWideString((int)FixedMsg.FIXMSG_CHAT));
|
||||
string str = string.Format(fmt, szName, szMsg);
|
||||
// [Port] Gọi AddChatMessage để hiển thị lên UI Chat Box — wire→TMP 在 AddChatMessage 内(ChatEmotionDisplayPipeline)。
|
||||
// AddChatMessage bên trong đã tự publish ChatMessageEvent (cho ChatPanelUI)
|
||||
// VÀ EventChatMessageOnTopPlayer (cho Head Bubble) nếu channel thuộc nhóm
|
||||
// showsAboveHead (LOCAL, TEAM, FARCRY, SUPERFARCRY, BATTLE, COUNTRY).
|
||||
// => Không cần publish thêm ở đây nữa.
|
||||
EC_Game.GetGameRun().AddChatMessage(str, p.Channel, p.Srcroleid,
|
||||
null, 0, p.Emotion, null, strMsgOrigion);
|
||||
}
|
||||
string str;
|
||||
try
|
||||
{
|
||||
str = string.Format(fmt, szNameMut, szMsgCopy);
|
||||
}
|
||||
catch
|
||||
{
|
||||
str = $"{szNameMut}: {szMsgCopy}";
|
||||
}
|
||||
|
||||
EC_Game.GetGameRun().AddChatMessage(str, chPl, srcRole,
|
||||
null, 0, emoPl, null, strOrigCopy);
|
||||
});
|
||||
}
|
||||
else if(ISNPCID(p.Srcroleid))
|
||||
else if (ISNPCID(p.Srcroleid))
|
||||
{
|
||||
BMLogger.Log("[Cuong] ISNPCID " + strTemp);
|
||||
CECNPC pNPC = EC_Game.GetGameRun().GetWorld().GetNPCMan().GetNPC(p.Srcroleid);
|
||||
|
||||
if (pNPC != null)
|
||||
{
|
||||
string template = AUIDialog.FormatPrintf(pStrTab.GetWideString((int)FixedMsg.FIXMSG_CHAT2));
|
||||
|
||||
string message = string.Format(
|
||||
template,
|
||||
pNPC.GetName(),
|
||||
szMsg
|
||||
);
|
||||
|
||||
EC_Game.GetGameRun().AddChatMessage(
|
||||
message,
|
||||
p.Channel,
|
||||
p.Srcroleid,
|
||||
null,
|
||||
0,
|
||||
p.Emotion
|
||||
);
|
||||
// Không publish thêm ChatMessageEvent(message): message vẫn là wire trong thân,
|
||||
// AddChatMessage đã publish bản đã wire→TMP — English: no duplicate; AddChatMessage already publishes converted text.
|
||||
|
||||
CECUIHelper.RemoveNameFlagFromNPCChat(strTemp, out szMsg);
|
||||
|
||||
pNPC.SetLastSaidWords(szMsg);
|
||||
}
|
||||
int srcNpc = p.Srcroleid;
|
||||
int chNpc = p.Channel;
|
||||
int emoNpc = p.Emotion;
|
||||
string szMsgNpc = szMsg;
|
||||
string strTempNpc = strTemp;
|
||||
EnqueueChatUI(() => OnPrtcChatMessage_ApplyNpcBranch(srcNpc, chNpc, emoNpc, szMsgNpc, strTempNpc));
|
||||
}
|
||||
}
|
||||
return true;
|
||||
@@ -2283,40 +2396,10 @@ namespace CSNetwork
|
||||
string strMsg = Encoding.Unicode.GetString(p.Msg.ToArray());
|
||||
string strSrcName = Encoding.Unicode.GetString(p.Src_name.ToArray());
|
||||
|
||||
CECGameUIMan pGameUI = EC_Game.GetGameRun().GetUIManager().GetInGameUIMan();
|
||||
CECStringTab pStrTab = EC_Game.GetFixedMsgs();
|
||||
|
||||
// Private chat wire body → TMP 在 AddChatMessage — English: wire → TMP inside AddChatMessage.
|
||||
if (p.Channel == 0 /* CHANNEL_NORMAL */ || p.Channel == 1 /* CHANNEL_NORMALRE */)
|
||||
{
|
||||
// Format: "[Name] whispers to [You]: [Message]"
|
||||
string fmt = AUIDialog.FormatPrintf(pStrTab.GetWideString((int)FixedMsg.FIXMSG_PRIVATECHAT1));
|
||||
BMLogger.Log($"[Cuong] OnPrtcPrivateChat {fmt}");
|
||||
string formatted;
|
||||
try {
|
||||
formatted = string.Format(fmt, strSrcName, strMsg);
|
||||
} catch {
|
||||
formatted = $"{strSrcName} whispers to you: {strMsg}";
|
||||
}
|
||||
|
||||
pGameUI.AddChatMessage(formatted, ChatChannel.GP_CHAT_WHISPER, p.Srcroleid, strSrcName,
|
||||
p.Channel, p.Emotion, null, strMsg);
|
||||
}
|
||||
else
|
||||
{
|
||||
pGameUI.AddChatMessage(strMsg, ChatChannel.GP_CHAT_WHISPER, p.Srcroleid, strSrcName,
|
||||
p.Channel, p.Emotion, null, strMsg);
|
||||
}
|
||||
|
||||
// 私聊头顶气泡:AddChatMessage 对 GP_CHAT_WHISPER 不发布 EventChatMessageOnTopPlayer,在此单独发 TMP 正文。
|
||||
// Whisper head bubble: AddChatMessage does not publish EventChatMessageOnTopPlayer for whisper — publish TMP body here.
|
||||
CECPlayer pSrcPlayer = EC_Game.GetGameRun().GetWorld().GetPlayerMan().GetPlayer(p.Srcroleid);
|
||||
if (pSrcPlayer != null)
|
||||
{
|
||||
string bubbleTmp = pGameUI.ConvertWireBodyForHeadBubble(
|
||||
strMsg, ChatChannel.GP_CHAT_WHISPER, p.Srcroleid, p.Emotion);
|
||||
EventBus.PublishChannel(p.Srcroleid, new EventChatMessageOnTopPlayer(p.Srcroleid, bubbleTmp));
|
||||
}
|
||||
int srcRole = p.Srcroleid;
|
||||
byte whisperCh = p.Channel;
|
||||
int emotion = p.Emotion;
|
||||
EnqueueChatUI(() => OnPrtcPrivateChat_Apply(srcRole, whisperCh, emotion, strMsg, strSrcName));
|
||||
}
|
||||
|
||||
public struct ChatMessageEvent
|
||||
|
||||
@@ -19,6 +19,7 @@ using BrewMonster.UI;
|
||||
using UnityEngine;
|
||||
using UnityEngine.SceneManagement;
|
||||
using BrewMonster.Scripts;
|
||||
using BrewMonster.Scripts.ChatUI;
|
||||
|
||||
namespace BrewMonster.Network
|
||||
{
|
||||
@@ -60,6 +61,8 @@ namespace BrewMonster.Network
|
||||
{
|
||||
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
||||
GameSession.Context = SynchronizationContext.Current;
|
||||
// Khởi tạo ChatThreadDispatcher trên main thread trước khi luồng mạng gọi Instance.Post — English: warm singleton on main thread before network posts.
|
||||
_ = ChatThreadDispatcher.Instance;
|
||||
|
||||
base.Awake();
|
||||
}
|
||||
|
||||
@@ -261,8 +261,37 @@ namespace PerfectWorld.Scripts
|
||||
if (EC_IvtrItemUtils.Instance != null)
|
||||
itemName = EC_IvtrItemUtils.Instance.ResolveItemName(tid);
|
||||
|
||||
if (string.IsNullOrEmpty(itemName))
|
||||
// Some name resolvers return the localization key when the translation is missing
|
||||
// (e.g. "BrewMonster.MINE_ESSENCE"). In that case we prefer showing nothing.
|
||||
static bool LooksLikeUntranslatedKey(string s)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(s))
|
||||
return false;
|
||||
if (s.IndexOf(' ') >= 0 || s.IndexOf('\t') >= 0 || s.IndexOf('\n') >= 0 || s.IndexOf('\r') >= 0)
|
||||
return false;
|
||||
|
||||
// Heuristic: "Namespace.KEY_NAME" (has '.' and '_' and mostly identifier chars).
|
||||
if (s.IndexOf('.') < 0 || s.IndexOf('_') < 0)
|
||||
return false;
|
||||
|
||||
for (int i = 0; i < s.Length; i++)
|
||||
{
|
||||
char c = s[i];
|
||||
if (char.IsLetterOrDigit(c) || c == '_' || c == '.')
|
||||
continue;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
if (LooksLikeUntranslatedKey(itemName))
|
||||
{
|
||||
itemName = string.Empty;
|
||||
}
|
||||
else if (string.IsNullOrEmpty(itemName))
|
||||
{
|
||||
itemName = $"Item {tid}";
|
||||
}
|
||||
|
||||
textMesh.text = itemName;
|
||||
textMesh.fontSize = 2f;
|
||||
|
||||
@@ -480,6 +480,7 @@ namespace BrewMonster
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case CommandID.PET_REBUILD_INHERIT_START:
|
||||
case CommandID.PET_REBUILD_INHERIT_INFO:
|
||||
case CommandID.PET_REBUILD_INHERIT_END:
|
||||
@@ -568,6 +569,35 @@ namespace BrewMonster
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void OnMsgHstReceiveExp (ECMSG Msg)
|
||||
{
|
||||
cmd_receive_exp pCmd = GPDataTypeHelper.FromBytes<cmd_receive_exp>((byte[])Msg.dwParam1);
|
||||
|
||||
if (m_ReincarnationTome.tome_active != 0) {
|
||||
//dunno what it do "?
|
||||
// m_ReincarnationTome.tome_exp += pCmd.exp;
|
||||
// CECGameUIMan pGameUI = EC_Game.GetGameRun().GetUIManager().GetInGameUIMan();
|
||||
// CDlgReincarnationBook* pDlgBook = dynamic_cast<CDlgReincarnationBook*>(pGameUI->GetDialog("Win_ReincarnationBook"));
|
||||
// if (pDlgBook && pDlgBook->IsShow()) pDlgBook->Update();
|
||||
// CDlgReincarnationRewrite* pDlgRewrite = dynamic_cast<CDlgReincarnationRewrite*>(pGameUI->GetDialog("Win_ReincarnationRewrite"));
|
||||
// if (pDlgRewrite && pDlgRewrite->IsShow()) pDlgRewrite->Update();
|
||||
}
|
||||
|
||||
if (pCmd.exp != 0)
|
||||
{
|
||||
// Print notify text
|
||||
// g_pGame->GetGameRun()->AddFixedMessage(pCmd->exp > 0 ? FIXMSG_GOTEXP : FIXMSG_LOSTEXP, (int)pCmd->exp);
|
||||
BubbleText((int)BubbleTextType.BUBBLE_EXP, (uint)pCmd.exp);
|
||||
}
|
||||
|
||||
if (pCmd.sp > 0)
|
||||
{
|
||||
// Print notify text
|
||||
// g_pGame->GetGameRun()->AddFixedMessage(FIXMSG_GOTSP, (int)pCmd->sp);
|
||||
BubbleText((int)BubbleTextType.BUBBLE_SP, (uint)pCmd.sp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1831,9 +1831,18 @@ namespace BrewMonster.Scripts.Task.UI
|
||||
|
||||
public static string FormatTime(int nSec, string desc, int timeLimit)
|
||||
{
|
||||
var ts = System.TimeSpan.FromSeconds(System.Math.Max(0, nSec));
|
||||
string label = string.IsNullOrEmpty(desc) ? string.Empty : desc;
|
||||
return $"{label}{ts:hh\\:mm\\:ss}\n";
|
||||
int total = System.Math.Max(0, nSec);
|
||||
int h = total / 3600;
|
||||
int m = (total % 3600) / 60;
|
||||
int s = total % 60;
|
||||
// Matches table printf "%d:%02d:%02d" (hours, zero-padded min/sec); works for durations over 24h.
|
||||
string timeStr = string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}:{1:D2}:{2:D2}", h, m, s);
|
||||
if (string.IsNullOrEmpty(desc))
|
||||
return timeStr;
|
||||
const string kPrintfTime = "%d:%02d:%02d";
|
||||
if (desc.IndexOf(kPrintfTime, System.StringComparison.Ordinal) >= 0)
|
||||
return desc.Replace(kPrintfTime, timeStr);
|
||||
return desc + timeStr;
|
||||
}
|
||||
|
||||
// private static string GetStringFromTable(int id)
|
||||
|
||||
@@ -3260,7 +3260,7 @@ namespace BrewMonster.UI
|
||||
id_dialog = (int)pService.id_dialog;
|
||||
idFunction = (int)SERVICE_TYPE.NPC_PROXY;
|
||||
}
|
||||
else if (DataType == DATA_TYPE.DT_NPC_STORAGE_SERVICE)
|
||||
/*else if (DataType == DATA_TYPE.DT_NPC_STORAGE_SERVICE)
|
||||
{
|
||||
NPC_STORAGE_SERVICE pService = (NPC_STORAGE_SERVICE)pData;
|
||||
string strText1 = m_pLst_Main.GetText(nCurSel);
|
||||
@@ -3273,7 +3273,7 @@ namespace BrewMonster.UI
|
||||
idFunction = (int)SERVICE_TYPE.NPC_ACCOUNT_STORAGE;
|
||||
else
|
||||
idFunction = (int)SERVICE_TYPE.NPC_STORAGE;
|
||||
}
|
||||
}*/
|
||||
else if (DataType == DATA_TYPE.DT_NPC_MAKE_SERVICE)
|
||||
{
|
||||
NPC_MAKE_SERVICE pService = (NPC_MAKE_SERVICE)pData;
|
||||
|
||||
@@ -25,6 +25,11 @@ namespace BrewMonster.Scripts.UI
|
||||
|
||||
public void SetImage(Sprite sprite)
|
||||
{
|
||||
if (img == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
img.enabled = sprite != null;
|
||||
img.sprite = sprite;
|
||||
}
|
||||
|
||||
@@ -36,7 +41,11 @@ namespace BrewMonster.Scripts.UI
|
||||
|
||||
public void SetColor(Color color)
|
||||
{
|
||||
// TODO : Set color to relevant UI components
|
||||
if (img == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
img.color = color;
|
||||
}
|
||||
|
||||
public void SetHint(string text)
|
||||
@@ -44,9 +53,24 @@ namespace BrewMonster.Scripts.UI
|
||||
txtHint = text;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reset slot when this cell has no award (e.g. dialog reopened with fewer items).
|
||||
/// 清空格子:再次打开奖励界面时清除上一轮的图标与点击逻辑。
|
||||
/// </summary>
|
||||
public void ClearCover()
|
||||
{
|
||||
// TODO : Implement cover clearing functionality
|
||||
if (img != null)
|
||||
{
|
||||
img.sprite = null;
|
||||
img.enabled = false;
|
||||
img.color = Color.white;
|
||||
}
|
||||
if (btn != null)
|
||||
{
|
||||
btn.onClick.RemoveAllListeners();
|
||||
}
|
||||
txtHint = string.Empty;
|
||||
isOn = false;
|
||||
}
|
||||
|
||||
public void Show(bool show)
|
||||
|
||||
@@ -59,6 +59,14 @@ namespace BrewMonster.Scripts.UI
|
||||
{
|
||||
toggle.isOn = false;
|
||||
}
|
||||
if (itemInfoPanel != null)
|
||||
{
|
||||
itemInfoPanel.SetActive(false);
|
||||
}
|
||||
if (descriptionOutlet != null)
|
||||
{
|
||||
descriptionOutlet.Set(string.Empty);
|
||||
}
|
||||
_btnClose.onClick.AddListener(OnCloseDlgAward);
|
||||
}
|
||||
|
||||
@@ -214,7 +222,7 @@ namespace BrewMonster.Scripts.UI
|
||||
// sprintf(out szName, "Item_%02d01", i);
|
||||
// pImage = (PAUIIMAGEPICTURE)GetDlgItem(szName);
|
||||
// if (!pImage) break; // All done.
|
||||
pImage = GetAwardItemAt(i, i);
|
||||
pImage = GetAwardItemAt(i, 1);
|
||||
if (!pImage) break;
|
||||
|
||||
// sprintf(out szName, "Rdo_Award%d", i);
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.AddressableAssets;
|
||||
using UnityEngine.ResourceManagement.AsyncOperations;
|
||||
using TMPro;
|
||||
using DG.Tweening; // cần DOTween
|
||||
using BrewMonster.Scripts.UI.GamePlay;
|
||||
using UnityEngine.UI;
|
||||
namespace BrewMonster.Scripts.UI.GamePlay
|
||||
{
|
||||
public class AUIFloatTextIcon : MonoBehaviour
|
||||
{
|
||||
[SerializeField] TMP_Text text;
|
||||
[SerializeField] SpriteRenderer ingameIcon;
|
||||
public void Show(Vector3 worldPos, string damage, Color color = default, float scale = 1f, float riseDistance = 1f, float riseDuration = 1f, Sprite sprite = null, Action onComplete = null)
|
||||
{
|
||||
if(sprite != null)
|
||||
{
|
||||
ingameIcon.sprite = sprite;
|
||||
ingameIcon.gameObject.SetActive(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
ingameIcon.gameObject.SetActive(false);
|
||||
}
|
||||
text.text = damage;
|
||||
text.color = color;
|
||||
text.fontSize = 6;
|
||||
text.transform.localScale = Vector3.one * scale;
|
||||
text.transform.position = worldPos;
|
||||
gameObject.SetActive(true);
|
||||
|
||||
// Hiệu ứng bay lên + mờ dần
|
||||
text.transform.DOMoveY(worldPos.y + riseDistance, riseDuration).SetEase(Ease.OutQuad);
|
||||
text.DOFade(0f, riseDuration)
|
||||
.SetEase(Ease.InQuad)
|
||||
.OnComplete(() =>
|
||||
{
|
||||
text.alpha = 1f;
|
||||
text.gameObject.SetActive(false);
|
||||
onComplete?.Invoke();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0515aed5525ee47d4b5249804a555471
|
||||
@@ -14,6 +14,7 @@ using PerfectWorld.UI.MiniMap;
|
||||
using UnityEngine;
|
||||
using BrewMonster.PerfectWorld.Scripts.UI;
|
||||
using BrewMonster.Scripts.Chat;
|
||||
using BrewMonster.Scripts.Chat.EmotionData;
|
||||
|
||||
namespace BrewMonster.UI
|
||||
{
|
||||
@@ -43,6 +44,8 @@ namespace BrewMonster.UI
|
||||
/// </summary>
|
||||
public void SetEmotionSpriteMap(IEmotionSpriteMap map)
|
||||
{
|
||||
if (map is EmotionLibrarySpriteMap libMap)
|
||||
libMap.EnsureCachedTmpSpriteAssetNames();
|
||||
_chatEmotionPipeline.SetSpriteMap(map);
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ TextureImporter:
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
@@ -37,13 +37,13 @@ TextureImporter:
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
@@ -52,9 +52,9 @@ TextureImporter:
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 0
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
@@ -139,7 +139,7 @@ TextureImporter:
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
|
||||
@@ -6,7 +6,7 @@ TextureImporter:
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
@@ -37,13 +37,13 @@ TextureImporter:
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
@@ -52,9 +52,9 @@ TextureImporter:
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 0
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
@@ -126,7 +126,7 @@ TextureImporter:
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
|
||||
@@ -40,10 +40,10 @@ TextureImporter:
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
@@ -54,7 +54,7 @@ TextureImporter:
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
@@ -126,7 +126,7 @@ TextureImporter:
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
|
||||
@@ -6,7 +6,7 @@ TextureImporter:
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
@@ -37,13 +37,13 @@ TextureImporter:
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
@@ -52,9 +52,9 @@ TextureImporter:
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 0
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
@@ -126,7 +126,7 @@ TextureImporter:
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
|
||||
@@ -40,10 +40,10 @@ TextureImporter:
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
@@ -54,7 +54,7 @@ TextureImporter:
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
@@ -126,7 +126,7 @@ TextureImporter:
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
|
||||
@@ -40,10 +40,10 @@ TextureImporter:
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
@@ -54,7 +54,7 @@ TextureImporter:
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 0
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
@@ -126,7 +126,7 @@ TextureImporter:
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
|
||||
@@ -6,7 +6,7 @@ TextureImporter:
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
@@ -37,13 +37,13 @@ TextureImporter:
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
@@ -52,9 +52,9 @@ TextureImporter:
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 0
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
@@ -126,7 +126,7 @@ TextureImporter:
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
|
||||
@@ -6,7 +6,7 @@ TextureImporter:
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
@@ -37,13 +37,13 @@ TextureImporter:
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
@@ -52,9 +52,9 @@ TextureImporter:
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 0
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
@@ -126,7 +126,7 @@ TextureImporter:
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
|
||||
@@ -6,7 +6,7 @@ TextureImporter:
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 1
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
@@ -37,13 +37,13 @@ TextureImporter:
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 0
|
||||
wrapV: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 0
|
||||
nPOTScale: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 0
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
@@ -52,9 +52,9 @@ TextureImporter:
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 0
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 0
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
@@ -126,7 +126,7 @@ TextureImporter:
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user