diff --git a/Prefabs/PlayerCharacterController2DAI.prefab b/Prefabs/PlayerCharacterController2DAI.prefab new file mode 100644 index 0000000..c6b9d3a --- /dev/null +++ b/Prefabs/PlayerCharacterController2DAI.prefab @@ -0,0 +1,69 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 0} + m_RootGameObject: {fileID: 1287010141937558} + m_IsPrefabAsset: 1 +--- !u!1 &1287010141937558 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 4257762974765350} + - component: {fileID: 114618904563953218} + m_Layer: 0 + m_Name: PlayerCharacterController2DAI + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4257762974765350 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1287010141937558} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &114618904563953218 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1287010141937558} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d4b10481c05f5cc4997ccd829bfba9c1, type: 3} + m_Name: + m_EditorClassIdentifier: + gameplayCameraPrefab: {fileID: 114959064815439586, guid: 251ee6996d91e6a43ac8b034e16ec386, + type: 2} + minimapCameraPrefab: {fileID: 114293473902564364, guid: 17b7c56f66b95584583a9e4e6224379e, + type: 2} + controllerMode: 0 + wasdLockAttackTarget: 0 + lockAttackTargetDistance: 10 + wasdClearTargetDistance: 15 + pointClickSetTargetImmediately: 0 + targetObjectPrefab: {fileID: 1401871392997294, guid: 39a34d269d7344e448989fd67a727a1d, + type: 2} + buildGridSnap: 1 + buildGridOffsets: {x: 0, y: 0, z: 0} + buildGridSize: 4 + buildRotationSnap: 1 + buildRotateAngle: 45 diff --git a/Prefabs/PlayerCharacterController2DAI.prefab.meta b/Prefabs/PlayerCharacterController2DAI.prefab.meta new file mode 100644 index 0000000..b400c0b --- /dev/null +++ b/Prefabs/PlayerCharacterController2DAI.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b75499d99bfb48342b9c100e61058694 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Prefabs/Warrior2D(AIDemo)(AILerp).prefab b/Prefabs/Warrior2D(AIDemo)(AILerp).prefab index 87570fa..ee2e3ae 100644 --- a/Prefabs/Warrior2D(AIDemo)(AILerp).prefab +++ b/Prefabs/Warrior2D(AIDemo)(AILerp).prefab @@ -340,7 +340,7 @@ MonoBehaviour: syncTitle: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -349,7 +349,7 @@ MonoBehaviour: syncTitleB: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -362,7 +362,7 @@ MonoBehaviour: movementState: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 2 + deliveryMethod: 1 sendInterval: 0.1 alwaysSync: 1 doNotSyncInitialDataImmediately: 1 @@ -371,7 +371,7 @@ MonoBehaviour: extraMovementState: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 2 + deliveryMethod: 1 sendInterval: 0.1 alwaysSync: 1 doNotSyncInitialDataImmediately: 1 @@ -380,7 +380,7 @@ MonoBehaviour: direction2D: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 2 + deliveryMethod: 1 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 1 @@ -388,7 +388,7 @@ MonoBehaviour: passengingVehicle: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 1 @@ -396,19 +396,21 @@ MonoBehaviour: value: objectId: 0 seatIndex: 0 + canSideSprint: 0 + canBackwardSprint: 0 combatTextTransform: {fileID: 4532387271618742} opponentAimTransform: {fileID: 0} currentHp: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 syncMode: 0 value: 0 race: {fileID: 0} - meleeDamageTransform: {fileID: 0} + meleeDamageTransform: {fileID: 4956304626148802} missileDamageTransform: {fileID: 4956304626148802} characterUITransform: {fileID: 4122315194440306} miniMapUITransform: {fileID: 4407621456926014} @@ -416,7 +418,7 @@ MonoBehaviour: id: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -425,7 +427,7 @@ MonoBehaviour: level: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -434,7 +436,7 @@ MonoBehaviour: exp: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -443,7 +445,7 @@ MonoBehaviour: currentMp: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -461,7 +463,7 @@ MonoBehaviour: currentFood: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -470,7 +472,7 @@ MonoBehaviour: currentWater: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -479,7 +481,7 @@ MonoBehaviour: equipWeaponSet: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -488,7 +490,7 @@ MonoBehaviour: pitch: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 2 + deliveryMethod: 1 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -497,7 +499,7 @@ MonoBehaviour: targetEntityId: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -535,20 +537,6 @@ MonoBehaviour: behaviour: {fileID: 0} elementId: 0 forOwnerOnly: 1 - umaAvatarData: - behaviour: {fileID: 0} - elementId: 0 - deliveryMethod: 0 - sendInterval: 0.1 - alwaysSync: 0 - doNotSyncInitialDataImmediately: 0 - syncMode: 0 - value: - raceIndex: 0 - genderIndex: 0 - colors: - slots: - dnas: characterTitle: AILerp characterTitles: [] playerCharacters: @@ -557,7 +545,7 @@ MonoBehaviour: dataId: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -566,7 +554,7 @@ MonoBehaviour: factionId: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -575,7 +563,7 @@ MonoBehaviour: statPoint: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -584,7 +572,7 @@ MonoBehaviour: skillPoint: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -593,7 +581,7 @@ MonoBehaviour: gold: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -602,7 +590,7 @@ MonoBehaviour: userGold: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -611,7 +599,7 @@ MonoBehaviour: userCash: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -620,7 +608,7 @@ MonoBehaviour: partyId: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -629,7 +617,7 @@ MonoBehaviour: guildId: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -638,7 +626,7 @@ MonoBehaviour: respawnMapName: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -647,7 +635,7 @@ MonoBehaviour: respawnPosition: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -656,7 +644,7 @@ MonoBehaviour: isWarping: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -665,7 +653,7 @@ MonoBehaviour: hasAimPosition: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -674,7 +662,7 @@ MonoBehaviour: aimPosition: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 2 + deliveryMethod: 1 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 diff --git a/Prefabs/Warrior2D(AIDemo).prefab b/Prefabs/Warrior2D(AIDemo).prefab index 2952193..e334eff 100644 --- a/Prefabs/Warrior2D(AIDemo).prefab +++ b/Prefabs/Warrior2D(AIDemo).prefab @@ -375,7 +375,7 @@ MonoBehaviour: syncTitle: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -384,7 +384,7 @@ MonoBehaviour: syncTitleB: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -397,7 +397,7 @@ MonoBehaviour: movementState: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 2 + deliveryMethod: 1 sendInterval: 0.1 alwaysSync: 1 doNotSyncInitialDataImmediately: 1 @@ -406,7 +406,7 @@ MonoBehaviour: extraMovementState: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 2 + deliveryMethod: 1 sendInterval: 0.1 alwaysSync: 1 doNotSyncInitialDataImmediately: 1 @@ -415,7 +415,7 @@ MonoBehaviour: direction2D: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 2 + deliveryMethod: 1 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 1 @@ -423,7 +423,7 @@ MonoBehaviour: passengingVehicle: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 1 @@ -431,19 +431,21 @@ MonoBehaviour: value: objectId: 0 seatIndex: 0 + canSideSprint: 0 + canBackwardSprint: 0 combatTextTransform: {fileID: 4532387271618742} opponentAimTransform: {fileID: 0} currentHp: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 syncMode: 0 value: 0 race: {fileID: 0} - meleeDamageTransform: {fileID: 0} + meleeDamageTransform: {fileID: 4956304626148802} missileDamageTransform: {fileID: 4956304626148802} characterUITransform: {fileID: 4122315194440306} miniMapUITransform: {fileID: 4407621456926014} @@ -451,7 +453,7 @@ MonoBehaviour: id: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -460,7 +462,7 @@ MonoBehaviour: level: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -469,7 +471,7 @@ MonoBehaviour: exp: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -478,7 +480,7 @@ MonoBehaviour: currentMp: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -496,7 +498,7 @@ MonoBehaviour: currentFood: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -505,7 +507,7 @@ MonoBehaviour: currentWater: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -514,7 +516,7 @@ MonoBehaviour: equipWeaponSet: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -523,7 +525,7 @@ MonoBehaviour: pitch: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 2 + deliveryMethod: 1 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -532,7 +534,7 @@ MonoBehaviour: targetEntityId: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -570,20 +572,6 @@ MonoBehaviour: behaviour: {fileID: 0} elementId: 0 forOwnerOnly: 1 - umaAvatarData: - behaviour: {fileID: 0} - elementId: 0 - deliveryMethod: 0 - sendInterval: 0.1 - alwaysSync: 0 - doNotSyncInitialDataImmediately: 0 - syncMode: 0 - value: - raceIndex: 0 - genderIndex: 0 - colors: - slots: - dnas: characterTitle: AIPath characterTitles: [] playerCharacters: @@ -592,7 +580,7 @@ MonoBehaviour: dataId: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -601,7 +589,7 @@ MonoBehaviour: factionId: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -610,7 +598,7 @@ MonoBehaviour: statPoint: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -619,7 +607,7 @@ MonoBehaviour: skillPoint: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -628,7 +616,7 @@ MonoBehaviour: gold: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -637,7 +625,7 @@ MonoBehaviour: userGold: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -646,7 +634,7 @@ MonoBehaviour: userCash: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -655,7 +643,7 @@ MonoBehaviour: partyId: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -664,7 +652,7 @@ MonoBehaviour: guildId: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -673,7 +661,7 @@ MonoBehaviour: respawnMapName: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -682,7 +670,7 @@ MonoBehaviour: respawnPosition: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -691,7 +679,7 @@ MonoBehaviour: isWarping: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -700,7 +688,7 @@ MonoBehaviour: hasAimPosition: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 3 + deliveryMethod: 2 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 @@ -709,7 +697,7 @@ MonoBehaviour: aimPosition: behaviour: {fileID: 0} elementId: 0 - deliveryMethod: 2 + deliveryMethod: 1 sendInterval: 0.1 alwaysSync: 0 doNotSyncInitialDataImmediately: 0 diff --git a/Scenes/00Init_2D(AIDemo).unity b/Scenes/00Init_2D(AIDemo).unity index 998e1a1..75f6d7f 100644 --- a/Scenes/00Init_2D(AIDemo).unity +++ b/Scenes/00Init_2D(AIDemo).unity @@ -631,10 +631,10 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: ca66ed5b09dc41447ad7cf901faa5e46, type: 3} m_Name: m_EditorClassIdentifier: - umaAvatarDatabase: {fileID: 0} dimensionType: 1 saveSystem: {fileID: 0} gameplayRule: {fileID: 11400000, guid: 3bfe680a81b27ce4ba9642ddff7baa17, type: 2} + gmCommands: {fileID: 0} networkSetting: {fileID: 11400000, guid: c0825e8ee894749459ab4c8dda26dfe6, type: 2} itemDropEntityPrefab: {fileID: 114136267996948458, guid: 9c6362fe52a2dfa40b90aba5530a6fda, type: 2} @@ -644,7 +644,7 @@ MonoBehaviour: type: 2} uiSceneGameplayMobilePrefab: {fileID: 114630585920460692, guid: 70474cf4f9f686c45b0305621722205f, type: 2} - defaultControllerPrefab: {fileID: 114072456199855828, guid: 9b0dda0d289a10c40ba6b4f2444b5b0e, + defaultControllerPrefab: {fileID: 114618904563953218, guid: b75499d99bfb48342b9c100e61058694, type: 2} serverCharacterPrefab: {fileID: 114801908678275750, guid: 421d789af0533a74fb6efc3521d9f8b7, type: 2} @@ -870,12 +870,16 @@ MonoBehaviour: m_EditorClassIdentifier: masterVolumeSetting: id: MASTER + maxVolumeRate: 1 bgmVolumeSetting: id: BGM + maxVolumeRate: 1 sfxVolumeSetting: id: SFX + maxVolumeRate: 1 ambientVolumeSetting: id: AMBIENT + maxVolumeRate: 1 otherVolumeSettings: [] --- !u!114 &1379718508 MonoBehaviour: diff --git a/Scripts/AstarCharacterMovement2D.cs b/Scripts/AstarCharacterMovement2D.cs index a339815..980cc6b 100644 --- a/Scripts/AstarCharacterMovement2D.cs +++ b/Scripts/AstarCharacterMovement2D.cs @@ -9,17 +9,17 @@ namespace MultiplayerARPG public class AstarCharacterMovement2D : RigidBodyEntityMovement2D { public IAstarAI CacheAIPath { get; private set; } - protected bool remoteReachedDestination = true; - protected bool previousReachedDestination; + public Seeker Seeker { get; private set; } + protected bool remoteReachedEndOfPath = true; - public bool ReachedDestination + public bool reachedEndOfPath { get { if ((CacheEntity.MovementSecure == MovementSecure.ServerAuthoritative && IsServer) || (CacheEntity.MovementSecure == MovementSecure.NotSecure && IsOwnerClient)) - return CacheAIPath.remainingDistance < 0.05f; - return remoteReachedDestination; + return CacheAIPath.reachedEndOfPath; + return remoteReachedEndOfPath; } } @@ -32,36 +32,35 @@ public override void EntityAwake() CacheAIPath = gameObject.AddComponent(); (CacheAIPath as AILerp).enableRotation = false; } + Seeker = GetComponent(); } public override void EntityOnSetup() { base.EntityOnSetup(); - CacheEntity.RegisterNetFunction(NetFuncSetReachedDestination); + CacheEntity.RegisterNetFunction(NetFuncSetReachedEndOfPath); CacheNetTransform.onTeleport = (position, rotation) => { CacheAIPath.Teleport(position); }; } - protected void NetFuncSetReachedDestination(bool reachedDestination) + protected void NetFuncSetReachedEndOfPath(bool reachedEndOfPath) { - remoteReachedDestination = reachedDestination; + remoteReachedEndOfPath = reachedEndOfPath; } public override void EntityUpdate() { - if (CacheEntity.MovementSecure == MovementSecure.ServerAuthoritative && !IsServer) + if ((CacheEntity.MovementSecure == MovementSecure.ServerAuthoritative && !IsServer) || + (CacheEntity.MovementSecure == MovementSecure.NotSecure && !IsOwnerClient)) { (CacheAIPath as MonoBehaviour).enabled = false; return; } - if (CacheEntity.MovementSecure == MovementSecure.NotSecure && !IsOwnerClient) - { - (CacheAIPath as MonoBehaviour).enabled = false; - return; - } + // Update reached end of path state + CacheEntity.CallNetFunction(NetFuncSetReachedEndOfPath, LiteNetLib.DeliveryMethod.Sequenced, FunctionReceivers.All, reachedEndOfPath); (CacheAIPath as MonoBehaviour).enabled = true; @@ -71,13 +70,6 @@ public override void EntityUpdate() CacheAIPath.maxSpeed = CacheEntity.GetMoveSpeed(); } - public override void StopMove() - { - base.StopMove(); - if (CacheAIPath != null) - CacheAIPath.isStopped = true; - } - public override void KeyMovement(Vector3 moveDirection, MovementState movementState) { if (moveDirection.sqrMagnitude > 0.25f) @@ -103,13 +95,6 @@ public override void EntityFixedUpdate() CacheEntity.SetDirection2D(CacheAIPath.velocity.normalized); CacheEntity.SetMovement(CacheAIPath.velocity.sqrMagnitude > 0 ? MovementState.Forward : MovementState.None); - - bool reachedDestination = CacheAIPath.remainingDistance < 0.05f; - if (previousReachedDestination != reachedDestination) - { - CacheEntity.CallNetFunction(NetFuncSetReachedDestination, FunctionReceivers.All, reachedDestination); - previousReachedDestination = reachedDestination; - } } public override void SetLookRotation(Quaternion rotation) diff --git a/Scripts/MonsterActivityComponent2DAI.cs b/Scripts/MonsterActivityComponent2DAI.cs index b943f0c..7064d6f 100644 --- a/Scripts/MonsterActivityComponent2DAI.cs +++ b/Scripts/MonsterActivityComponent2DAI.cs @@ -6,12 +6,12 @@ namespace MultiplayerARPG { - [System.Obsolete("This is deprecated, but still keep it for backward compatibilities. Use `MonsterActivityComponent` instead")] - /// - /// This is deprecated, but still keep it for backward compatibilities. - /// Use `MonsterActivityComponent` instead - /// -#pragma warning disable 0618 - public class MonsterActivityComponent2DAI : MonsterActivityComponent2D { } -#pragma warning restore 0618 + public class MonsterActivityComponent2DAI : MonsterActivityComponent + { + protected override bool OverlappedEntity(T entity, Vector3 measuringPosition, Vector3 targetPosition, float distance) + { + // Must reached end of path before doing an actions + return base.OverlappedEntity(entity, measuringPosition, targetPosition, distance) && (CacheEntity.Movement as AstarCharacterMovement2D).reachedEndOfPath; + } + } } diff --git a/Scripts/PlayerCharacterController2DAI.cs b/Scripts/PlayerCharacterController2DAI.cs new file mode 100644 index 0000000..3da1ddc --- /dev/null +++ b/Scripts/PlayerCharacterController2DAI.cs @@ -0,0 +1,123 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Pathfinding; +using System; + +namespace MultiplayerARPG +{ + public class PlayerCharacterController2DAI : PlayerCharacterController + { + AstarCharacterMovement2D movement; + GameObject groundSeekerGameObject; + Seeker groundSeeker; + AILerp groundAiLerp; + GameObject entitySeekerGameObject; + Seeker entitySeeker; + AILerp entityAiLerp; + Vector3 measuringPositionOffsets; + Vector3 expectTargetPosition; + float expectTargetDistance; + + protected override void Awake() + { + base.Awake(); + // Ground seeker + groundSeekerGameObject = new GameObject("_ControllerGroundSeeker"); + groundSeeker = groundSeekerGameObject.AddComponent(); + groundSeeker.startEndModifier.exactStartPoint = StartEndModifier.Exactness.SnapToNode; + groundSeeker.startEndModifier.exactEndPoint = StartEndModifier.Exactness.SnapToNode; + groundSeeker.pathCallback += OnGroundPathComplete; + groundAiLerp = groundSeekerGameObject.AddComponent(); + groundAiLerp.enableRotation = false; + groundAiLerp.speed = 1000f; // Move to target immediately + // Entity seeker + entitySeekerGameObject = new GameObject("_ControllerEntitySeeker"); + entitySeeker = entitySeekerGameObject.AddComponent(); + entitySeeker.startEndModifier.exactStartPoint = StartEndModifier.Exactness.SnapToNode; + entitySeeker.startEndModifier.exactEndPoint = StartEndModifier.Exactness.SnapToNode; + entitySeeker.pathCallback += OnEntityPathComplete; + entityAiLerp = entitySeekerGameObject.AddComponent(); + entityAiLerp.enableRotation = false; + entityAiLerp.speed = 1000f; // Move to target immediately + } + + protected override void OnDestroy() + { + base.OnDestroy(); + groundSeeker.pathCallback -= OnGroundPathComplete; + Destroy(groundSeekerGameObject); + entitySeeker.pathCallback -= OnEntityPathComplete; + Destroy(entitySeekerGameObject); + } + + public override void UpdatePointClickInput() + { + base.UpdatePointClickInput(); + if (getMouseDown) + previousPointClickPosition = Vector3.positiveInfinity; + } + + protected void OnGroundPathComplete(Path _p) + { + Vector3 nodePosition = (Vector3)_p.path[_p.path.Count - 1].position; + destination = nodePosition; + PlayerCharacterEntity.PointClickMovement(nodePosition); + } + + protected void OnEntityPathComplete(Path _p) + { + Vector3 nodePosition; + for (int i = 0; i < _p.path.Count; ++i) + { + nodePosition = (Vector3)_p.path[i].position; + if (base.OverlappedEntity(TargetEntity, nodePosition + measuringPositionOffsets, expectTargetPosition, expectTargetDistance)) + { + destination = null; + PlayerCharacterEntity.PointClickMovement(nodePosition); + break; + } + } + } + + protected override void OnPointClickOnGround(Vector3 targetPosition) + { + if (Vector3.Distance(MovementTransform.position, targetPosition) > MIN_START_MOVE_DISTANCE) + groundSeeker.StartPath(MovementTransform.position, targetPosition); + } + + protected override void Setup(BasePlayerCharacterEntity characterEntity) + { + base.Setup(characterEntity); + movement = characterEntity.GetComponent(); + } + + protected override void Desetup(BasePlayerCharacterEntity characterEntity) + { + base.Desetup(characterEntity); + movement = null; + } + + protected override void UpdateTargetEntityPosition(Vector3 measuringPosition, Vector3 targetPosition, float distance) + { + if (PlayerCharacterEntity.IsPlayingActionAnimation()) + return; + + if (Vector3.Distance(MovementTransform.position, targetPosition) > MIN_START_MOVE_DISTANCE && + Vector3.Distance(previousPointClickPosition, targetPosition) > MIN_START_MOVE_DISTANCE) + { + measuringPositionOffsets = measuringPosition - MovementTransform.position; + expectTargetPosition = targetPosition; + expectTargetDistance = distance; + entitySeeker.StartPath(MovementTransform.position, targetPosition); + previousPointClickPosition = targetPosition; + } + } + + protected override bool OverlappedEntity(T entity, Vector3 measuringPosition, Vector3 expectedOverlappedPosition, float distance) + { + // Must reached end of path before doing an actions + return base.OverlappedEntity(entity, measuringPosition, expectedOverlappedPosition, distance) && movement.reachedEndOfPath; + } + } +} \ No newline at end of file diff --git a/Scripts/PlayerCharacterController2DAI.cs.meta b/Scripts/PlayerCharacterController2DAI.cs.meta new file mode 100644 index 0000000..e6900b8 --- /dev/null +++ b/Scripts/PlayerCharacterController2DAI.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d4b10481c05f5cc4997ccd829bfba9c1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: