Added A* pathfinding for NPCs
This commit is contained in:
parent
be7009c578
commit
01b0d5ca21
@ -2,8 +2,10 @@
|
||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<CscToolPath>C:\Program Files\Unity\Hub\Editor\2020.3.32f1\Editor\Data\Tools\RoslynScripts</CscToolPath>
|
||||
<CscToolExe>unity_csc.bat</CscToolExe>
|
||||
<_TargetFrameworkDirectories>non_empty_path_generated_by_unity.rider.package</_TargetFrameworkDirectories>
|
||||
<_FullFrameworkReferenceAssemblyPaths>non_empty_path_generated_by_unity.rider.package</_FullFrameworkReferenceAssemblyPaths>
|
||||
<DisableHandlePackageFileConflicts>true</DisableHandlePackageFileConflicts>
|
||||
<CodeAnalysisRuleSet></CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
@ -52,9 +54,13 @@
|
||||
<ItemGroup>
|
||||
<Compile Include="Assets\Scripts\RespawnScript.cs" />
|
||||
<Compile Include="Assets\LetterText.cs" />
|
||||
<Compile Include="Assets\_\Stuff\GridPathfinding\UnitMovement.cs" />
|
||||
<Compile Include="Assets\_\Stuff\GridPathfinding\PathNode.cs" />
|
||||
<Compile Include="Assets\Scripts\Pathfinding\AStarPathfindingAgent.cs" />
|
||||
<Compile Include="Assets\Scripts\SceneManager\SceneTaskManager.cs" />
|
||||
<Compile Include="Assets\Scripts\SettingsButton.cs" />
|
||||
<Compile Include="Assets\Scripts\Domain\DialoguePanel\IPanel.cs" />
|
||||
<Compile Include="Assets\Scripts\Pathfinding\NodeMap.cs" />
|
||||
<Compile Include="Assets\Scripts\SceneManager\MainCharacter\MainCharacterManager.cs" />
|
||||
<Compile Include="Assets\Scripts\Domain\DialoguePanel\Enum\PanelButtonEnum.cs" />
|
||||
<Compile Include="Assets\Scripts\UI\ISlot.cs" />
|
||||
@ -63,6 +69,7 @@
|
||||
<Compile Include="Assets\Scripts\Objects\GoldOre.cs" />
|
||||
<Compile Include="Assets\Scripts\Domain\PanelTest.cs" />
|
||||
<Compile Include="Assets\Scripts\SceneManager\NPC\NPCManager.cs" />
|
||||
<Compile Include="Assets\_\Stuff\GridPathfinding\GridPathfinding.cs" />
|
||||
<Compile Include="Assets\OpenSettingsOnESCPress.cs" />
|
||||
<Compile Include="Assets\closePossibleButtonInfo.cs" />
|
||||
<Compile Include="Assets\BreakOre.cs" />
|
||||
@ -90,13 +97,16 @@
|
||||
<Compile Include="Assets\Scripts\PlayerPosition.cs" />
|
||||
<Compile Include="Assets\Scripts\Chest\ChestSlot.cs" />
|
||||
<Compile Include="Assets\Scripts\Domain\Dialogue\Model\DialogueModel.cs" />
|
||||
<Compile Include="Assets\LevelUpPopUp.cs" />
|
||||
<Compile Include="Assets\ChangeLanguageToEnglish.cs" />
|
||||
<Compile Include="Assets\Scripts\CamerFollow.cs" />
|
||||
<Compile Include="Assets\CloseIfQuestPanel.cs" />
|
||||
<Compile Include="Assets\TreeParticleEffect.cs" />
|
||||
<Compile Include="Assets\SaveMusicSettings.cs" />
|
||||
<Compile Include="Assets\_\Stuff\GridPathfinding\PathRoute.cs" />
|
||||
<Compile Include="Assets\Scripts\SceneManager\SaveItem\EquippableItemPrefarbAssetData.cs" />
|
||||
<Compile Include="Assets\Scripts\Equipment\EquipmentSlot.cs" />
|
||||
<Compile Include="Assets\Scripts\Pathfinding\TileData.cs" />
|
||||
<Compile Include="Assets\Scripts\DealDamage.cs" />
|
||||
<Compile Include="Assets\Scripts\LevelBar.cs" />
|
||||
<Compile Include="Assets\Scripts\Domain\DialoguePanel\Loader\DialoguePanelsPrefabsLoader.cs" />
|
||||
@ -112,6 +122,7 @@
|
||||
<Compile Include="Assets\TranslateText.cs" />
|
||||
<Compile Include="Assets\Scripts\SceneManager\Teleports\Gateway.cs" />
|
||||
<Compile Include="Assets\Scripts\FloatValue.cs" />
|
||||
<Compile Include="Assets\_\Stuff\GridPathfinding\LastMoveTo.cs" />
|
||||
<Compile Include="Assets\Scripts\SceneManager\SaveItem\SaveEquitableItemSystem.cs" />
|
||||
<Compile Include="Assets\Scripts\Item\EquippableItem.cs" />
|
||||
<Compile Include="Assets\Scripts\SceneManager\SceneEquippableItemManager.cs" />
|
||||
@ -127,8 +138,12 @@
|
||||
<Compile Include="Assets\Scripts\Enemies' Scprits\FollowingEnemy.cs" />
|
||||
<Compile Include="Assets\Scripts\Domain\Dialogue\DialogueController.cs" />
|
||||
<Compile Include="Assets\Scripts\HealthBar.cs" />
|
||||
<Compile Include="Assets\Scripts\Pathfinding\Node.cs" />
|
||||
<Compile Include="Assets\Scripts\Pathfinding\Pathfinding.cs" />
|
||||
<Compile Include="Assets\Scripts\Item\PickableController.cs" />
|
||||
<Compile Include="Assets\Scripts\Chest\ChestController.cs" />
|
||||
<Compile Include="Assets\_\Stuff\GridPathfinding\MapPos.cs" />
|
||||
<Compile Include="Assets\_\Stuff\GridPathfinding\PathQueue.cs" />
|
||||
<Compile Include="Assets\Scripts\DoorBehaviour.cs" />
|
||||
<Compile Include="Assets\Scripts\SceneManager\SaveItem\EquippableItemPrefarbAsset.cs" />
|
||||
<Compile Include="Assets\Scripts\Enemies' Scprits\PatrollingEnemy.cs" />
|
||||
@ -139,6 +154,7 @@
|
||||
<Compile Include="Assets\Scripts\Inventory\InventoryPanelController.cs" />
|
||||
<Compile Include="Assets\TakingDamage.cs" />
|
||||
<Compile Include="Assets\StartOnEnter.cs" />
|
||||
<Compile Include="Assets\_\Stuff\GridPathfinding\BinaryTree.cs" />
|
||||
<Compile Include="Assets\Scripts\Domain\Npc\NPCDialogue.cs" />
|
||||
<Compile Include="Assets\Scripts\Enemies' Scprits\Cave\BossThug.cs" />
|
||||
<Compile Include="Assets\Scripts\UI\BaseWarehouseController.cs" />
|
||||
@ -737,96 +753,6 @@
|
||||
<HintPath>C:/Program Files/Unity/Hub/Editor/2020.3.32f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.Xml.Serialization.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.2D.Animation.Editor">
|
||||
<<<<<<< HEAD
|
||||
<HintPath>C:/Users/alicj/OneDrive/Desktop/x/Scriptum/Library/ScriptAssemblies/Unity.2D.Animation.Editor.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.InternalAPIEngineBridge.001">
|
||||
<HintPath>C:/Users/alicj/OneDrive/Desktop/x/Scriptum/Library/ScriptAssemblies/Unity.InternalAPIEngineBridge.001.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.VSCode.Editor">
|
||||
<HintPath>C:/Users/alicj/OneDrive/Desktop/x/Scriptum/Library/ScriptAssemblies/Unity.VSCode.Editor.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.2D.PixelPerfect">
|
||||
<HintPath>C:/Users/alicj/OneDrive/Desktop/x/Scriptum/Library/ScriptAssemblies/Unity.2D.PixelPerfect.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.2D.Tilemap.Editor">
|
||||
<HintPath>C:/Users/alicj/OneDrive/Desktop/x/Scriptum/Library/ScriptAssemblies/Unity.2D.Tilemap.Editor.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="PsdPlugin">
|
||||
<HintPath>C:/Users/alicj/OneDrive/Desktop/x/Scriptum/Library/ScriptAssemblies/PsdPlugin.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.TextMeshPro.Editor">
|
||||
<HintPath>C:/Users/alicj/OneDrive/Desktop/x/Scriptum/Library/ScriptAssemblies/Unity.TextMeshPro.Editor.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.VisualStudio.Editor">
|
||||
<HintPath>C:/Users/alicj/OneDrive/Desktop/x/Scriptum/Library/ScriptAssemblies/Unity.VisualStudio.Editor.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Timeline">
|
||||
<HintPath>C:/Users/alicj/OneDrive/Desktop/x/Scriptum/Library/ScriptAssemblies/Unity.Timeline.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.TextMeshPro">
|
||||
<HintPath>C:/Users/alicj/OneDrive/Desktop/x/Scriptum/Library/ScriptAssemblies/Unity.TextMeshPro.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.2D.IK.Editor">
|
||||
<HintPath>C:/Users/alicj/OneDrive/Desktop/x/Scriptum/Library/ScriptAssemblies/Unity.2D.IK.Editor.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.2D.Sprite.Editor">
|
||||
<HintPath>C:/Users/alicj/OneDrive/Desktop/x/Scriptum/Library/ScriptAssemblies/Unity.2D.Sprite.Editor.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.2D.Psdimporter.Editor">
|
||||
<HintPath>C:/Users/alicj/OneDrive/Desktop/x/Scriptum/Library/ScriptAssemblies/Unity.2D.Psdimporter.Editor.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.2D.Path.Editor">
|
||||
<HintPath>C:/Users/alicj/OneDrive/Desktop/x/Scriptum/Library/ScriptAssemblies/Unity.2D.Path.Editor.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.InternalAPIEditorBridge.001">
|
||||
<HintPath>C:/Users/alicj/OneDrive/Desktop/x/Scriptum/Library/ScriptAssemblies/Unity.InternalAPIEditorBridge.001.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEditor.UI">
|
||||
<HintPath>C:/Users/alicj/OneDrive/Desktop/x/Scriptum/Library/ScriptAssemblies/UnityEditor.UI.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.PlasticSCM.Editor">
|
||||
<HintPath>C:/Users/alicj/OneDrive/Desktop/x/Scriptum/Library/ScriptAssemblies/Unity.PlasticSCM.Editor.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Rider.Editor">
|
||||
<HintPath>C:/Users/alicj/OneDrive/Desktop/x/Scriptum/Library/ScriptAssemblies/Unity.Rider.Editor.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UI">
|
||||
<HintPath>C:/Users/alicj/OneDrive/Desktop/x/Scriptum/Library/ScriptAssemblies/UnityEngine.UI.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Mathematics">
|
||||
<HintPath>C:/Users/alicj/OneDrive/Desktop/x/Scriptum/Library/ScriptAssemblies/Unity.Mathematics.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.2D.IK.Runtime">
|
||||
<HintPath>C:/Users/alicj/OneDrive/Desktop/x/Scriptum/Library/ScriptAssemblies/Unity.2D.IK.Runtime.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.2D.Animation.Triangle.Runtime">
|
||||
<HintPath>C:/Users/alicj/OneDrive/Desktop/x/Scriptum/Library/ScriptAssemblies/Unity.2D.Animation.Triangle.Runtime.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.2D.Animation.Runtime">
|
||||
<HintPath>C:/Users/alicj/OneDrive/Desktop/x/Scriptum/Library/ScriptAssemblies/Unity.2D.Animation.Runtime.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.2D.PixelPerfect.Editor">
|
||||
<HintPath>C:/Users/alicj/OneDrive/Desktop/x/Scriptum/Library/ScriptAssemblies/Unity.2D.PixelPerfect.Editor.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Timeline.Editor">
|
||||
<HintPath>C:/Users/alicj/OneDrive/Desktop/x/Scriptum/Library/ScriptAssemblies/Unity.Timeline.Editor.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.Mathematics.Editor">
|
||||
<HintPath>C:/Users/alicj/OneDrive/Desktop/x/Scriptum/Library/ScriptAssemblies/Unity.Mathematics.Editor.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.2D.Common.Runtime">
|
||||
<HintPath>C:/Users/alicj/OneDrive/Desktop/x/Scriptum/Library/ScriptAssemblies/Unity.2D.Common.Runtime.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.2D.SpriteShape.Editor">
|
||||
<HintPath>C:/Users/alicj/OneDrive/Desktop/x/Scriptum/Library/ScriptAssemblies/Unity.2D.SpriteShape.Editor.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.2D.Common.Editor">
|
||||
<HintPath>C:/Users/alicj/OneDrive/Desktop/x/Scriptum/Library/ScriptAssemblies/Unity.2D.Common.Editor.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.2D.SpriteShape.Runtime">
|
||||
<HintPath>C:/Users/alicj/OneDrive/Desktop/x/Scriptum/Library/ScriptAssemblies/Unity.2D.SpriteShape.Runtime.dll</HintPath>
|
||||
=======
|
||||
<HintPath>C:/Scriptum/Library/ScriptAssemblies/Unity.2D.Animation.Editor.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Unity.InternalAPIEngineBridge.001">
|
||||
@ -915,7 +841,6 @@
|
||||
</Reference>
|
||||
<Reference Include="Unity.2D.SpriteShape.Runtime">
|
||||
<HintPath>C:/Scriptum/Library/ScriptAssemblies/Unity.2D.SpriteShape.Runtime.dll</HintPath>
|
||||
>>>>>>> jakszt-thuganimations
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
74
Assets/Animations/NPC/BossThugWalkDown.anim
Normal file
74
Assets/Animations/NPC/BossThugWalkDown.anim
Normal file
@ -0,0 +1,74 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!74 &7400000
|
||||
AnimationClip:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: BossThugWalkDown
|
||||
serializedVersion: 6
|
||||
m_Legacy: 0
|
||||
m_Compressed: 0
|
||||
m_UseHighQualityCurve: 1
|
||||
m_RotationCurves: []
|
||||
m_CompressedRotationCurves: []
|
||||
m_EulerCurves: []
|
||||
m_PositionCurves: []
|
||||
m_ScaleCurves: []
|
||||
m_FloatCurves: []
|
||||
m_PPtrCurves:
|
||||
- curve:
|
||||
- time: 0
|
||||
value: {fileID: -5737209910555243353, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- time: 0.083333336
|
||||
value: {fileID: 5970410323577050059, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- time: 0.16666667
|
||||
value: {fileID: -8438286505667621047, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
attribute: m_Sprite
|
||||
path:
|
||||
classID: 212
|
||||
script: {fileID: 0}
|
||||
m_SampleRate: 12
|
||||
m_WrapMode: 0
|
||||
m_Bounds:
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Extent: {x: 0, y: 0, z: 0}
|
||||
m_ClipBindingConstant:
|
||||
genericBindings:
|
||||
- serializedVersion: 2
|
||||
path: 0
|
||||
attribute: 0
|
||||
script: {fileID: 0}
|
||||
typeID: 212
|
||||
customType: 23
|
||||
isPPtrCurve: 1
|
||||
pptrCurveMapping:
|
||||
- {fileID: -5737209910555243353, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- {fileID: 5970410323577050059, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- {fileID: -8438286505667621047, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
m_AnimationClipSettings:
|
||||
serializedVersion: 2
|
||||
m_AdditiveReferencePoseClip: {fileID: 0}
|
||||
m_AdditiveReferencePoseTime: 0
|
||||
m_StartTime: 0
|
||||
m_StopTime: 0.25
|
||||
m_OrientationOffsetY: 0
|
||||
m_Level: 0
|
||||
m_CycleOffset: 0
|
||||
m_HasAdditiveReferencePose: 0
|
||||
m_LoopTime: 0
|
||||
m_LoopBlend: 0
|
||||
m_LoopBlendOrientation: 0
|
||||
m_LoopBlendPositionY: 0
|
||||
m_LoopBlendPositionXZ: 0
|
||||
m_KeepOriginalOrientation: 0
|
||||
m_KeepOriginalPositionY: 1
|
||||
m_KeepOriginalPositionXZ: 0
|
||||
m_HeightFromFeet: 0
|
||||
m_Mirror: 0
|
||||
m_EditorCurves: []
|
||||
m_EulerEditorCurves: []
|
||||
m_HasGenericRootTransform: 0
|
||||
m_HasMotionFloatCurves: 0
|
||||
m_Events: []
|
8
Assets/Animations/NPC/BossThugWalkDown.anim.meta
Normal file
8
Assets/Animations/NPC/BossThugWalkDown.anim.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fa48432d111beb749b026f5374826207
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
74
Assets/Animations/NPC/BossThugWalkLeft.anim
Normal file
74
Assets/Animations/NPC/BossThugWalkLeft.anim
Normal file
@ -0,0 +1,74 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!74 &7400000
|
||||
AnimationClip:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: BossThugWalkLeft
|
||||
serializedVersion: 6
|
||||
m_Legacy: 0
|
||||
m_Compressed: 0
|
||||
m_UseHighQualityCurve: 1
|
||||
m_RotationCurves: []
|
||||
m_CompressedRotationCurves: []
|
||||
m_EulerCurves: []
|
||||
m_PositionCurves: []
|
||||
m_ScaleCurves: []
|
||||
m_FloatCurves: []
|
||||
m_PPtrCurves:
|
||||
- curve:
|
||||
- time: 0
|
||||
value: {fileID: 3375708551128050511, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- time: 0.083333336
|
||||
value: {fileID: 475361983993561210, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- time: 0.16666667
|
||||
value: {fileID: -592845421134076894, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
attribute: m_Sprite
|
||||
path:
|
||||
classID: 212
|
||||
script: {fileID: 0}
|
||||
m_SampleRate: 12
|
||||
m_WrapMode: 0
|
||||
m_Bounds:
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Extent: {x: 0, y: 0, z: 0}
|
||||
m_ClipBindingConstant:
|
||||
genericBindings:
|
||||
- serializedVersion: 2
|
||||
path: 0
|
||||
attribute: 0
|
||||
script: {fileID: 0}
|
||||
typeID: 212
|
||||
customType: 23
|
||||
isPPtrCurve: 1
|
||||
pptrCurveMapping:
|
||||
- {fileID: 3375708551128050511, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- {fileID: 475361983993561210, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- {fileID: -592845421134076894, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
m_AnimationClipSettings:
|
||||
serializedVersion: 2
|
||||
m_AdditiveReferencePoseClip: {fileID: 0}
|
||||
m_AdditiveReferencePoseTime: 0
|
||||
m_StartTime: 0
|
||||
m_StopTime: 0.25
|
||||
m_OrientationOffsetY: 0
|
||||
m_Level: 0
|
||||
m_CycleOffset: 0
|
||||
m_HasAdditiveReferencePose: 0
|
||||
m_LoopTime: 0
|
||||
m_LoopBlend: 0
|
||||
m_LoopBlendOrientation: 0
|
||||
m_LoopBlendPositionY: 0
|
||||
m_LoopBlendPositionXZ: 0
|
||||
m_KeepOriginalOrientation: 0
|
||||
m_KeepOriginalPositionY: 1
|
||||
m_KeepOriginalPositionXZ: 0
|
||||
m_HeightFromFeet: 0
|
||||
m_Mirror: 0
|
||||
m_EditorCurves: []
|
||||
m_EulerEditorCurves: []
|
||||
m_HasGenericRootTransform: 0
|
||||
m_HasMotionFloatCurves: 0
|
||||
m_Events: []
|
8
Assets/Animations/NPC/BossThugWalkLeft.anim.meta
Normal file
8
Assets/Animations/NPC/BossThugWalkLeft.anim.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6fc1cf4c2bfe92f4999e9161a8f00df6
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
74
Assets/Animations/NPC/BossThugWalkRight.anim
Normal file
74
Assets/Animations/NPC/BossThugWalkRight.anim
Normal file
@ -0,0 +1,74 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!74 &7400000
|
||||
AnimationClip:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: BossThugWalkRight
|
||||
serializedVersion: 6
|
||||
m_Legacy: 0
|
||||
m_Compressed: 0
|
||||
m_UseHighQualityCurve: 1
|
||||
m_RotationCurves: []
|
||||
m_CompressedRotationCurves: []
|
||||
m_EulerCurves: []
|
||||
m_PositionCurves: []
|
||||
m_ScaleCurves: []
|
||||
m_FloatCurves: []
|
||||
m_PPtrCurves:
|
||||
- curve:
|
||||
- time: 0
|
||||
value: {fileID: -8147506323478610176, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- time: 0.083333336
|
||||
value: {fileID: 7639942379048000754, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- time: 0.16666667
|
||||
value: {fileID: 630885841078028400, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
attribute: m_Sprite
|
||||
path:
|
||||
classID: 212
|
||||
script: {fileID: 0}
|
||||
m_SampleRate: 12
|
||||
m_WrapMode: 0
|
||||
m_Bounds:
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Extent: {x: 0, y: 0, z: 0}
|
||||
m_ClipBindingConstant:
|
||||
genericBindings:
|
||||
- serializedVersion: 2
|
||||
path: 0
|
||||
attribute: 0
|
||||
script: {fileID: 0}
|
||||
typeID: 212
|
||||
customType: 23
|
||||
isPPtrCurve: 1
|
||||
pptrCurveMapping:
|
||||
- {fileID: -8147506323478610176, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- {fileID: 7639942379048000754, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- {fileID: 630885841078028400, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
m_AnimationClipSettings:
|
||||
serializedVersion: 2
|
||||
m_AdditiveReferencePoseClip: {fileID: 0}
|
||||
m_AdditiveReferencePoseTime: 0
|
||||
m_StartTime: 0
|
||||
m_StopTime: 0.25
|
||||
m_OrientationOffsetY: 0
|
||||
m_Level: 0
|
||||
m_CycleOffset: 0
|
||||
m_HasAdditiveReferencePose: 0
|
||||
m_LoopTime: 0
|
||||
m_LoopBlend: 0
|
||||
m_LoopBlendOrientation: 0
|
||||
m_LoopBlendPositionY: 0
|
||||
m_LoopBlendPositionXZ: 0
|
||||
m_KeepOriginalOrientation: 0
|
||||
m_KeepOriginalPositionY: 1
|
||||
m_KeepOriginalPositionXZ: 0
|
||||
m_HeightFromFeet: 0
|
||||
m_Mirror: 0
|
||||
m_EditorCurves: []
|
||||
m_EulerEditorCurves: []
|
||||
m_HasGenericRootTransform: 0
|
||||
m_HasMotionFloatCurves: 0
|
||||
m_Events: []
|
8
Assets/Animations/NPC/BossThugWalkRight.anim.meta
Normal file
8
Assets/Animations/NPC/BossThugWalkRight.anim.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5c479d3e932cb5748a7aeaaa7d621251
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
74
Assets/Animations/NPC/BossThugWalkUp.anim
Normal file
74
Assets/Animations/NPC/BossThugWalkUp.anim
Normal file
@ -0,0 +1,74 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!74 &7400000
|
||||
AnimationClip:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: BossThugWalkUp
|
||||
serializedVersion: 6
|
||||
m_Legacy: 0
|
||||
m_Compressed: 0
|
||||
m_UseHighQualityCurve: 1
|
||||
m_RotationCurves: []
|
||||
m_CompressedRotationCurves: []
|
||||
m_EulerCurves: []
|
||||
m_PositionCurves: []
|
||||
m_ScaleCurves: []
|
||||
m_FloatCurves: []
|
||||
m_PPtrCurves:
|
||||
- curve:
|
||||
- time: 0
|
||||
value: {fileID: 7211768901348452491, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- time: 0.083333336
|
||||
value: {fileID: -4449130184925231056, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- time: 0.16666667
|
||||
value: {fileID: -1899329925172714913, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
attribute: m_Sprite
|
||||
path:
|
||||
classID: 212
|
||||
script: {fileID: 0}
|
||||
m_SampleRate: 12
|
||||
m_WrapMode: 0
|
||||
m_Bounds:
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Extent: {x: 0, y: 0, z: 0}
|
||||
m_ClipBindingConstant:
|
||||
genericBindings:
|
||||
- serializedVersion: 2
|
||||
path: 0
|
||||
attribute: 0
|
||||
script: {fileID: 0}
|
||||
typeID: 212
|
||||
customType: 23
|
||||
isPPtrCurve: 1
|
||||
pptrCurveMapping:
|
||||
- {fileID: 7211768901348452491, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- {fileID: -4449130184925231056, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- {fileID: -1899329925172714913, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
m_AnimationClipSettings:
|
||||
serializedVersion: 2
|
||||
m_AdditiveReferencePoseClip: {fileID: 0}
|
||||
m_AdditiveReferencePoseTime: 0
|
||||
m_StartTime: 0
|
||||
m_StopTime: 0.25
|
||||
m_OrientationOffsetY: 0
|
||||
m_Level: 0
|
||||
m_CycleOffset: 0
|
||||
m_HasAdditiveReferencePose: 0
|
||||
m_LoopTime: 0
|
||||
m_LoopBlend: 0
|
||||
m_LoopBlendOrientation: 0
|
||||
m_LoopBlendPositionY: 0
|
||||
m_LoopBlendPositionXZ: 0
|
||||
m_KeepOriginalOrientation: 0
|
||||
m_KeepOriginalPositionY: 1
|
||||
m_KeepOriginalPositionXZ: 0
|
||||
m_HeightFromFeet: 0
|
||||
m_Mirror: 0
|
||||
m_EditorCurves: []
|
||||
m_EulerEditorCurves: []
|
||||
m_HasGenericRootTransform: 0
|
||||
m_HasMotionFloatCurves: 0
|
||||
m_Events: []
|
8
Assets/Animations/NPC/BossThugWalkUp.anim.meta
Normal file
8
Assets/Animations/NPC/BossThugWalkUp.anim.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 16ba918a2a6e80b4fb97cf504b1be2a7
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
66
Assets/Prefarbs/GridManager.prefab
Normal file
66
Assets/Prefarbs/GridManager.prefab
Normal file
@ -0,0 +1,66 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &3079617781123838016
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 3079617781123838030}
|
||||
- component: {fileID: 3079617781123838031}
|
||||
- component: {fileID: 3079617781123838029}
|
||||
m_Layer: 0
|
||||
m_Name: GridManager
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &3079617781123838030
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3079617781123838016}
|
||||
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 &3079617781123838031
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3079617781123838016}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: b34c300fab4fcd14c82134577cf22d14, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
mapSize: {x: 144, y: 137}
|
||||
cellSize: 1
|
||||
TileDatas:
|
||||
- {fileID: 11400000, guid: aaa4610d4271c4c4f870a33c04002ea8, type: 2}
|
||||
tilemap: {fileID: 0}
|
||||
showIndividualNodes: 0
|
||||
--- !u!114 &3079617781123838029
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3079617781123838016}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 4770c4f9ef5ba784b823d2d2c2327491, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
Player: {fileID: 0}
|
||||
Map: {fileID: 3079617781123838031}
|
7
Assets/Prefarbs/GridManager.prefab.meta
Normal file
7
Assets/Prefarbs/GridManager.prefab.meta
Normal file
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6b44df46620f48f41903e7858379f704
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
286
Assets/Resources/SampleScene/Enemies/BossThugAnimator.controller
Normal file
286
Assets/Resources/SampleScene/Enemies/BossThugAnimator.controller
Normal file
@ -0,0 +1,286 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1107 &-8930954430168798002
|
||||
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: -8316410093360559377}
|
||||
m_Position: {x: 293.1891, y: 47.39978, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: -6087507706285161766}
|
||||
m_Position: {x: 290, y: 150, 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: -8316410093360559377}
|
||||
--- !u!1102 &-8316410093360559377
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: Blend Tree
|
||||
m_Speed: 1
|
||||
m_CycleOffset: 0
|
||||
m_Transitions:
|
||||
- {fileID: 4768748432751829616}
|
||||
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: 6423169707013116926}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1102 &-6087507706285161766
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: Blend Tree 0
|
||||
m_Speed: 1
|
||||
m_CycleOffset: 0
|
||||
m_Transitions:
|
||||
- {fileID: 8794286156724747360}
|
||||
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: -5588113005279829250}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!206 &-5588113005279829250
|
||||
BlendTree:
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: BossThugRunTree
|
||||
m_Childs:
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: 7400000, guid: af96c5abed78d2d4ab98419221e87075, type: 2}
|
||||
m_Threshold: 0
|
||||
m_Position: {x: 0, y: -1}
|
||||
m_TimeScale: 1
|
||||
m_CycleOffset: 0
|
||||
m_DirectBlendParameter: Blend
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: 7400000, guid: c09f1d1ac45344d4fa1ee7738a70004e, type: 2}
|
||||
m_Threshold: 0.33333334
|
||||
m_Position: {x: 0, y: 1}
|
||||
m_TimeScale: 1
|
||||
m_CycleOffset: 0
|
||||
m_DirectBlendParameter: Blend
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: 7400000, guid: 9eaff2bf40dcc8c4aaba1fa29fd65981, type: 2}
|
||||
m_Threshold: 0.6666667
|
||||
m_Position: {x: -1, y: 0}
|
||||
m_TimeScale: 1
|
||||
m_CycleOffset: 0
|
||||
m_DirectBlendParameter: Blend
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: 7400000, guid: a5e98f9fb367d6344ab2b3f6c8872949, type: 2}
|
||||
m_Threshold: 1
|
||||
m_Position: {x: 1, y: 0}
|
||||
m_TimeScale: 1
|
||||
m_CycleOffset: 0
|
||||
m_DirectBlendParameter: Blend
|
||||
m_Mirror: 0
|
||||
m_BlendParameter: Xinfo
|
||||
m_BlendParameterY: Yinfo
|
||||
m_MinThreshold: 0
|
||||
m_MaxThreshold: 1
|
||||
m_UseAutomaticThresholds: 1
|
||||
m_NormalizedBlendValues: 0
|
||||
m_BlendType: 1
|
||||
--- !u!91 &9100000
|
||||
AnimatorController:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: BossThugAnimator
|
||||
serializedVersion: 5
|
||||
m_AnimatorParameters:
|
||||
- m_Name: Blend
|
||||
m_Type: 1
|
||||
m_DefaultFloat: 0
|
||||
m_DefaultInt: 0
|
||||
m_DefaultBool: 0
|
||||
m_Controller: {fileID: 0}
|
||||
- m_Name: Xinfo
|
||||
m_Type: 1
|
||||
m_DefaultFloat: 0
|
||||
m_DefaultInt: 0
|
||||
m_DefaultBool: 0
|
||||
m_Controller: {fileID: 0}
|
||||
- m_Name: Yinfo
|
||||
m_Type: 1
|
||||
m_DefaultFloat: 0
|
||||
m_DefaultInt: 0
|
||||
m_DefaultBool: 0
|
||||
m_Controller: {fileID: 0}
|
||||
- m_Name: isRunning
|
||||
m_Type: 4
|
||||
m_DefaultFloat: 0
|
||||
m_DefaultInt: 0
|
||||
m_DefaultBool: 0
|
||||
m_Controller: {fileID: 0}
|
||||
m_AnimatorLayers:
|
||||
- serializedVersion: 5
|
||||
m_Name: Base Layer
|
||||
m_StateMachine: {fileID: -8930954430168798002}
|
||||
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!206 &361070096776021489
|
||||
BlendTree:
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: BlendTree
|
||||
m_Childs: []
|
||||
m_BlendParameter: Blend
|
||||
m_BlendParameterY: Blend
|
||||
m_MinThreshold: 0
|
||||
m_MaxThreshold: 1
|
||||
m_UseAutomaticThresholds: 1
|
||||
m_NormalizedBlendValues: 0
|
||||
m_BlendType: 0
|
||||
--- !u!1101 &4768748432751829616
|
||||
AnimatorStateTransition:
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name:
|
||||
m_Conditions:
|
||||
- m_ConditionMode: 1
|
||||
m_ConditionEvent: isRunning
|
||||
m_EventTreshold: 0
|
||||
m_DstStateMachine: {fileID: 0}
|
||||
m_DstState: {fileID: -6087507706285161766}
|
||||
m_Solo: 0
|
||||
m_Mute: 0
|
||||
m_IsExit: 0
|
||||
serializedVersion: 3
|
||||
m_TransitionDuration: 0
|
||||
m_TransitionOffset: 0
|
||||
m_ExitTime: 0
|
||||
m_HasExitTime: 0
|
||||
m_HasFixedDuration: 0
|
||||
m_InterruptionSource: 0
|
||||
m_OrderedInterruption: 1
|
||||
m_CanTransitionToSelf: 1
|
||||
--- !u!206 &6423169707013116926
|
||||
BlendTree:
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: Blend Tree
|
||||
m_Childs:
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: 7400000, guid: 5766c4d8a8d409242851cf9be801ef7e, type: 2}
|
||||
m_Threshold: 0
|
||||
m_Position: {x: 0, y: 0}
|
||||
m_TimeScale: 1
|
||||
m_CycleOffset: 0
|
||||
m_DirectBlendParameter: Blend
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: 7400000, guid: 1026f6b01b7e14c45b8ea2e9fc0e69de, type: 2}
|
||||
m_Threshold: 0.33333334
|
||||
m_Position: {x: 0, y: 0}
|
||||
m_TimeScale: 1
|
||||
m_CycleOffset: 0
|
||||
m_DirectBlendParameter: Blend
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: 7400000, guid: 7664525aa3a759646adf08465dfbbc16, type: 2}
|
||||
m_Threshold: 0.6666667
|
||||
m_Position: {x: 0, y: 0}
|
||||
m_TimeScale: 1
|
||||
m_CycleOffset: 0
|
||||
m_DirectBlendParameter: Blend
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: 7400000, guid: 13b78ec291fa07f4d937de40ec122acc, type: 2}
|
||||
m_Threshold: 1
|
||||
m_Position: {x: 0, y: 0}
|
||||
m_TimeScale: 1
|
||||
m_CycleOffset: 0
|
||||
m_DirectBlendParameter: Blend
|
||||
m_Mirror: 0
|
||||
m_BlendParameter: Blend
|
||||
m_BlendParameterY: Blend
|
||||
m_MinThreshold: 0
|
||||
m_MaxThreshold: 1
|
||||
m_UseAutomaticThresholds: 1
|
||||
m_NormalizedBlendValues: 0
|
||||
m_BlendType: 1
|
||||
--- !u!1101 &8794286156724747360
|
||||
AnimatorStateTransition:
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name:
|
||||
m_Conditions:
|
||||
- m_ConditionMode: 2
|
||||
m_ConditionEvent: isRunning
|
||||
m_EventTreshold: 0
|
||||
m_DstStateMachine: {fileID: 0}
|
||||
m_DstState: {fileID: -8316410093360559377}
|
||||
m_Solo: 0
|
||||
m_Mute: 0
|
||||
m_IsExit: 0
|
||||
serializedVersion: 3
|
||||
m_TransitionDuration: 0
|
||||
m_TransitionOffset: 0
|
||||
m_ExitTime: 0
|
||||
m_HasExitTime: 0
|
||||
m_HasFixedDuration: 0
|
||||
m_InterruptionSource: 0
|
||||
m_OrderedInterruption: 1
|
||||
m_CanTransitionToSelf: 1
|
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4e408ead2b862ca4685d5ace7011f083
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 9100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
218
Assets/Resources/SampleScene/Enemies/ThugAnimator.controller
Normal file
218
Assets/Resources/SampleScene/Enemies/ThugAnimator.controller
Normal file
@ -0,0 +1,218 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!206 &-8586240220408617014
|
||||
BlendTree:
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: Blend Tree
|
||||
m_Childs:
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: 7400000, guid: c09f1d1ac45344d4fa1ee7738a70004e, type: 2}
|
||||
m_Threshold: 0
|
||||
m_Position: {x: 0, y: -1}
|
||||
m_TimeScale: 1
|
||||
m_CycleOffset: 0
|
||||
m_DirectBlendParameter: X
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: 7400000, guid: af96c5abed78d2d4ab98419221e87075, type: 2}
|
||||
m_Threshold: 0.25
|
||||
m_Position: {x: 0, y: 1}
|
||||
m_TimeScale: 1
|
||||
m_CycleOffset: 0
|
||||
m_DirectBlendParameter: X
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: 7400000, guid: 9eaff2bf40dcc8c4aaba1fa29fd65981, type: 2}
|
||||
m_Threshold: 0.5
|
||||
m_Position: {x: -1, y: 0}
|
||||
m_TimeScale: 1
|
||||
m_CycleOffset: 0
|
||||
m_DirectBlendParameter: X
|
||||
m_Mirror: 0
|
||||
- serializedVersion: 2
|
||||
m_Motion: {fileID: 7400000, guid: a5e98f9fb367d6344ab2b3f6c8872949, type: 2}
|
||||
m_Threshold: 0.75
|
||||
m_Position: {x: 1, y: 0}
|
||||
m_TimeScale: 1
|
||||
m_CycleOffset: 0
|
||||
m_DirectBlendParameter: X
|
||||
m_Mirror: 0
|
||||
m_BlendParameter: Xinfo
|
||||
m_BlendParameterY: Yinfo
|
||||
m_MinThreshold: 0
|
||||
m_MaxThreshold: 0.75
|
||||
m_UseAutomaticThresholds: 1
|
||||
m_NormalizedBlendValues: 0
|
||||
m_BlendType: 1
|
||||
--- !u!1107 &-6323065485593425674
|
||||
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: -182899528967422495}
|
||||
m_Position: {x: 360, y: 30, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: 1002345273696687695}
|
||||
m_Position: {x: 360, y: 150, 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: -182899528967422495}
|
||||
--- !u!1101 &-1580133079086915621
|
||||
AnimatorStateTransition:
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name:
|
||||
m_Conditions:
|
||||
- m_ConditionMode: 2
|
||||
m_ConditionEvent: isRunning
|
||||
m_EventTreshold: 0
|
||||
m_DstStateMachine: {fileID: 0}
|
||||
m_DstState: {fileID: -182899528967422495}
|
||||
m_Solo: 0
|
||||
m_Mute: 0
|
||||
m_IsExit: 0
|
||||
serializedVersion: 3
|
||||
m_TransitionDuration: 0
|
||||
m_TransitionOffset: 0
|
||||
m_ExitTime: 0
|
||||
m_HasExitTime: 1
|
||||
m_HasFixedDuration: 0
|
||||
m_InterruptionSource: 0
|
||||
m_OrderedInterruption: 1
|
||||
m_CanTransitionToSelf: 1
|
||||
--- !u!1102 &-182899528967422495
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: ThugIdle
|
||||
m_Speed: 1
|
||||
m_CycleOffset: 0
|
||||
m_Transitions:
|
||||
- {fileID: 3947640424919397810}
|
||||
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: e77d4d0165ef8734ea3d1031f6cc1946, 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: ThugAnimator
|
||||
serializedVersion: 5
|
||||
m_AnimatorParameters:
|
||||
- m_Name: Xinfo
|
||||
m_Type: 1
|
||||
m_DefaultFloat: 0
|
||||
m_DefaultInt: 0
|
||||
m_DefaultBool: 0
|
||||
m_Controller: {fileID: 0}
|
||||
- m_Name: Yinfo
|
||||
m_Type: 1
|
||||
m_DefaultFloat: 0
|
||||
m_DefaultInt: 0
|
||||
m_DefaultBool: 0
|
||||
m_Controller: {fileID: 0}
|
||||
- m_Name: isRunning
|
||||
m_Type: 4
|
||||
m_DefaultFloat: 0
|
||||
m_DefaultInt: 0
|
||||
m_DefaultBool: 0
|
||||
m_Controller: {fileID: 0}
|
||||
m_AnimatorLayers:
|
||||
- serializedVersion: 5
|
||||
m_Name: Base Layer
|
||||
m_StateMachine: {fileID: -6323065485593425674}
|
||||
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 &1002345273696687695
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: ThugTree
|
||||
m_Speed: 1
|
||||
m_CycleOffset: 0
|
||||
m_Transitions:
|
||||
- {fileID: -1580133079086915621}
|
||||
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: -8586240220408617014}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1101 &3947640424919397810
|
||||
AnimatorStateTransition:
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name:
|
||||
m_Conditions:
|
||||
- m_ConditionMode: 1
|
||||
m_ConditionEvent: isRunning
|
||||
m_EventTreshold: 0
|
||||
m_DstStateMachine: {fileID: 0}
|
||||
m_DstState: {fileID: 1002345273696687695}
|
||||
m_Solo: 0
|
||||
m_Mute: 0
|
||||
m_IsExit: 0
|
||||
serializedVersion: 3
|
||||
m_TransitionDuration: 0
|
||||
m_TransitionOffset: 0
|
||||
m_ExitTime: 0.75
|
||||
m_HasExitTime: 0
|
||||
m_HasFixedDuration: 0
|
||||
m_InterruptionSource: 0
|
||||
m_OrderedInterruption: 1
|
||||
m_CanTransitionToSelf: 1
|
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d3ee7fa12d1293d4f86d1a73da19c0b8
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 9100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
53
Assets/Resources/SampleScene/Enemies/thugIdle.anim
Normal file
53
Assets/Resources/SampleScene/Enemies/thugIdle.anim
Normal file
@ -0,0 +1,53 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!74 &7400000
|
||||
AnimationClip:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: thugIdle
|
||||
serializedVersion: 6
|
||||
m_Legacy: 0
|
||||
m_Compressed: 0
|
||||
m_UseHighQualityCurve: 1
|
||||
m_RotationCurves: []
|
||||
m_CompressedRotationCurves: []
|
||||
m_EulerCurves: []
|
||||
m_PositionCurves: []
|
||||
m_ScaleCurves: []
|
||||
m_FloatCurves: []
|
||||
m_PPtrCurves: []
|
||||
m_SampleRate: 60
|
||||
m_WrapMode: 0
|
||||
m_Bounds:
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Extent: {x: 0, y: 0, z: 0}
|
||||
m_ClipBindingConstant:
|
||||
genericBindings: []
|
||||
pptrCurveMapping: []
|
||||
m_AnimationClipSettings:
|
||||
serializedVersion: 2
|
||||
m_AdditiveReferencePoseClip: {fileID: 0}
|
||||
m_AdditiveReferencePoseTime: 0
|
||||
m_StartTime: 0
|
||||
m_StopTime: 1
|
||||
m_OrientationOffsetY: 0
|
||||
m_Level: 0
|
||||
m_CycleOffset: 0
|
||||
m_HasAdditiveReferencePose: 0
|
||||
m_LoopTime: 1
|
||||
m_LoopBlend: 0
|
||||
m_LoopBlendOrientation: 0
|
||||
m_LoopBlendPositionY: 0
|
||||
m_LoopBlendPositionXZ: 0
|
||||
m_KeepOriginalOrientation: 0
|
||||
m_KeepOriginalPositionY: 1
|
||||
m_KeepOriginalPositionXZ: 0
|
||||
m_HeightFromFeet: 0
|
||||
m_Mirror: 0
|
||||
m_EditorCurves: []
|
||||
m_EulerEditorCurves: []
|
||||
m_HasGenericRootTransform: 0
|
||||
m_HasMotionFloatCurves: 0
|
||||
m_Events: []
|
8
Assets/Resources/SampleScene/Enemies/thugIdle.anim.meta
Normal file
8
Assets/Resources/SampleScene/Enemies/thugIdle.anim.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e77d4d0165ef8734ea3d1031f6cc1946
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
74
Assets/Resources/SampleScene/Enemies/thugWalkDown.anim
Normal file
74
Assets/Resources/SampleScene/Enemies/thugWalkDown.anim
Normal file
@ -0,0 +1,74 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!74 &7400000
|
||||
AnimationClip:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: thugWalkDown
|
||||
serializedVersion: 6
|
||||
m_Legacy: 0
|
||||
m_Compressed: 0
|
||||
m_UseHighQualityCurve: 1
|
||||
m_RotationCurves: []
|
||||
m_CompressedRotationCurves: []
|
||||
m_EulerCurves: []
|
||||
m_PositionCurves: []
|
||||
m_ScaleCurves: []
|
||||
m_FloatCurves: []
|
||||
m_PPtrCurves:
|
||||
- curve:
|
||||
- time: 0
|
||||
value: {fileID: -6316236072753889025, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- time: 0.083333336
|
||||
value: {fileID: -8067693199416062898, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- time: 0.16666667
|
||||
value: {fileID: 6277737466426161926, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
attribute: m_Sprite
|
||||
path:
|
||||
classID: 212
|
||||
script: {fileID: 0}
|
||||
m_SampleRate: 12
|
||||
m_WrapMode: 0
|
||||
m_Bounds:
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Extent: {x: 0, y: 0, z: 0}
|
||||
m_ClipBindingConstant:
|
||||
genericBindings:
|
||||
- serializedVersion: 2
|
||||
path: 0
|
||||
attribute: 0
|
||||
script: {fileID: 0}
|
||||
typeID: 212
|
||||
customType: 23
|
||||
isPPtrCurve: 1
|
||||
pptrCurveMapping:
|
||||
- {fileID: -6316236072753889025, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- {fileID: -8067693199416062898, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- {fileID: 6277737466426161926, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
m_AnimationClipSettings:
|
||||
serializedVersion: 2
|
||||
m_AdditiveReferencePoseClip: {fileID: 0}
|
||||
m_AdditiveReferencePoseTime: 0
|
||||
m_StartTime: 0
|
||||
m_StopTime: 0.25
|
||||
m_OrientationOffsetY: 0
|
||||
m_Level: 0
|
||||
m_CycleOffset: 0
|
||||
m_HasAdditiveReferencePose: 0
|
||||
m_LoopTime: 1
|
||||
m_LoopBlend: 0
|
||||
m_LoopBlendOrientation: 0
|
||||
m_LoopBlendPositionY: 0
|
||||
m_LoopBlendPositionXZ: 0
|
||||
m_KeepOriginalOrientation: 0
|
||||
m_KeepOriginalPositionY: 1
|
||||
m_KeepOriginalPositionXZ: 0
|
||||
m_HeightFromFeet: 0
|
||||
m_Mirror: 0
|
||||
m_EditorCurves: []
|
||||
m_EulerEditorCurves: []
|
||||
m_HasGenericRootTransform: 0
|
||||
m_HasMotionFloatCurves: 0
|
||||
m_Events: []
|
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: af96c5abed78d2d4ab98419221e87075
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
74
Assets/Resources/SampleScene/Enemies/thugWalkFront.anim
Normal file
74
Assets/Resources/SampleScene/Enemies/thugWalkFront.anim
Normal file
@ -0,0 +1,74 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!74 &7400000
|
||||
AnimationClip:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: thugWalkFront
|
||||
serializedVersion: 6
|
||||
m_Legacy: 0
|
||||
m_Compressed: 0
|
||||
m_UseHighQualityCurve: 1
|
||||
m_RotationCurves: []
|
||||
m_CompressedRotationCurves: []
|
||||
m_EulerCurves: []
|
||||
m_PositionCurves: []
|
||||
m_ScaleCurves: []
|
||||
m_FloatCurves: []
|
||||
m_PPtrCurves:
|
||||
- curve:
|
||||
- time: 0
|
||||
value: {fileID: -4721639515439479027, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- time: 0.083333336
|
||||
value: {fileID: -5218287967814079876, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- time: 0.16666667
|
||||
value: {fileID: -3519226670878887508, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
attribute: m_Sprite
|
||||
path:
|
||||
classID: 212
|
||||
script: {fileID: 0}
|
||||
m_SampleRate: 12
|
||||
m_WrapMode: 0
|
||||
m_Bounds:
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Extent: {x: 0, y: 0, z: 0}
|
||||
m_ClipBindingConstant:
|
||||
genericBindings:
|
||||
- serializedVersion: 2
|
||||
path: 0
|
||||
attribute: 0
|
||||
script: {fileID: 0}
|
||||
typeID: 212
|
||||
customType: 23
|
||||
isPPtrCurve: 1
|
||||
pptrCurveMapping:
|
||||
- {fileID: -4721639515439479027, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- {fileID: -5218287967814079876, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- {fileID: -3519226670878887508, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
m_AnimationClipSettings:
|
||||
serializedVersion: 2
|
||||
m_AdditiveReferencePoseClip: {fileID: 0}
|
||||
m_AdditiveReferencePoseTime: 0
|
||||
m_StartTime: 0
|
||||
m_StopTime: 0.25
|
||||
m_OrientationOffsetY: 0
|
||||
m_Level: 0
|
||||
m_CycleOffset: 0
|
||||
m_HasAdditiveReferencePose: 0
|
||||
m_LoopTime: 1
|
||||
m_LoopBlend: 0
|
||||
m_LoopBlendOrientation: 0
|
||||
m_LoopBlendPositionY: 0
|
||||
m_LoopBlendPositionXZ: 0
|
||||
m_KeepOriginalOrientation: 0
|
||||
m_KeepOriginalPositionY: 1
|
||||
m_KeepOriginalPositionXZ: 0
|
||||
m_HeightFromFeet: 0
|
||||
m_Mirror: 0
|
||||
m_EditorCurves: []
|
||||
m_EulerEditorCurves: []
|
||||
m_HasGenericRootTransform: 0
|
||||
m_HasMotionFloatCurves: 0
|
||||
m_Events: []
|
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c09f1d1ac45344d4fa1ee7738a70004e
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
74
Assets/Resources/SampleScene/Enemies/thugWalkLeft.anim
Normal file
74
Assets/Resources/SampleScene/Enemies/thugWalkLeft.anim
Normal file
@ -0,0 +1,74 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!74 &7400000
|
||||
AnimationClip:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: thugWalkLeft
|
||||
serializedVersion: 6
|
||||
m_Legacy: 0
|
||||
m_Compressed: 0
|
||||
m_UseHighQualityCurve: 1
|
||||
m_RotationCurves: []
|
||||
m_CompressedRotationCurves: []
|
||||
m_EulerCurves: []
|
||||
m_PositionCurves: []
|
||||
m_ScaleCurves: []
|
||||
m_FloatCurves: []
|
||||
m_PPtrCurves:
|
||||
- curve:
|
||||
- time: 0
|
||||
value: {fileID: 4309043406242248579, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- time: 0.083333336
|
||||
value: {fileID: 8567144622364816611, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- time: 0.16666667
|
||||
value: {fileID: 3157778096723770166, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
attribute: m_Sprite
|
||||
path:
|
||||
classID: 212
|
||||
script: {fileID: 0}
|
||||
m_SampleRate: 12
|
||||
m_WrapMode: 0
|
||||
m_Bounds:
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Extent: {x: 0, y: 0, z: 0}
|
||||
m_ClipBindingConstant:
|
||||
genericBindings:
|
||||
- serializedVersion: 2
|
||||
path: 0
|
||||
attribute: 0
|
||||
script: {fileID: 0}
|
||||
typeID: 212
|
||||
customType: 23
|
||||
isPPtrCurve: 1
|
||||
pptrCurveMapping:
|
||||
- {fileID: 4309043406242248579, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- {fileID: 8567144622364816611, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- {fileID: 3157778096723770166, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
m_AnimationClipSettings:
|
||||
serializedVersion: 2
|
||||
m_AdditiveReferencePoseClip: {fileID: 0}
|
||||
m_AdditiveReferencePoseTime: 0
|
||||
m_StartTime: 0
|
||||
m_StopTime: 0.25
|
||||
m_OrientationOffsetY: 0
|
||||
m_Level: 0
|
||||
m_CycleOffset: 0
|
||||
m_HasAdditiveReferencePose: 0
|
||||
m_LoopTime: 1
|
||||
m_LoopBlend: 0
|
||||
m_LoopBlendOrientation: 0
|
||||
m_LoopBlendPositionY: 0
|
||||
m_LoopBlendPositionXZ: 0
|
||||
m_KeepOriginalOrientation: 0
|
||||
m_KeepOriginalPositionY: 1
|
||||
m_KeepOriginalPositionXZ: 0
|
||||
m_HeightFromFeet: 0
|
||||
m_Mirror: 0
|
||||
m_EditorCurves: []
|
||||
m_EulerEditorCurves: []
|
||||
m_HasGenericRootTransform: 0
|
||||
m_HasMotionFloatCurves: 0
|
||||
m_Events: []
|
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9eaff2bf40dcc8c4aaba1fa29fd65981
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
74
Assets/Resources/SampleScene/Enemies/thugWalkRight.anim
Normal file
74
Assets/Resources/SampleScene/Enemies/thugWalkRight.anim
Normal file
@ -0,0 +1,74 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!74 &7400000
|
||||
AnimationClip:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: thugWalkRight
|
||||
serializedVersion: 6
|
||||
m_Legacy: 0
|
||||
m_Compressed: 0
|
||||
m_UseHighQualityCurve: 1
|
||||
m_RotationCurves: []
|
||||
m_CompressedRotationCurves: []
|
||||
m_EulerCurves: []
|
||||
m_PositionCurves: []
|
||||
m_ScaleCurves: []
|
||||
m_FloatCurves: []
|
||||
m_PPtrCurves:
|
||||
- curve:
|
||||
- time: 0
|
||||
value: {fileID: -1280912182440070360, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- time: 0.083333336
|
||||
value: {fileID: 1971866478061622275, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- time: 0.16666667
|
||||
value: {fileID: 1151615476209077989, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
attribute: m_Sprite
|
||||
path:
|
||||
classID: 212
|
||||
script: {fileID: 0}
|
||||
m_SampleRate: 12
|
||||
m_WrapMode: 0
|
||||
m_Bounds:
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Extent: {x: 0, y: 0, z: 0}
|
||||
m_ClipBindingConstant:
|
||||
genericBindings:
|
||||
- serializedVersion: 2
|
||||
path: 0
|
||||
attribute: 0
|
||||
script: {fileID: 0}
|
||||
typeID: 212
|
||||
customType: 23
|
||||
isPPtrCurve: 1
|
||||
pptrCurveMapping:
|
||||
- {fileID: -1280912182440070360, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- {fileID: 1971866478061622275, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
- {fileID: 1151615476209077989, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
m_AnimationClipSettings:
|
||||
serializedVersion: 2
|
||||
m_AdditiveReferencePoseClip: {fileID: 0}
|
||||
m_AdditiveReferencePoseTime: 0
|
||||
m_StartTime: 0
|
||||
m_StopTime: 0.25
|
||||
m_OrientationOffsetY: 0
|
||||
m_Level: 0
|
||||
m_CycleOffset: 0
|
||||
m_HasAdditiveReferencePose: 0
|
||||
m_LoopTime: 1
|
||||
m_LoopBlend: 0
|
||||
m_LoopBlendOrientation: 0
|
||||
m_LoopBlendPositionY: 0
|
||||
m_LoopBlendPositionXZ: 0
|
||||
m_KeepOriginalOrientation: 0
|
||||
m_KeepOriginalPositionY: 1
|
||||
m_KeepOriginalPositionXZ: 0
|
||||
m_HeightFromFeet: 0
|
||||
m_Mirror: 0
|
||||
m_EditorCurves: []
|
||||
m_EulerEditorCurves: []
|
||||
m_HasGenericRootTransform: 0
|
||||
m_HasMotionFloatCurves: 0
|
||||
m_Events: []
|
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a5e98f9fb367d6344ab2b3f6c8872949
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -226306,6 +226306,67 @@ ParticleSystem:
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
vectorLabel1_3: W
|
||||
--- !u!1001 &1734445872
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
m_TransformParent: {fileID: 0}
|
||||
m_Modifications:
|
||||
- target: {fileID: 3079617781123838016, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: GridManager
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_RootOrder
|
||||
value: 17
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838031, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: tilemap
|
||||
value:
|
||||
objectReference: {fileID: 1280430028}
|
||||
m_RemovedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
--- !u!1 &1736139909
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -237404,6 +237465,7 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
mainCh: {fileID: 0}
|
||||
maxHealth: {fileID: 0}
|
||||
--- !u!114 &1938355875
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
|
@ -289,9 +289,9 @@ GameObject:
|
||||
- component: {fileID: 8620307}
|
||||
- component: {fileID: 8620306}
|
||||
- component: {fileID: 8620308}
|
||||
- component: {fileID: 8620310}
|
||||
- component: {fileID: 8620309}
|
||||
- component: {fileID: 8620311}
|
||||
- component: {fileID: 8620312}
|
||||
m_Layer: 0
|
||||
m_Name: Bat_1
|
||||
m_TagString: Enemy
|
||||
@ -409,27 +409,6 @@ BoxCollider2D:
|
||||
serializedVersion: 2
|
||||
m_Size: {x: 1.2, y: 0.8}
|
||||
m_EdgeRadius: 0
|
||||
--- !u!50 &8620310
|
||||
Rigidbody2D:
|
||||
serializedVersion: 4
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8620305}
|
||||
m_BodyType: 1
|
||||
m_Simulated: 1
|
||||
m_UseFullKinematicContacts: 0
|
||||
m_UseAutoMass: 0
|
||||
m_Mass: 1
|
||||
m_LinearDrag: 0
|
||||
m_AngularDrag: 0.05
|
||||
m_GravityScale: 0
|
||||
m_Material: {fileID: 0}
|
||||
m_Interpolate: 0
|
||||
m_SleepingMode: 1
|
||||
m_CollisionDetection: 0
|
||||
m_Constraints: 4
|
||||
--- !u!114 &8620311
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -445,13 +424,14 @@ MonoBehaviour:
|
||||
moveSpeed: 3
|
||||
enemyName: bat1
|
||||
maxHealth: {fileID: 11400000, guid: 1a234827b90bfc24da563fbd5ffb412a, type: 2}
|
||||
health: 0
|
||||
health: 1
|
||||
baseAttack: 1
|
||||
path:
|
||||
- {fileID: 652174080}
|
||||
- {fileID: 59883996}
|
||||
currentPoint: 0
|
||||
currentGoal: {fileID: 0}
|
||||
agent: {fileID: 8620312}
|
||||
target: {fileID: 0}
|
||||
chaseRadius: 6
|
||||
attackRadius: 0.55
|
||||
@ -467,6 +447,26 @@ MonoBehaviour:
|
||||
isKilled: 0
|
||||
isKilled2: 0
|
||||
expValue: 5
|
||||
--- !u!114 &8620312
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8620305}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: d622984048644f87804ad1a3f20aa23a, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
speed: 1
|
||||
currentPosition:
|
||||
GCost: 0
|
||||
hCost: 0
|
||||
walkable: 0
|
||||
worldPosition: {x: 0, y: 0, z: 0}
|
||||
gridPosition: {x: 0, y: 0}
|
||||
path: []
|
||||
--- !u!1 &23852502
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -692,10 +692,10 @@ GameObject:
|
||||
- component: {fileID: 68076401}
|
||||
- component: {fileID: 68076402}
|
||||
- component: {fileID: 68076406}
|
||||
- component: {fileID: 68076405}
|
||||
- component: {fileID: 68076404}
|
||||
- component: {fileID: 68076403}
|
||||
- component: {fileID: 68076407}
|
||||
- component: {fileID: 68076408}
|
||||
m_Layer: 0
|
||||
m_Name: Skeleton_0
|
||||
m_TagString: Enemy
|
||||
@ -711,7 +711,7 @@ Transform:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 68076400}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 45.84, y: 46.05, z: 10}
|
||||
m_LocalPosition: {x: 45.84, y: 46.12, z: 10}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 184660453}
|
||||
@ -812,27 +812,6 @@ Animator:
|
||||
m_HasTransformHierarchy: 1
|
||||
m_AllowConstantClipSamplingOptimization: 1
|
||||
m_KeepAnimatorControllerStateOnDisable: 0
|
||||
--- !u!50 &68076405
|
||||
Rigidbody2D:
|
||||
serializedVersion: 4
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 68076400}
|
||||
m_BodyType: 1
|
||||
m_Simulated: 1
|
||||
m_UseFullKinematicContacts: 0
|
||||
m_UseAutoMass: 0
|
||||
m_Mass: 1
|
||||
m_LinearDrag: 0
|
||||
m_AngularDrag: 0.05
|
||||
m_GravityScale: 1
|
||||
m_Material: {fileID: 0}
|
||||
m_Interpolate: 0
|
||||
m_SleepingMode: 1
|
||||
m_CollisionDetection: 0
|
||||
m_Constraints: 4
|
||||
--- !u!61 &68076406
|
||||
BoxCollider2D:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -877,7 +856,7 @@ MonoBehaviour:
|
||||
health: 0
|
||||
baseAttack: 2
|
||||
target: {fileID: 0}
|
||||
chaseRadius: 5
|
||||
chaseRadius: 9.99
|
||||
attackRadius: 0.5
|
||||
homePosition: {fileID: 1928316356}
|
||||
speed: 0
|
||||
@ -898,6 +877,27 @@ MonoBehaviour:
|
||||
isKilled2: 0
|
||||
isPanelEnabled: 1
|
||||
expValue: 20
|
||||
agent: {fileID: 68076408}
|
||||
--- !u!114 &68076408
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 68076400}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: d622984048644f87804ad1a3f20aa23a, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
speed: 1.2
|
||||
currentPosition:
|
||||
GCost: 0
|
||||
hCost: 0
|
||||
walkable: 0
|
||||
worldPosition: {x: 0, y: 0, z: 0}
|
||||
gridPosition: {x: 0, y: 0}
|
||||
path: []
|
||||
--- !u!1 &84519187
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -1786,6 +1786,7 @@ GameObject:
|
||||
- component: {fileID: 242009513}
|
||||
- component: {fileID: 242009516}
|
||||
- component: {fileID: 242009515}
|
||||
- component: {fileID: 242009517}
|
||||
- component: {fileID: 242009514}
|
||||
m_Layer: 0
|
||||
m_Name: Bat_0
|
||||
@ -1893,13 +1894,14 @@ MonoBehaviour:
|
||||
moveSpeed: 4
|
||||
enemyName: bat0
|
||||
maxHealth: {fileID: 11400000, guid: 1a234827b90bfc24da563fbd5ffb412a, type: 2}
|
||||
health: 0
|
||||
health: 1
|
||||
baseAttack: 1
|
||||
path:
|
||||
- {fileID: 1474164377}
|
||||
- {fileID: 2105401425}
|
||||
currentPoint: 0
|
||||
currentGoal: {fileID: 0}
|
||||
agent: {fileID: 242009517}
|
||||
target: {fileID: 0}
|
||||
chaseRadius: 6
|
||||
attackRadius: 0.55
|
||||
@ -1962,6 +1964,26 @@ BoxCollider2D:
|
||||
serializedVersion: 2
|
||||
m_Size: {x: 0.9375782, y: 0.6254711}
|
||||
m_EdgeRadius: 0
|
||||
--- !u!114 &242009517
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 242009510}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: d622984048644f87804ad1a3f20aa23a, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
speed: 0.5
|
||||
currentPosition:
|
||||
GCost: 0
|
||||
hCost: 0
|
||||
walkable: 0
|
||||
worldPosition: {x: 0, y: 0, z: 0}
|
||||
gridPosition: {x: 0, y: 0}
|
||||
path: []
|
||||
--- !u!1 &246924466
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -26054,8 +26076,8 @@ GameObject:
|
||||
- component: {fileID: 641696207}
|
||||
- component: {fileID: 641696206}
|
||||
- component: {fileID: 641696205}
|
||||
- component: {fileID: 641696204}
|
||||
- component: {fileID: 641696208}
|
||||
- component: {fileID: 641696203}
|
||||
m_Layer: 0
|
||||
m_Name: Slime_0
|
||||
m_TagString: Enemy
|
||||
@ -26077,27 +26099,26 @@ Transform:
|
||||
m_Father: {fileID: 184660453}
|
||||
m_RootOrder: 7
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!50 &641696204
|
||||
Rigidbody2D:
|
||||
serializedVersion: 4
|
||||
--- !u!114 &641696203
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 641696201}
|
||||
m_BodyType: 1
|
||||
m_Simulated: 1
|
||||
m_UseFullKinematicContacts: 0
|
||||
m_UseAutoMass: 0
|
||||
m_Mass: 1
|
||||
m_LinearDrag: 0
|
||||
m_AngularDrag: 0.05
|
||||
m_GravityScale: 1
|
||||
m_Material: {fileID: 0}
|
||||
m_Interpolate: 0
|
||||
m_SleepingMode: 1
|
||||
m_CollisionDetection: 0
|
||||
m_Constraints: 4
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: d622984048644f87804ad1a3f20aa23a, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
speed: 2
|
||||
currentPosition:
|
||||
GCost: 0
|
||||
hCost: 0
|
||||
walkable: 0
|
||||
worldPosition: {x: 0, y: 0, z: 0}
|
||||
gridPosition: {x: 0, y: 0}
|
||||
path: []
|
||||
--- !u!61 &641696205
|
||||
BoxCollider2D:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -26206,7 +26227,7 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 88d05133b4682194e90a88b0f3c16b70, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
moveSpeed: 2
|
||||
moveSpeed: 1.5
|
||||
enemyName: slime0
|
||||
maxHealth: {fileID: 11400000, guid: 1a234827b90bfc24da563fbd5ffb412a, type: 2}
|
||||
health: 0
|
||||
@ -26233,6 +26254,7 @@ MonoBehaviour:
|
||||
isKilled2: 0
|
||||
isPanelEnabled: 1
|
||||
expValue: 2
|
||||
agent: {fileID: 641696203}
|
||||
--- !u!1 &652174079
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -26349,9 +26371,9 @@ GameObject:
|
||||
- component: {fileID: 682072030}
|
||||
- component: {fileID: 682072035}
|
||||
- component: {fileID: 682072034}
|
||||
- component: {fileID: 682072033}
|
||||
- component: {fileID: 682072032}
|
||||
- component: {fileID: 682072036}
|
||||
- component: {fileID: 682072031}
|
||||
m_Layer: 0
|
||||
m_Name: Slime_1
|
||||
m_TagString: Enemy
|
||||
@ -26373,6 +26395,26 @@ Transform:
|
||||
m_Father: {fileID: 184660453}
|
||||
m_RootOrder: 9
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &682072031
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 682072029}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: d622984048644f87804ad1a3f20aa23a, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
speed: 2
|
||||
currentPosition:
|
||||
GCost: 0
|
||||
hCost: 0
|
||||
walkable: 0
|
||||
worldPosition: {x: 0, y: 0, z: 0}
|
||||
gridPosition: {x: 0, y: 0}
|
||||
path: []
|
||||
--- !u!95 &682072032
|
||||
Animator:
|
||||
serializedVersion: 3
|
||||
@ -26392,27 +26434,6 @@ Animator:
|
||||
m_HasTransformHierarchy: 1
|
||||
m_AllowConstantClipSamplingOptimization: 1
|
||||
m_KeepAnimatorControllerStateOnDisable: 0
|
||||
--- !u!50 &682072033
|
||||
Rigidbody2D:
|
||||
serializedVersion: 4
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 682072029}
|
||||
m_BodyType: 1
|
||||
m_Simulated: 1
|
||||
m_UseFullKinematicContacts: 0
|
||||
m_UseAutoMass: 0
|
||||
m_Mass: 1
|
||||
m_LinearDrag: 0
|
||||
m_AngularDrag: 0.05
|
||||
m_GravityScale: 1
|
||||
m_Material: {fileID: 0}
|
||||
m_Interpolate: 0
|
||||
m_SleepingMode: 1
|
||||
m_CollisionDetection: 0
|
||||
m_Constraints: 0
|
||||
--- !u!61 &682072034
|
||||
BoxCollider2D:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -26502,13 +26523,13 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 88d05133b4682194e90a88b0f3c16b70, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
moveSpeed: 1.2
|
||||
moveSpeed: 1.5
|
||||
enemyName: slime1
|
||||
maxHealth: {fileID: 11400000, guid: 1a234827b90bfc24da563fbd5ffb412a, type: 2}
|
||||
health: 0
|
||||
baseAttack: 0.5
|
||||
target: {fileID: 0}
|
||||
chaseRadius: 8
|
||||
chaseRadius: 6
|
||||
attackRadius: 0.5
|
||||
homePosition: {fileID: 1143151251}
|
||||
speed: 0
|
||||
@ -26529,6 +26550,7 @@ MonoBehaviour:
|
||||
isKilled2: 0
|
||||
isPanelEnabled: 1
|
||||
expValue: 2
|
||||
agent: {fileID: 682072031}
|
||||
--- !u!1 &683424791
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -134581,3 +134603,64 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: f284f94fc82ae2b48a2fed669d33ff24, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!1001 &3079617782338157703
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
m_TransformParent: {fileID: 0}
|
||||
m_Modifications:
|
||||
- target: {fileID: 3079617781123838016, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: GridManager
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_RootOrder
|
||||
value: 23
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838031, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: tilemap
|
||||
value:
|
||||
objectReference: {fileID: 1644923233}
|
||||
m_RemovedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
|
@ -24083,6 +24083,67 @@ CanvasRenderer:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 498142310}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!1001 &501058413
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
m_TransformParent: {fileID: 0}
|
||||
m_Modifications:
|
||||
- target: {fileID: 3079617781123838016, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: GridManager
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_RootOrder
|
||||
value: 12
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_LocalRotation.w
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_LocalRotation.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_LocalRotation.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_LocalRotation.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838030, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3079617781123838031, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
propertyPath: tilemap
|
||||
value:
|
||||
objectReference: {fileID: 123966189}
|
||||
m_RemovedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: 6b44df46620f48f41903e7858379f704, type: 3}
|
||||
--- !u!1 &505800829
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -24453,6 +24514,7 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
mainCh: {fileID: 0}
|
||||
maxHealth: {fileID: 0}
|
||||
--- !u!114 &579432195
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
|
@ -95,7 +95,13 @@ public class FollowingEnemy : Enemy
|
||||
anim.SetFloat("Yinfo", dir.y);
|
||||
}
|
||||
}
|
||||
CheckDistance();
|
||||
|
||||
|
||||
if (CheckDistance())
|
||||
{
|
||||
MoveCharacter();
|
||||
}
|
||||
//CheckDistance();
|
||||
//StartCoroutine(Timer());
|
||||
|
||||
//Code below is for dealing damage to player
|
||||
@ -136,33 +142,44 @@ public class FollowingEnemy : Enemy
|
||||
PlayerPrefs.SetInt(enemyName, isKilled);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void FixedUpdate()
|
||||
{
|
||||
if (Physics2D.OverlapCircle(transform.position, chaseRadius, whatisplayer))
|
||||
/*if (Physics2D.OverlapCircle(transform.position, chaseRadius, whatisplayer))
|
||||
{
|
||||
MoveCharacter(movement);
|
||||
MoveCharacter();
|
||||
}
|
||||
if (Physics2D.OverlapCircle(transform.position, attackRadius, whatisplayer))
|
||||
{
|
||||
rb.velocity = Vector2.zero;
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
private void MoveCharacter(Vector2 dir)
|
||||
public AStarPathfindingAgent agent;
|
||||
private void MoveCharacter()
|
||||
{
|
||||
rb.MovePosition((Vector2)transform.position + (dir * moveSpeed * Time.deltaTime));
|
||||
StopAllCoroutines();
|
||||
//rb.MovePosition((Vector2)transform.position + (dir * moveSpeed * Time.deltaTime));
|
||||
agent.FindPath();
|
||||
StartCoroutine(agent.FollowPath());
|
||||
}
|
||||
void CheckDistance()
|
||||
bool CheckDistance()
|
||||
{
|
||||
if(Vector2.Distance(target.position, transform.position) <= chaseRadius && Vector2.Distance(target.position, transform.position) > attackRadius)
|
||||
{
|
||||
transform.position = Vector2.MoveTowards(transform.position, target.position, moveSpeed * Time.deltaTime);
|
||||
//transform.position = Vector2.MoveTowards(transform.position, target.position, moveSpeed * Time.deltaTime);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
private void OnDrawGizmos()
|
||||
{
|
||||
Gizmos.color = Color.magenta;
|
||||
Gizmos.DrawWireSphere(transform.position,chaseRadius);
|
||||
}
|
||||
|
||||
void OnTriggerEnter2D(Collider2D collision)
|
||||
{
|
||||
///For attacking player
|
||||
|
@ -8,6 +8,8 @@ public class FollowingPatrollingEnemy : Enemy
|
||||
public int currentPoint;
|
||||
public Transform currentGoal;
|
||||
|
||||
public AStarPathfindingAgent agent;
|
||||
|
||||
public Transform target;
|
||||
public float chaseRadius;
|
||||
public float attackRadius;
|
||||
@ -41,6 +43,11 @@ public class FollowingPatrollingEnemy : Enemy
|
||||
public float expValue;
|
||||
|
||||
|
||||
void Awake()
|
||||
{
|
||||
//agent = GetComponent<AStarPathfindingAgent>();
|
||||
}
|
||||
|
||||
// Start is called before the first frame update
|
||||
void Start()
|
||||
{
|
||||
@ -100,7 +107,7 @@ public class FollowingPatrollingEnemy : Enemy
|
||||
TakeDamage(1.0f);
|
||||
hit = false;
|
||||
timerHit = 0f;
|
||||
TakeKnockback();
|
||||
//TakeKnockback();
|
||||
}
|
||||
}
|
||||
if (gameObject.active == false)
|
||||
@ -113,15 +120,23 @@ public class FollowingPatrollingEnemy : Enemy
|
||||
|
||||
void CheckDistance()
|
||||
{
|
||||
StopAllCoroutines();
|
||||
if (Vector2.Distance(target.position, transform.position) <= chaseRadius && Vector2.Distance(target.position, transform.position) > attackRadius)
|
||||
{
|
||||
transform.position = Vector2.MoveTowards(transform.position, target.position, moveSpeed * Time.deltaTime);
|
||||
|
||||
//Debug.Log(agent);
|
||||
agent.FindPath();
|
||||
//transform.position = Vector2.MoveTowards(transform.position, target.position, moveSpeed * Time.deltaTime);
|
||||
StartCoroutine(agent.FollowPath());
|
||||
}
|
||||
else if (Vector2.Distance(target.position, transform.position) > chaseRadius)
|
||||
{
|
||||
|
||||
//Debug.Log(Vector2.Distance(transform.position, path[currentPoint].position));
|
||||
|
||||
if (Vector2.Distance(transform.position, path[currentPoint].position) > roundingDistance)
|
||||
{
|
||||
StopAllCoroutines();
|
||||
transform.position = Vector2.MoveTowards(transform.position, path[currentPoint].position, moveSpeed * Time.deltaTime);
|
||||
}
|
||||
else
|
||||
|
3
Assets/Scripts/Pathfinding.meta
Normal file
3
Assets/Scripts/Pathfinding.meta
Normal file
@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9d16fefbe632463bb4c40d4f9177d6f7
|
||||
timeCreated: 1667773142
|
84
Assets/Scripts/Pathfinding/AStarPathfindingAgent.cs
Normal file
84
Assets/Scripts/Pathfinding/AStarPathfindingAgent.cs
Normal file
@ -0,0 +1,84 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class AStarPathfindingAgent : MonoBehaviour
|
||||
{
|
||||
public float speed = 0.5f;
|
||||
private NodeMap Map;
|
||||
private Pathfinding Pathfinder;
|
||||
public Node currentPosition;
|
||||
|
||||
public List<Node> path;
|
||||
// Start is called before the first frame update
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
Map = FindObjectOfType<NodeMap>();
|
||||
Pathfinder = FindObjectOfType<Pathfinding>();
|
||||
|
||||
}
|
||||
|
||||
void Start()
|
||||
{
|
||||
currentPosition = Map.NodeFromWorldPoint(new Vector2(transform.position.x, transform.position.y));
|
||||
//Debug.Log("current world position:" + currentPosition.worldPosition + " current transform position:" + transform.position);
|
||||
Map.TeleportTo(this.gameObject, currentPosition);
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void FindPath()
|
||||
{
|
||||
Pathfinder.FindPath(transform.position,Pathfinder.Player.position, this);
|
||||
}
|
||||
|
||||
public IEnumerator FollowPath()
|
||||
{
|
||||
int targetIndex = 0;
|
||||
if (path == null || path.Count == 0)
|
||||
{
|
||||
yield break;
|
||||
}
|
||||
|
||||
Vector3 currentWorldPosition;
|
||||
Node currentWaypoint = path[targetIndex];
|
||||
while (true)
|
||||
{
|
||||
currentWorldPosition = transform.position;
|
||||
if (transform.position == currentWaypoint.worldPosition)
|
||||
{
|
||||
targetIndex++;
|
||||
bool reachedPosition = targetIndex >= path.Count;
|
||||
if (reachedPosition)
|
||||
{
|
||||
yield break;
|
||||
}
|
||||
currentWaypoint = path[targetIndex];
|
||||
}
|
||||
|
||||
Vector3 current = transform.position;
|
||||
Vector3 target = currentWaypoint.worldPosition;
|
||||
transform.position = Vector3.MoveTowards(current, target, speed * Time.deltaTime);
|
||||
yield return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void OnDrawGizmos()
|
||||
{
|
||||
Gizmos.color = Color.red;
|
||||
Gizmos.DrawCube(currentPosition.worldPosition, Vector3.one);
|
||||
|
||||
Gizmos.color = Color.black;
|
||||
if (path == null) return;
|
||||
foreach (var n in path)
|
||||
{
|
||||
Gizmos.DrawCube(n.worldPosition, Vector3.one);
|
||||
}
|
||||
}
|
||||
}
|
11
Assets/Scripts/Pathfinding/AStarPathfindingAgent.cs.meta
Normal file
11
Assets/Scripts/Pathfinding/AStarPathfindingAgent.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d622984048644f87804ad1a3f20aa23a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
28
Assets/Scripts/Pathfinding/Node.cs
Normal file
28
Assets/Scripts/Pathfinding/Node.cs
Normal file
@ -0,0 +1,28 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEditor.Build.Content;
|
||||
using UnityEngine;
|
||||
[System.Serializable]
|
||||
public class Node
|
||||
{
|
||||
public int GCost;
|
||||
public int hCost;
|
||||
public Node parent;
|
||||
public bool walkable = false;
|
||||
public int FCost
|
||||
{
|
||||
get
|
||||
{
|
||||
return GCost + hCost;
|
||||
}
|
||||
}
|
||||
|
||||
public Vector3 worldPosition;
|
||||
public Vector2Int gridPosition;
|
||||
|
||||
public Node(Vector2Int _gridPosition, Vector3 _worldPosition)
|
||||
{
|
||||
worldPosition = _worldPosition;
|
||||
gridPosition = _gridPosition;
|
||||
}
|
||||
}
|
11
Assets/Scripts/Pathfinding/Node.cs.meta
Normal file
11
Assets/Scripts/Pathfinding/Node.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0521141e71236bc428e37bca75217219
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
144
Assets/Scripts/Pathfinding/NodeMap.cs
Normal file
144
Assets/Scripts/Pathfinding/NodeMap.cs
Normal file
@ -0,0 +1,144 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Tilemaps;
|
||||
|
||||
public class NodeMap : MonoBehaviour
|
||||
{
|
||||
public Vector2Int mapSize;
|
||||
public Node[,] nodeGrid = new Node[0,0];
|
||||
public float cellSize;
|
||||
public TileData[] TileDatas;
|
||||
public Dictionary<TileBase, TileData> DataFromTiles = new Dictionary<TileBase, TileData>();
|
||||
|
||||
public Tilemap tilemap;
|
||||
// Start is called before the first frame update
|
||||
void Awake()
|
||||
{
|
||||
DataFromTiles = new Dictionary<TileBase, TileData>();
|
||||
foreach (var tileData in TileDatas)
|
||||
{
|
||||
foreach (var tile in tileData.Tiles)
|
||||
{
|
||||
DataFromTiles.Add(tile, tileData);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
CreateNodes();
|
||||
TileCheck();
|
||||
}
|
||||
|
||||
public void TileCheck()
|
||||
{
|
||||
foreach (var n in nodeGrid)
|
||||
{
|
||||
Vector2Int gridPosition = n.gridPosition;
|
||||
|
||||
Vector3Int TileGridPosition = tilemap.WorldToCell(n.worldPosition);
|
||||
TileBase Tile = tilemap.GetTile(TileGridPosition);
|
||||
if (Tile == null) continue;
|
||||
if (!DataFromTiles.ContainsKey(Tile))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
n.walkable = DataFromTiles[Tile].walkable;
|
||||
}
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void TeleportTo(GameObject g, Node node)
|
||||
{
|
||||
g.transform.position = node.worldPosition;
|
||||
}
|
||||
|
||||
public List<Node> GetNeighbours(Node node)
|
||||
{
|
||||
List<Node> neighbours = new List<Node>();
|
||||
|
||||
for (int x = -1; x <= 1; x++)
|
||||
{
|
||||
for (int y = -1; y <= 1; y++)
|
||||
{
|
||||
if (x == 0 && y == 0)
|
||||
continue;
|
||||
|
||||
int checkX = node.gridPosition.x + x;
|
||||
int checkY = node.gridPosition.y + y;
|
||||
|
||||
if (checkX >= 0 && checkX < mapSize.x && checkY >= 0 && checkY < mapSize.y)
|
||||
{
|
||||
Node item = nodeGrid[checkX, checkY];
|
||||
neighbours.Add(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return neighbours;
|
||||
}
|
||||
|
||||
|
||||
public void CreateNodes()
|
||||
{
|
||||
nodeGrid = new Node[mapSize.x, mapSize.y];
|
||||
for (int x = 0; x < nodeGrid.GetLength(0); x++)
|
||||
{
|
||||
for (int y = 0; y < nodeGrid.GetLength(1); y++)
|
||||
{
|
||||
Vector2Int gridPosition = new Vector2Int(x, y);
|
||||
nodeGrid[x, y] = new Node(gridPosition, GetWorldPosition(gridPosition));
|
||||
Vector3Int TileGridPosition = tilemap.WorldToCell(nodeGrid[x,y].worldPosition);
|
||||
TileBase Tile = tilemap.GetTile(TileGridPosition);
|
||||
|
||||
//nodeGrid[x, y].walkable = DataFromTiles[Tile].walkable;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Node NodeFromWorldPoint(Vector2 worldPosition)
|
||||
{
|
||||
float percentX = (worldPosition.x + mapSize.x / 2) / mapSize.x;
|
||||
float percentY = (worldPosition.y + mapSize.y / 2) / mapSize.y;
|
||||
percentX = Mathf.Clamp01(percentX);
|
||||
percentY = Mathf.Clamp01(percentY);
|
||||
|
||||
int x = Mathf.RoundToInt((mapSize.x - 1) * percentX);
|
||||
int y = Mathf.RoundToInt((mapSize.y - 1) * percentY);
|
||||
return nodeGrid[x, y];
|
||||
}
|
||||
|
||||
|
||||
public Vector3 GetWorldPosition(Vector2Int position)
|
||||
{
|
||||
Vector3 worldBottomLeft = transform.position - (Vector3.right * mapSize.x / 2) - (Vector3.up * (mapSize.y/ 2));
|
||||
Vector3 worldPoint = worldBottomLeft + (Vector3.right * position.x) + (Vector3.up * position.y);
|
||||
Vector3 cellSizeOffset = new Vector3(cellSize / 2, cellSize / 2, 0);
|
||||
return worldPoint * cellSize + cellSizeOffset;
|
||||
}
|
||||
|
||||
public bool showIndividualNodes;
|
||||
|
||||
|
||||
public void OnDrawGizmos()
|
||||
{
|
||||
Gizmos.DrawWireCube(transform.position,new Vector3(mapSize.x,mapSize.y,1) * cellSize);
|
||||
if (!showIndividualNodes)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var n in nodeGrid)
|
||||
{
|
||||
Vector3 size = Vector3.one * cellSize;
|
||||
Gizmos.DrawWireCube(n.worldPosition, size);
|
||||
}
|
||||
}
|
||||
}
|
11
Assets/Scripts/Pathfinding/NodeMap.cs.meta
Normal file
11
Assets/Scripts/Pathfinding/NodeMap.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b34c300fab4fcd14c82134577cf22d14
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: -20
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
88
Assets/Scripts/Pathfinding/Pathfinding.cs
Normal file
88
Assets/Scripts/Pathfinding/Pathfinding.cs
Normal file
@ -0,0 +1,88 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class Pathfinding : MonoBehaviour
|
||||
{
|
||||
public Transform Player;
|
||||
|
||||
public NodeMap Map;
|
||||
// Start is called before the first frame update
|
||||
void Start()
|
||||
{
|
||||
Player = FindObjectOfType<Player>().transform;
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void FindPath(Vector3 startPos, Vector3 targetPos, AStarPathfindingAgent _agent) {
|
||||
Node startNode = Map.NodeFromWorldPoint(startPos);
|
||||
Node targetNode = Map.NodeFromWorldPoint(targetPos);
|
||||
|
||||
List<Node> openSet = new List<Node>();
|
||||
HashSet<Node> closedSet = new HashSet<Node>();
|
||||
openSet.Add(startNode);
|
||||
|
||||
while (openSet.Count > 0) {
|
||||
Node node = openSet[0];
|
||||
for (int i = 1; i < openSet.Count; i ++) {
|
||||
if (openSet[i].FCost < node.FCost || openSet[i].FCost == node.FCost) {
|
||||
if (openSet[i].hCost < node.hCost)
|
||||
node = openSet[i];
|
||||
}
|
||||
}
|
||||
|
||||
openSet.Remove(node);
|
||||
closedSet.Add(node);
|
||||
|
||||
if (node == targetNode) {
|
||||
RetracePath(startNode, targetNode, _agent);
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (Node neighbour in Map.GetNeighbours(node)) {
|
||||
if (!neighbour.walkable || closedSet.Contains(neighbour)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
int newCostToNeighbour = node.GCost + GetDistance(node, neighbour);
|
||||
if (newCostToNeighbour < neighbour.GCost || !openSet.Contains(neighbour)) {
|
||||
neighbour.GCost = newCostToNeighbour;
|
||||
neighbour.hCost = GetDistance(neighbour, targetNode);
|
||||
neighbour.parent = node;
|
||||
|
||||
if (!openSet.Contains(neighbour))
|
||||
openSet.Add(neighbour);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int GetDistance(Node nodeA, Node nodeB) {
|
||||
int dstX = Mathf.Abs(nodeA.gridPosition.x - nodeB.gridPosition.x);
|
||||
int dstY = Mathf.Abs(nodeA.gridPosition.y - nodeB.gridPosition.y);
|
||||
|
||||
if (dstX > dstY)
|
||||
return 14*dstY + 10* (dstX-dstY);
|
||||
return 14*dstX + 10 * (dstY-dstX);
|
||||
}
|
||||
|
||||
void RetracePath(Node startNode, Node endNode, AStarPathfindingAgent agent) {
|
||||
List<Node> path = new List<Node>();
|
||||
Node currentNode = endNode;
|
||||
|
||||
while (currentNode != startNode) {
|
||||
path.Add(currentNode);
|
||||
currentNode = currentNode.parent;
|
||||
}
|
||||
path.Reverse();
|
||||
//Debug.Log("I am retracing the path");
|
||||
agent.path = path;
|
||||
|
||||
}
|
||||
|
||||
}
|
11
Assets/Scripts/Pathfinding/Pathfinding.cs.meta
Normal file
11
Assets/Scripts/Pathfinding/Pathfinding.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4770c4f9ef5ba784b823d2d2c2327491
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
14
Assets/Scripts/Pathfinding/TileData.cs
Normal file
14
Assets/Scripts/Pathfinding/TileData.cs
Normal file
@ -0,0 +1,14 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Tilemaps;
|
||||
|
||||
[CreateAssetMenu]
|
||||
public class TileData : ScriptableObject
|
||||
{
|
||||
|
||||
public TileBase[] Tiles;
|
||||
public bool walkable;
|
||||
|
||||
|
||||
}
|
11
Assets/Scripts/Pathfinding/TileData.cs.meta
Normal file
11
Assets/Scripts/Pathfinding/TileData.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9890013e3eb0ea54b90ab8d093688ac6
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
8
Assets/Scripts/Pathfinding/TileData.meta
Normal file
8
Assets/Scripts/Pathfinding/TileData.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 80f0611867a83324c98c57b22ed7b274
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
33
Assets/Scripts/Pathfinding/TileData/Ground.asset
Normal file
33
Assets/Scripts/Pathfinding/TileData/Ground.asset
Normal file
@ -0,0 +1,33 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
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: 9890013e3eb0ea54b90ab8d093688ac6, type: 3}
|
||||
m_Name: Ground
|
||||
m_EditorClassIdentifier:
|
||||
Tiles:
|
||||
- {fileID: 11400000, guid: c356c8564d98e7d4da396830a28289f7, type: 2}
|
||||
- {fileID: 11400000, guid: 5b70fbf89fe74ba4899b6d05830a8340, type: 2}
|
||||
- {fileID: 11400000, guid: 0d3a48c667a39654ba5ef0c86e53bb1d, type: 2}
|
||||
- {fileID: 11400000, guid: 63fde8bc69e9ec549ac1481ddde6a52f, type: 2}
|
||||
- {fileID: 11400000, guid: 83fc998975104da4380b8e609392dc0a, type: 2}
|
||||
- {fileID: 11400000, guid: 12b1acac64313f74aafb538f3c18b705, type: 2}
|
||||
- {fileID: 11400000, guid: bb360b67722585b4b9a15ab0cbff3cae, type: 2}
|
||||
- {fileID: 11400000, guid: 870af010f2a7d464d8b9d826d6658662, type: 2}
|
||||
- {fileID: 11400000, guid: 40a123aa7d753274b92441b3f9069cf3, type: 2}
|
||||
- {fileID: 11400000, guid: 4dd99e02b286cf1498b94c707bebf696, type: 2}
|
||||
- {fileID: 11400000, guid: 92c16677888e99b4ea8ac96cd40e31e3, type: 2}
|
||||
- {fileID: 11400000, guid: e085061ffd4854b469ce233ad8205491, type: 2}
|
||||
- {fileID: 11400000, guid: 6533141eeb4742146b7069a953c24646, type: 2}
|
||||
- {fileID: 11400000, guid: a7c746962c470d046a661e5aa67e370a, type: 2}
|
||||
- {fileID: 11400000, guid: ec8aa2d47c898f84c9cfe58a1386f277, type: 2}
|
||||
- {fileID: 11400000, guid: 4521f3077dadf48439b0b3b4f964a968, type: 2}
|
||||
- {fileID: 11400000, guid: f46af8991a2a97b4f97f1c170a5fc11a, type: 2}
|
||||
walkable: 1
|
8
Assets/Scripts/Pathfinding/TileData/Ground.asset.meta
Normal file
8
Assets/Scripts/Pathfinding/TileData/Ground.asset.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: aaa4610d4271c4c4f870a33c04002ea8
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
68
Assets/Sprites/NPCs/BossThugIdleDown.anim
Normal file
68
Assets/Sprites/NPCs/BossThugIdleDown.anim
Normal file
@ -0,0 +1,68 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!74 &7400000
|
||||
AnimationClip:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: BossThugIdleDown
|
||||
serializedVersion: 6
|
||||
m_Legacy: 0
|
||||
m_Compressed: 0
|
||||
m_UseHighQualityCurve: 1
|
||||
m_RotationCurves: []
|
||||
m_CompressedRotationCurves: []
|
||||
m_EulerCurves: []
|
||||
m_PositionCurves: []
|
||||
m_ScaleCurves: []
|
||||
m_FloatCurves: []
|
||||
m_PPtrCurves:
|
||||
- curve:
|
||||
- time: 0
|
||||
value: {fileID: 5970410323577050059, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
attribute: m_Sprite
|
||||
path:
|
||||
classID: 212
|
||||
script: {fileID: 0}
|
||||
m_SampleRate: 12
|
||||
m_WrapMode: 0
|
||||
m_Bounds:
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Extent: {x: 0, y: 0, z: 0}
|
||||
m_ClipBindingConstant:
|
||||
genericBindings:
|
||||
- serializedVersion: 2
|
||||
path: 0
|
||||
attribute: 0
|
||||
script: {fileID: 0}
|
||||
typeID: 212
|
||||
customType: 23
|
||||
isPPtrCurve: 1
|
||||
pptrCurveMapping:
|
||||
- {fileID: 5970410323577050059, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
m_AnimationClipSettings:
|
||||
serializedVersion: 2
|
||||
m_AdditiveReferencePoseClip: {fileID: 0}
|
||||
m_AdditiveReferencePoseTime: 0
|
||||
m_StartTime: 0
|
||||
m_StopTime: 0.083333336
|
||||
m_OrientationOffsetY: 0
|
||||
m_Level: 0
|
||||
m_CycleOffset: 0
|
||||
m_HasAdditiveReferencePose: 0
|
||||
m_LoopTime: 1
|
||||
m_LoopBlend: 0
|
||||
m_LoopBlendOrientation: 0
|
||||
m_LoopBlendPositionY: 0
|
||||
m_LoopBlendPositionXZ: 0
|
||||
m_KeepOriginalOrientation: 0
|
||||
m_KeepOriginalPositionY: 1
|
||||
m_KeepOriginalPositionXZ: 0
|
||||
m_HeightFromFeet: 0
|
||||
m_Mirror: 0
|
||||
m_EditorCurves: []
|
||||
m_EulerEditorCurves: []
|
||||
m_HasGenericRootTransform: 0
|
||||
m_HasMotionFloatCurves: 0
|
||||
m_Events: []
|
8
Assets/Sprites/NPCs/BossThugIdleDown.anim.meta
Normal file
8
Assets/Sprites/NPCs/BossThugIdleDown.anim.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5766c4d8a8d409242851cf9be801ef7e
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
68
Assets/Sprites/NPCs/BossThugIdleLeft.anim
Normal file
68
Assets/Sprites/NPCs/BossThugIdleLeft.anim
Normal file
@ -0,0 +1,68 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!74 &7400000
|
||||
AnimationClip:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: BossThugIdleLeft
|
||||
serializedVersion: 6
|
||||
m_Legacy: 0
|
||||
m_Compressed: 0
|
||||
m_UseHighQualityCurve: 1
|
||||
m_RotationCurves: []
|
||||
m_CompressedRotationCurves: []
|
||||
m_EulerCurves: []
|
||||
m_PositionCurves: []
|
||||
m_ScaleCurves: []
|
||||
m_FloatCurves: []
|
||||
m_PPtrCurves:
|
||||
- curve:
|
||||
- time: 0
|
||||
value: {fileID: 475361983993561210, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
attribute: m_Sprite
|
||||
path:
|
||||
classID: 212
|
||||
script: {fileID: 0}
|
||||
m_SampleRate: 12
|
||||
m_WrapMode: 0
|
||||
m_Bounds:
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Extent: {x: 0, y: 0, z: 0}
|
||||
m_ClipBindingConstant:
|
||||
genericBindings:
|
||||
- serializedVersion: 2
|
||||
path: 0
|
||||
attribute: 0
|
||||
script: {fileID: 0}
|
||||
typeID: 212
|
||||
customType: 23
|
||||
isPPtrCurve: 1
|
||||
pptrCurveMapping:
|
||||
- {fileID: 475361983993561210, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
m_AnimationClipSettings:
|
||||
serializedVersion: 2
|
||||
m_AdditiveReferencePoseClip: {fileID: 0}
|
||||
m_AdditiveReferencePoseTime: 0
|
||||
m_StartTime: 0
|
||||
m_StopTime: 0.083333336
|
||||
m_OrientationOffsetY: 0
|
||||
m_Level: 0
|
||||
m_CycleOffset: 0
|
||||
m_HasAdditiveReferencePose: 0
|
||||
m_LoopTime: 1
|
||||
m_LoopBlend: 0
|
||||
m_LoopBlendOrientation: 0
|
||||
m_LoopBlendPositionY: 0
|
||||
m_LoopBlendPositionXZ: 0
|
||||
m_KeepOriginalOrientation: 0
|
||||
m_KeepOriginalPositionY: 1
|
||||
m_KeepOriginalPositionXZ: 0
|
||||
m_HeightFromFeet: 0
|
||||
m_Mirror: 0
|
||||
m_EditorCurves: []
|
||||
m_EulerEditorCurves: []
|
||||
m_HasGenericRootTransform: 0
|
||||
m_HasMotionFloatCurves: 0
|
||||
m_Events: []
|
8
Assets/Sprites/NPCs/BossThugIdleLeft.anim.meta
Normal file
8
Assets/Sprites/NPCs/BossThugIdleLeft.anim.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7664525aa3a759646adf08465dfbbc16
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
68
Assets/Sprites/NPCs/BossThugIdleRight.anim
Normal file
68
Assets/Sprites/NPCs/BossThugIdleRight.anim
Normal file
@ -0,0 +1,68 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!74 &7400000
|
||||
AnimationClip:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: BossThugIdleRight
|
||||
serializedVersion: 6
|
||||
m_Legacy: 0
|
||||
m_Compressed: 0
|
||||
m_UseHighQualityCurve: 1
|
||||
m_RotationCurves: []
|
||||
m_CompressedRotationCurves: []
|
||||
m_EulerCurves: []
|
||||
m_PositionCurves: []
|
||||
m_ScaleCurves: []
|
||||
m_FloatCurves: []
|
||||
m_PPtrCurves:
|
||||
- curve:
|
||||
- time: 0
|
||||
value: {fileID: 7639942379048000754, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
attribute: m_Sprite
|
||||
path:
|
||||
classID: 212
|
||||
script: {fileID: 0}
|
||||
m_SampleRate: 12
|
||||
m_WrapMode: 0
|
||||
m_Bounds:
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Extent: {x: 0, y: 0, z: 0}
|
||||
m_ClipBindingConstant:
|
||||
genericBindings:
|
||||
- serializedVersion: 2
|
||||
path: 0
|
||||
attribute: 0
|
||||
script: {fileID: 0}
|
||||
typeID: 212
|
||||
customType: 23
|
||||
isPPtrCurve: 1
|
||||
pptrCurveMapping:
|
||||
- {fileID: 7639942379048000754, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
m_AnimationClipSettings:
|
||||
serializedVersion: 2
|
||||
m_AdditiveReferencePoseClip: {fileID: 0}
|
||||
m_AdditiveReferencePoseTime: 0
|
||||
m_StartTime: 0
|
||||
m_StopTime: 0.083333336
|
||||
m_OrientationOffsetY: 0
|
||||
m_Level: 0
|
||||
m_CycleOffset: 0
|
||||
m_HasAdditiveReferencePose: 0
|
||||
m_LoopTime: 1
|
||||
m_LoopBlend: 0
|
||||
m_LoopBlendOrientation: 0
|
||||
m_LoopBlendPositionY: 0
|
||||
m_LoopBlendPositionXZ: 0
|
||||
m_KeepOriginalOrientation: 0
|
||||
m_KeepOriginalPositionY: 1
|
||||
m_KeepOriginalPositionXZ: 0
|
||||
m_HeightFromFeet: 0
|
||||
m_Mirror: 0
|
||||
m_EditorCurves: []
|
||||
m_EulerEditorCurves: []
|
||||
m_HasGenericRootTransform: 0
|
||||
m_HasMotionFloatCurves: 0
|
||||
m_Events: []
|
8
Assets/Sprites/NPCs/BossThugIdleRight.anim.meta
Normal file
8
Assets/Sprites/NPCs/BossThugIdleRight.anim.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 13b78ec291fa07f4d937de40ec122acc
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
68
Assets/Sprites/NPCs/BossThugIdleUp.anim
Normal file
68
Assets/Sprites/NPCs/BossThugIdleUp.anim
Normal file
@ -0,0 +1,68 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!74 &7400000
|
||||
AnimationClip:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: BossThugIdleUp
|
||||
serializedVersion: 6
|
||||
m_Legacy: 0
|
||||
m_Compressed: 0
|
||||
m_UseHighQualityCurve: 1
|
||||
m_RotationCurves: []
|
||||
m_CompressedRotationCurves: []
|
||||
m_EulerCurves: []
|
||||
m_PositionCurves: []
|
||||
m_ScaleCurves: []
|
||||
m_FloatCurves: []
|
||||
m_PPtrCurves:
|
||||
- curve:
|
||||
- time: 0
|
||||
value: {fileID: -4449130184925231056, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
attribute: m_Sprite
|
||||
path:
|
||||
classID: 212
|
||||
script: {fileID: 0}
|
||||
m_SampleRate: 12
|
||||
m_WrapMode: 0
|
||||
m_Bounds:
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Extent: {x: 0, y: 0, z: 0}
|
||||
m_ClipBindingConstant:
|
||||
genericBindings:
|
||||
- serializedVersion: 2
|
||||
path: 0
|
||||
attribute: 0
|
||||
script: {fileID: 0}
|
||||
typeID: 212
|
||||
customType: 23
|
||||
isPPtrCurve: 1
|
||||
pptrCurveMapping:
|
||||
- {fileID: -4449130184925231056, guid: 784e15dc3223c6342bbbc79cb202ad71, type: 3}
|
||||
m_AnimationClipSettings:
|
||||
serializedVersion: 2
|
||||
m_AdditiveReferencePoseClip: {fileID: 0}
|
||||
m_AdditiveReferencePoseTime: 0
|
||||
m_StartTime: 0
|
||||
m_StopTime: 0.083333336
|
||||
m_OrientationOffsetY: 0
|
||||
m_Level: 0
|
||||
m_CycleOffset: 0
|
||||
m_HasAdditiveReferencePose: 0
|
||||
m_LoopTime: 1
|
||||
m_LoopBlend: 0
|
||||
m_LoopBlendOrientation: 0
|
||||
m_LoopBlendPositionY: 0
|
||||
m_LoopBlendPositionXZ: 0
|
||||
m_KeepOriginalOrientation: 0
|
||||
m_KeepOriginalPositionY: 1
|
||||
m_KeepOriginalPositionXZ: 0
|
||||
m_HeightFromFeet: 0
|
||||
m_Mirror: 0
|
||||
m_EditorCurves: []
|
||||
m_EulerEditorCurves: []
|
||||
m_HasGenericRootTransform: 0
|
||||
m_HasMotionFloatCurves: 0
|
||||
m_Events: []
|
8
Assets/Sprites/NPCs/BossThugIdleUp.anim.meta
Normal file
8
Assets/Sprites/NPCs/BossThugIdleUp.anim.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1026f6b01b7e14c45b8ea2e9fc0e69de
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 7400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
([{〔〈《「『【〘〖〝‘“⦅«$—…‥〳〴〵\[({£¥"々〇$¥₩ #
|
||||
([{〔〈《「『【〘〖〝‘“⦅«$—…‥〳〴〵\[({£¥"々〇〉》」$⦆¥₩ #
|
@ -25,7 +25,6 @@ Material:
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Floats:
|
||||
- _ColorMask: 15
|
||||
- _CullMode: 0
|
||||
- _Stencil: 0
|
||||
- _StencilComp: 8
|
||||
- _StencilOp: 0
|
||||
@ -51,26 +50,6 @@ MonoBehaviour:
|
||||
material: {fileID: 2103686}
|
||||
materialHashCode: 0
|
||||
m_Version: 1.1.0
|
||||
m_FaceInfo:
|
||||
m_FamilyName:
|
||||
m_StyleName:
|
||||
m_PointSize: 0
|
||||
m_Scale: 0
|
||||
m_LineHeight: 0
|
||||
m_AscentLine: 0
|
||||
m_CapLine: 0
|
||||
m_MeanLine: 0
|
||||
m_Baseline: 0
|
||||
m_DescentLine: 0
|
||||
m_SuperscriptOffset: 0
|
||||
m_SuperscriptSize: 0
|
||||
m_SubscriptOffset: 0
|
||||
m_SubscriptSize: 0
|
||||
m_UnderlineOffset: 0
|
||||
m_UnderlineThickness: 0
|
||||
m_StrikethroughOffset: 0
|
||||
m_StrikethroughThickness: 0
|
||||
m_TabWidth: 0
|
||||
spriteSheet: {fileID: 2800000, guid: dffef66376be4fa480fb02b19edbe903, type: 3}
|
||||
m_SpriteCharacterTable:
|
||||
- m_ElementType: 2
|
||||
@ -146,11 +125,11 @@ MonoBehaviour:
|
||||
m_Name: 1f609
|
||||
m_HashCode: 57188264
|
||||
- m_ElementType: 2
|
||||
m_Unicode: 0
|
||||
m_Unicode: 128536
|
||||
m_GlyphIndex: 12
|
||||
m_Scale: 1
|
||||
m_Name: .notdef
|
||||
m_HashCode: -600915428
|
||||
m_Name: 1f618
|
||||
m_HashCode: 57188168
|
||||
- m_ElementType: 2
|
||||
m_Unicode: 129315
|
||||
m_GlyphIndex: 13
|
||||
|
@ -20,7 +20,7 @@ MonoBehaviour:
|
||||
m_EnableRaycastTarget: 1
|
||||
m_GetFontFeaturesAtRuntime: 1
|
||||
m_missingGlyphCharacter: 0
|
||||
m_warningsDisabled: 0
|
||||
m_warningsDisabled: 1
|
||||
m_defaultFontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_defaultFontAssetPath: Fonts & Materials/
|
||||
m_defaultFontSize: 36
|
||||
@ -34,13 +34,10 @@ MonoBehaviour:
|
||||
m_defaultSpriteAsset: {fileID: 11400000, guid: c41005c129ba4d66911b75229fd70b45,
|
||||
type: 2}
|
||||
m_defaultSpriteAssetPath: Sprite Assets/
|
||||
m_enableEmojiSupport: 1
|
||||
m_MissingCharacterSpriteUnicode: 0
|
||||
m_defaultColorGradientPresetsPath: Color Gradient Presets/
|
||||
m_enableEmojiSupport: 1
|
||||
m_defaultStyleSheet: {fileID: 11400000, guid: f952c082cb03451daed3ee968ac6c63e,
|
||||
type: 2}
|
||||
m_StyleSheetsResourcePath:
|
||||
m_leadingCharacters: {fileID: 4900000, guid: d82c1b31c7e74239bff1220585707d2b, type: 3}
|
||||
m_followingCharacters: {fileID: 4900000, guid: fade42e8bc714b018fac513c043d323b,
|
||||
type: 3}
|
||||
m_UseModernHangulLineBreakingRules: 0
|
||||
|
@ -3,7 +3,7 @@ Shader "TextMeshPro/Bitmap Custom Atlas" {
|
||||
Properties {
|
||||
_MainTex ("Font Atlas", 2D) = "white" {}
|
||||
_FaceTex ("Font Texture", 2D) = "white" {}
|
||||
[HDR]_FaceColor ("Text Color", Color) = (1,1,1,1)
|
||||
_FaceColor ("Text Color", Color) = (1,1,1,1)
|
||||
|
||||
_VertexOffsetX ("Vertex OffsetX", float) = 0
|
||||
_VertexOffsetY ("Vertex OffsetY", float) = 0
|
||||
@ -19,14 +19,13 @@ Properties {
|
||||
_StencilWriteMask("Stencil Write Mask", Float) = 255
|
||||
_StencilReadMask("Stencil Read Mask", Float) = 255
|
||||
|
||||
_CullMode("Cull Mode", Float) = 0
|
||||
_ColorMask("Color Mask", Float) = 15
|
||||
}
|
||||
|
||||
SubShader{
|
||||
|
||||
Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" }
|
||||
|
||||
|
||||
Stencil
|
||||
{
|
||||
Ref[_Stencil]
|
||||
@ -35,8 +34,8 @@ SubShader{
|
||||
ReadMask[_StencilReadMask]
|
||||
WriteMask[_StencilWriteMask]
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Lighting Off
|
||||
Cull [_CullMode]
|
||||
ZTest [unity_GUIZTestMode]
|
||||
@ -115,7 +114,7 @@ SubShader{
|
||||
// Clamp _ClipRect to 16bit.
|
||||
float4 clampedRect = clamp(_ClipRect, -2e10, 2e10);
|
||||
OUT.mask = float4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy));
|
||||
|
||||
|
||||
return OUT;
|
||||
}
|
||||
|
||||
|
@ -1,9 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 48bb5f55d8670e349b6e614913f9d910
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures: []
|
||||
nonModifiableTextures: []
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
@ -2,7 +2,7 @@ Shader "TextMeshPro/Mobile/Bitmap" {
|
||||
|
||||
Properties {
|
||||
_MainTex ("Font Atlas", 2D) = "white" {}
|
||||
[HDR]_Color ("Text Color", Color) = (1,1,1,1)
|
||||
_Color ("Text Color", Color) = (1,1,1,1)
|
||||
_DiffusePower ("Diffuse Power", Range(1.0,4.0)) = 1.0
|
||||
|
||||
_VertexOffsetX("Vertex OffsetX", float) = 0
|
||||
@ -18,7 +18,6 @@ Properties {
|
||||
_StencilWriteMask("Stencil Write Mask", Float) = 255
|
||||
_StencilReadMask("Stencil Read Mask", Float) = 255
|
||||
|
||||
_CullMode("Cull Mode", Float) = 0
|
||||
_ColorMask("Color Mask", Float) = 15
|
||||
}
|
||||
|
||||
@ -37,7 +36,7 @@ SubShader {
|
||||
|
||||
|
||||
Lighting Off
|
||||
Cull [_CullMode]
|
||||
Cull Off
|
||||
ZTest [unity_GUIZTestMode]
|
||||
ZWrite Off
|
||||
Fog { Mode Off }
|
||||
@ -114,11 +113,11 @@ SubShader {
|
||||
half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(IN.mask.xy)) * IN.mask.zw);
|
||||
color *= m.x * m.y;
|
||||
#endif
|
||||
|
||||
|
||||
#if UNITY_UI_ALPHACLIP
|
||||
clip(color.a - 0.001);
|
||||
#endif
|
||||
|
||||
|
||||
return color;
|
||||
}
|
||||
ENDCG
|
||||
|
@ -1,9 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1e3b057af24249748ff873be7fafee47
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures: []
|
||||
nonModifiableTextures: []
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
@ -3,7 +3,7 @@ Shader "TextMeshPro/Bitmap" {
|
||||
Properties {
|
||||
_MainTex ("Font Atlas", 2D) = "white" {}
|
||||
_FaceTex ("Font Texture", 2D) = "white" {}
|
||||
[HDR]_FaceColor ("Text Color", Color) = (1,1,1,1)
|
||||
_FaceColor ("Text Color", Color) = (1,1,1,1)
|
||||
|
||||
_VertexOffsetX ("Vertex OffsetX", float) = 0
|
||||
_VertexOffsetY ("Vertex OffsetY", float) = 0
|
||||
@ -18,14 +18,13 @@ Properties {
|
||||
_StencilWriteMask("Stencil Write Mask", Float) = 255
|
||||
_StencilReadMask("Stencil Read Mask", Float) = 255
|
||||
|
||||
_CullMode("Cull Mode", Float) = 0
|
||||
_ColorMask("Color Mask", Float) = 15
|
||||
}
|
||||
|
||||
SubShader{
|
||||
|
||||
Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" }
|
||||
|
||||
|
||||
Stencil
|
||||
{
|
||||
Ref[_Stencil]
|
||||
@ -34,8 +33,8 @@ SubShader{
|
||||
ReadMask[_StencilReadMask]
|
||||
WriteMask[_StencilWriteMask]
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Lighting Off
|
||||
Cull [_CullMode]
|
||||
ZTest [unity_GUIZTestMode]
|
||||
@ -114,7 +113,7 @@ SubShader{
|
||||
// Clamp _ClipRect to 16bit.
|
||||
float4 clampedRect = clamp(_ClipRect, -2e10, 2e10);
|
||||
OUT.mask = float4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy));
|
||||
|
||||
|
||||
return OUT;
|
||||
}
|
||||
|
||||
|
@ -1,9 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 128e987d567d4e2c824d754223b3f3b0
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures: []
|
||||
nonModifiableTextures: []
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
@ -4,10 +4,10 @@ Properties {
|
||||
_FaceTex ("Face Texture", 2D) = "white" {}
|
||||
_FaceUVSpeedX ("Face UV Speed X", Range(-5, 5)) = 0.0
|
||||
_FaceUVSpeedY ("Face UV Speed Y", Range(-5, 5)) = 0.0
|
||||
[HDR]_FaceColor ("Face Color", Color) = (1,1,1,1)
|
||||
_FaceColor ("Face Color", Color) = (1,1,1,1)
|
||||
_FaceDilate ("Face Dilate", Range(-1,1)) = 0
|
||||
|
||||
[HDR]_OutlineColor ("Outline Color", Color) = (0,0,0,1)
|
||||
_OutlineColor ("Outline Color", Color) = (0,0,0,1)
|
||||
_OutlineTex ("Outline Texture", 2D) = "white" {}
|
||||
_OutlineUVSpeedX ("Outline UV Speed X", Range(-5, 5)) = 0.0
|
||||
_OutlineUVSpeedY ("Outline UV Speed Y", Range(-5, 5)) = 0.0
|
||||
@ -21,7 +21,7 @@ Properties {
|
||||
_BevelRoundness ("Bevel Roundness", Range(0,1)) = 0
|
||||
|
||||
_LightAngle ("Light Angle", Range(0.0, 6.2831853)) = 3.1416
|
||||
[HDR]_SpecularColor ("Specular", Color) = (1,1,1,1)
|
||||
_SpecularColor ("Specular", Color) = (1,1,1,1)
|
||||
_SpecularPower ("Specular", Range(0,4)) = 2.0
|
||||
_Reflectivity ("Reflectivity", Range(5.0,15.0)) = 10
|
||||
_Diffuse ("Diffuse", Range(0,1)) = 0.5
|
||||
@ -35,15 +35,15 @@ Properties {
|
||||
_ReflectOutlineColor("Reflection Color", Color) = (0,0,0,1)
|
||||
_Cube ("Reflection Cubemap", Cube) = "black" { /* TexGen CubeReflect */ }
|
||||
_EnvMatrixRotation ("Texture Rotation", vector) = (0, 0, 0, 0)
|
||||
|
||||
|
||||
|
||||
[HDR]_UnderlayColor ("Border Color", Color) = (0,0,0, 0.5)
|
||||
_UnderlayColor ("Border Color", Color) = (0,0,0, 0.5)
|
||||
_UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0
|
||||
_UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0
|
||||
_UnderlayDilate ("Border Dilate", Range(-1,1)) = 0
|
||||
_UnderlaySoftness ("Border Softness", Range(0,1)) = 0
|
||||
|
||||
[HDR]_GlowColor ("Color", Color) = (0, 1, 0, 0.5)
|
||||
_GlowColor ("Color", Color) = (0, 1, 0, 0.5)
|
||||
_GlowOffset ("Offset", Range(-1,1)) = 0
|
||||
_GlowInner ("Inner", Range(0,1)) = 0.05
|
||||
_GlowOuter ("Outer", Range(0,1)) = 0.05
|
||||
@ -68,7 +68,7 @@ Properties {
|
||||
|
||||
_VertexOffsetX ("Vertex OffsetX", float) = 0
|
||||
_VertexOffsetY ("Vertex OffsetY", float) = 0
|
||||
|
||||
|
||||
_MaskCoord ("Mask Coordinates", vector) = (0, 0, 32767, 32767)
|
||||
_ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767)
|
||||
_MaskSoftnessX ("Mask SoftnessX", float) = 0
|
||||
@ -80,7 +80,6 @@ Properties {
|
||||
_StencilWriteMask ("Stencil Write Mask", Float) = 255
|
||||
_StencilReadMask ("Stencil Read Mask", Float) = 255
|
||||
|
||||
_CullMode ("Cull Mode", Float) = 0
|
||||
_ColorMask ("Color Mask", Float) = 15
|
||||
}
|
||||
|
||||
@ -97,7 +96,7 @@ SubShader {
|
||||
{
|
||||
Ref [_Stencil]
|
||||
Comp [_StencilComp]
|
||||
Pass [_StencilOp]
|
||||
Pass [_StencilOp]
|
||||
ReadMask [_StencilReadMask]
|
||||
WriteMask [_StencilWriteMask]
|
||||
}
|
||||
@ -146,7 +145,7 @@ SubShader {
|
||||
float4 param : TEXCOORD1; // alphaClip, scale, bias, weight
|
||||
float4 mask : TEXCOORD2; // Position in object space(xy), pixel Size(zw)
|
||||
float3 viewDir : TEXCOORD3;
|
||||
|
||||
|
||||
#if (UNDERLAY_ON || UNDERLAY_INNER)
|
||||
float4 texcoord2 : TEXCOORD4; // u,v, scale, bias
|
||||
fixed4 underlayColor : COLOR1;
|
||||
@ -187,7 +186,7 @@ SubShader {
|
||||
float bias =(.5 - weight) + (.5 / scale);
|
||||
|
||||
float alphaClip = (1.0 - _OutlineWidth*_ScaleRatioA - _OutlineSoftness*_ScaleRatioA);
|
||||
|
||||
|
||||
#if GLOW_ON
|
||||
alphaClip = min(alphaClip, 1.0 - _GlowOffset * _ScaleRatioB - _GlowOuter * _ScaleRatioB);
|
||||
#endif
|
||||
@ -216,7 +215,7 @@ SubShader {
|
||||
float2 faceUV = TRANSFORM_TEX(textureUV, _FaceTex);
|
||||
float2 outlineUV = TRANSFORM_TEX(textureUV, _OutlineTex);
|
||||
|
||||
|
||||
|
||||
output.position = vPosition;
|
||||
output.color = input.color;
|
||||
output.atlas = input.texcoord0;
|
||||
@ -238,7 +237,7 @@ SubShader {
|
||||
UNITY_SETUP_INSTANCE_ID(input);
|
||||
|
||||
float c = tex2D(_MainTex, input.atlas).a;
|
||||
|
||||
|
||||
#ifndef UNDERLAY_ON
|
||||
clip(c - input.param.x);
|
||||
#endif
|
||||
@ -255,7 +254,7 @@ SubShader {
|
||||
half4 outlineColor = _OutlineColor;
|
||||
|
||||
faceColor.rgb *= input.color.rgb;
|
||||
|
||||
|
||||
faceColor *= tex2D(_FaceTex, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y);
|
||||
outlineColor *= tex2D(_OutlineTex, input.textures.zw + float2(_OutlineUVSpeedX, _OutlineUVSpeedY) * _Time.y);
|
||||
|
||||
@ -304,7 +303,7 @@ SubShader {
|
||||
#if UNITY_UI_ALPHACLIP
|
||||
clip(faceColor.a - 0.001);
|
||||
#endif
|
||||
|
||||
|
||||
return faceColor * input.color.a;
|
||||
}
|
||||
|
||||
|
@ -1,9 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dd89cf5b9246416f84610a006f916af7
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures: []
|
||||
nonModifiableTextures: []
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
@ -1,4 +1,4 @@
|
||||
// Simplified SDF shader:
|
||||
// Simplified SDF shader:
|
||||
// - No Shading Option (bevel / bump / env map)
|
||||
// - No Glow Option
|
||||
// - Softness is applied on both side of the outline
|
||||
@ -6,14 +6,14 @@
|
||||
Shader "TextMeshPro/Mobile/Distance Field - Masking" {
|
||||
|
||||
Properties {
|
||||
[HDR]_FaceColor ("Face Color", Color) = (1,1,1,1)
|
||||
_FaceColor ("Face Color", Color) = (1,1,1,1)
|
||||
_FaceDilate ("Face Dilate", Range(-1,1)) = 0
|
||||
|
||||
[HDR]_OutlineColor ("Outline Color", Color) = (0,0,0,1)
|
||||
_OutlineColor ("Outline Color", Color) = (0,0,0,1)
|
||||
_OutlineWidth ("Outline Thickness", Range(0,1)) = 0
|
||||
_OutlineSoftness ("Outline Softness", Range(0,1)) = 0
|
||||
|
||||
[HDR]_UnderlayColor ("Border Color", Color) = (0,0,0,.5)
|
||||
_UnderlayColor ("Border Color", Color) = (0,0,0,.5)
|
||||
_UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0
|
||||
_UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0
|
||||
_UnderlayDilate ("Border Dilate", Range(-1,1)) = 0
|
||||
@ -47,19 +47,18 @@ Properties {
|
||||
_MaskEdgeColor ("Edge Color", Color) = (1,1,1,1)
|
||||
_MaskEdgeSoftness ("Edge Softness", Range(0, 1)) = 0.01
|
||||
_MaskWipeControl ("Wipe Position", Range(0, 1)) = 0.5
|
||||
|
||||
|
||||
_StencilComp ("Stencil Comparison", Float) = 8
|
||||
_Stencil ("Stencil ID", Float) = 0
|
||||
_StencilOp ("Stencil Operation", Float) = 0
|
||||
_StencilWriteMask ("Stencil Write Mask", Float) = 255
|
||||
_StencilReadMask ("Stencil Read Mask", Float) = 255
|
||||
|
||||
_CullMode ("Cull Mode", Float) = 0
|
||||
|
||||
_ColorMask ("Color Mask", Float) = 15
|
||||
}
|
||||
|
||||
SubShader {
|
||||
Tags
|
||||
Tags
|
||||
{
|
||||
"Queue"="Transparent"
|
||||
"IgnoreProjector"="True"
|
||||
@ -71,7 +70,7 @@ SubShader {
|
||||
{
|
||||
Ref [_Stencil]
|
||||
Comp [_StencilComp]
|
||||
Pass [_StencilOp]
|
||||
Pass [_StencilOp]
|
||||
ReadMask [_StencilReadMask]
|
||||
WriteMask [_StencilWriteMask]
|
||||
}
|
||||
@ -136,7 +135,7 @@ SubShader {
|
||||
|
||||
float2 pixelSize = vPosition.w;
|
||||
pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy));
|
||||
|
||||
|
||||
float scale = rsqrt(dot(pixelSize, pixelSize));
|
||||
scale *= abs(input.texcoord1.y) * _GradientScale * (_Sharpness + 1);
|
||||
if(UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert)))));
|
||||
@ -218,10 +217,10 @@ SubShader {
|
||||
#endif
|
||||
|
||||
// Alternative implementation to UnityGet2DClipping with support for softness.
|
||||
//#if UNITY_UI_CLIP_RECT
|
||||
#if UNITY_UI_CLIP_RECT
|
||||
half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw);
|
||||
c *= m.x * m.y;
|
||||
//#endif
|
||||
#endif
|
||||
|
||||
float a = abs(_MaskInverse - tex2D(_MaskTex, input.texcoord0.zw).a);
|
||||
float t = a + (1 - _MaskWipeControl) * _MaskEdgeSoftness - _MaskWipeControl;
|
||||
|
@ -1,9 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bc1ede39bf3643ee8e493720e4259791
|
||||
timeCreated: 1463704911
|
||||
licenseType: Pro
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures: []
|
||||
nonModifiableTextures: []
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
@ -6,14 +6,14 @@
|
||||
Shader "TextMeshPro/Mobile/Distance Field Overlay" {
|
||||
|
||||
Properties {
|
||||
[HDR]_FaceColor ("Face Color", Color) = (1,1,1,1)
|
||||
_FaceColor ("Face Color", Color) = (1,1,1,1)
|
||||
_FaceDilate ("Face Dilate", Range(-1,1)) = 0
|
||||
|
||||
[HDR]_OutlineColor ("Outline Color", Color) = (0,0,0,1)
|
||||
_OutlineColor ("Outline Color", Color) = (0,0,0,1)
|
||||
_OutlineWidth ("Outline Thickness", Range(0,1)) = 0
|
||||
_OutlineSoftness ("Outline Softness", Range(0,1)) = 0
|
||||
|
||||
[HDR]_UnderlayColor ("Border Color", Color) = (0,0,0,.5)
|
||||
_UnderlayColor ("Border Color", Color) = (0,0,0,.5)
|
||||
_UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0
|
||||
_UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0
|
||||
_UnderlayDilate ("Border Dilate", Range(-1,1)) = 0
|
||||
@ -42,14 +42,13 @@ Properties {
|
||||
_ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767)
|
||||
_MaskSoftnessX ("Mask SoftnessX", float) = 0
|
||||
_MaskSoftnessY ("Mask SoftnessY", float) = 0
|
||||
|
||||
|
||||
_StencilComp ("Stencil Comparison", Float) = 8
|
||||
_Stencil ("Stencil ID", Float) = 0
|
||||
_StencilOp ("Stencil Operation", Float) = 0
|
||||
_StencilWriteMask ("Stencil Write Mask", Float) = 255
|
||||
_StencilReadMask ("Stencil Read Mask", Float) = 255
|
||||
|
||||
_CullMode ("Cull Mode", Float) = 0
|
||||
|
||||
_ColorMask ("Color Mask", Float) = 15
|
||||
}
|
||||
|
||||
@ -66,7 +65,7 @@ SubShader {
|
||||
{
|
||||
Ref [_Stencil]
|
||||
Comp [_StencilComp]
|
||||
Pass [_StencilOp]
|
||||
Pass [_StencilOp]
|
||||
ReadMask [_StencilReadMask]
|
||||
WriteMask [_StencilWriteMask]
|
||||
}
|
||||
@ -126,7 +125,7 @@ SubShader {
|
||||
UNITY_SETUP_INSTANCE_ID(input);
|
||||
UNITY_TRANSFER_INSTANCE_ID(input, output);
|
||||
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
|
||||
|
||||
|
||||
float bold = step(input.texcoord1.y, 0);
|
||||
|
||||
float4 vert = input.vertex;
|
||||
@ -136,7 +135,7 @@ SubShader {
|
||||
|
||||
float2 pixelSize = vPosition.w;
|
||||
pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy));
|
||||
|
||||
|
||||
float scale = rsqrt(dot(pixelSize, pixelSize));
|
||||
scale *= abs(input.texcoord1.y) * _GradientScale * (_Sharpness + 1);
|
||||
if(UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert)))));
|
||||
@ -196,7 +195,7 @@ SubShader {
|
||||
fixed4 PixShader(pixel_t input) : SV_Target
|
||||
{
|
||||
UNITY_SETUP_INSTANCE_ID(input);
|
||||
|
||||
|
||||
half d = tex2D(_MainTex, input.texcoord0.xy).a * input.param.x;
|
||||
half4 c = input.faceColor * saturate(d - input.param.w);
|
||||
|
||||
|
@ -1,9 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a02a7d8c237544f1962732b55a9aebf1
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures: []
|
||||
nonModifiableTextures: []
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
@ -1,4 +1,4 @@
|
||||
// Simplified SDF shader:
|
||||
// Simplified SDF shader:
|
||||
// - No Shading Option (bevel / bump / env map)
|
||||
// - No Glow Option
|
||||
// - Softness is applied on both side of the outline
|
||||
@ -6,14 +6,14 @@
|
||||
Shader "TextMeshPro/Mobile/Distance Field" {
|
||||
|
||||
Properties {
|
||||
[HDR]_FaceColor ("Face Color", Color) = (1,1,1,1)
|
||||
_FaceColor ("Face Color", Color) = (1,1,1,1)
|
||||
_FaceDilate ("Face Dilate", Range(-1,1)) = 0
|
||||
|
||||
[HDR]_OutlineColor ("Outline Color", Color) = (0,0,0,1)
|
||||
_OutlineColor ("Outline Color", Color) = (0,0,0,1)
|
||||
_OutlineWidth ("Outline Thickness", Range(0,1)) = 0
|
||||
_OutlineSoftness ("Outline Softness", Range(0,1)) = 0
|
||||
|
||||
[HDR]_UnderlayColor ("Border Color", Color) = (0,0,0,.5)
|
||||
_UnderlayColor ("Border Color", Color) = (0,0,0,.5)
|
||||
_UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0
|
||||
_UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0
|
||||
_UnderlayDilate ("Border Dilate", Range(-1,1)) = 0
|
||||
@ -42,19 +42,18 @@ Properties {
|
||||
_ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767)
|
||||
_MaskSoftnessX ("Mask SoftnessX", float) = 0
|
||||
_MaskSoftnessY ("Mask SoftnessY", float) = 0
|
||||
|
||||
|
||||
_StencilComp ("Stencil Comparison", Float) = 8
|
||||
_Stencil ("Stencil ID", Float) = 0
|
||||
_StencilOp ("Stencil Operation", Float) = 0
|
||||
_StencilWriteMask ("Stencil Write Mask", Float) = 255
|
||||
_StencilReadMask ("Stencil Read Mask", Float) = 255
|
||||
|
||||
_CullMode ("Cull Mode", Float) = 0
|
||||
|
||||
_ColorMask ("Color Mask", Float) = 15
|
||||
}
|
||||
|
||||
SubShader {
|
||||
Tags
|
||||
Tags
|
||||
{
|
||||
"Queue"="Transparent"
|
||||
"IgnoreProjector"="True"
|
||||
@ -66,7 +65,7 @@ SubShader {
|
||||
{
|
||||
Ref [_Stencil]
|
||||
Comp [_StencilComp]
|
||||
Pass [_StencilOp]
|
||||
Pass [_StencilOp]
|
||||
ReadMask [_StencilReadMask]
|
||||
WriteMask [_StencilWriteMask]
|
||||
}
|
||||
@ -126,7 +125,7 @@ SubShader {
|
||||
UNITY_SETUP_INSTANCE_ID(input);
|
||||
UNITY_TRANSFER_INSTANCE_ID(input, output);
|
||||
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
|
||||
|
||||
|
||||
float bold = step(input.texcoord1.y, 0);
|
||||
|
||||
float4 vert = input.vertex;
|
||||
@ -136,7 +135,7 @@ SubShader {
|
||||
|
||||
float2 pixelSize = vPosition.w;
|
||||
pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy));
|
||||
|
||||
|
||||
float scale = rsqrt(dot(pixelSize, pixelSize));
|
||||
scale *= abs(input.texcoord1.y) * _GradientScale * (_Sharpness + 1);
|
||||
if(UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert)))));
|
||||
@ -196,7 +195,7 @@ SubShader {
|
||||
fixed4 PixShader(pixel_t input) : SV_Target
|
||||
{
|
||||
UNITY_SETUP_INSTANCE_ID(input);
|
||||
|
||||
|
||||
half d = tex2D(_MainTex, input.texcoord0.xy).a * input.param.x;
|
||||
half4 c = input.faceColor * saturate(d - input.param.w);
|
||||
|
||||
|
@ -1,9 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fe393ace9b354375a9cb14cdbbc28be4
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures: []
|
||||
nonModifiableTextures: []
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
@ -7,15 +7,15 @@ Shader "TextMeshPro/Mobile/Distance Field (Surface)" {
|
||||
|
||||
Properties {
|
||||
_FaceTex ("Fill Texture", 2D) = "white" {}
|
||||
[HDR]_FaceColor ("Fill Color", Color) = (1,1,1,1)
|
||||
_FaceColor ("Fill Color", Color) = (1,1,1,1)
|
||||
_FaceDilate ("Face Dilate", Range(-1,1)) = 0
|
||||
|
||||
[HDR]_OutlineColor ("Outline Color", Color) = (0,0,0,1)
|
||||
_OutlineColor ("Outline Color", Color) = (0,0,0,1)
|
||||
_OutlineTex ("Outline Texture", 2D) = "white" {}
|
||||
_OutlineWidth ("Outline Thickness", Range(0, 1)) = 0
|
||||
_OutlineSoftness ("Outline Softness", Range(0,1)) = 0
|
||||
_OutlineSoftness ("Outline Softness", Range(0,1)) = 0
|
||||
|
||||
[HDR]_GlowColor ("Color", Color) = (0, 1, 0, 0.5)
|
||||
_GlowColor ("Color", Color) = (0, 1, 0, 0.5)
|
||||
_GlowOffset ("Offset", Range(-1,1)) = 0
|
||||
_GlowInner ("Inner", Range(0,1)) = 0.05
|
||||
_GlowOuter ("Outer", Range(0,1)) = 0.05
|
||||
@ -41,8 +41,7 @@ Properties {
|
||||
|
||||
_VertexOffsetX ("Vertex OffsetX", float) = 0
|
||||
_VertexOffsetY ("Vertex OffsetY", float) = 0
|
||||
|
||||
_CullMode ("Cull Mode", Float) = 0
|
||||
|
||||
//_MaskCoord ("Mask Coords", vector) = (0,0,0,0)
|
||||
//_MaskSoftness ("Mask Softness", float) = 0
|
||||
}
|
||||
@ -76,7 +75,7 @@ SubShader {
|
||||
float2 uv2_FaceTex;
|
||||
float2 uv2_OutlineTex;
|
||||
float2 param; // Weight, Scale
|
||||
float3 viewDirEnv;
|
||||
float3 viewDirEnv;
|
||||
};
|
||||
|
||||
#include "TMPro_Surface.cginc"
|
||||
|
@ -1,9 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 85187c2149c549c5b33f0cdb02836b17
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures: []
|
||||
nonModifiableTextures: []
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
@ -4,10 +4,10 @@ Properties {
|
||||
_FaceTex ("Fill Texture", 2D) = "white" {}
|
||||
_FaceUVSpeedX ("Face UV Speed X", Range(-5, 5)) = 0.0
|
||||
_FaceUVSpeedY ("Face UV Speed Y", Range(-5, 5)) = 0.0
|
||||
[HDR]_FaceColor ("Fill Color", Color) = (1,1,1,1)
|
||||
_FaceColor ("Fill Color", Color) = (1,1,1,1)
|
||||
_FaceDilate ("Face Dilate", Range(-1,1)) = 0
|
||||
|
||||
[HDR]_OutlineColor ("Outline Color", Color) = (0,0,0,1)
|
||||
_OutlineColor ("Outline Color", Color) = (0,0,0,1)
|
||||
_OutlineTex ("Outline Texture", 2D) = "white" {}
|
||||
_OutlineUVSpeedX ("Outline UV Speed X", Range(-5, 5)) = 0.0
|
||||
_OutlineUVSpeedY ("Outline UV Speed Y", Range(-5, 5)) = 0.0
|
||||
@ -24,16 +24,16 @@ Properties {
|
||||
_BumpOutline ("Bump Outline", Range(0,1)) = 0.5
|
||||
_BumpFace ("Bump Face", Range(0,1)) = 0.5
|
||||
|
||||
_ReflectFaceColor ("Face Color", Color) = (0,0,0,1)
|
||||
_ReflectFaceColor ("Face Color", Color) = (0,0,0,1)
|
||||
_ReflectOutlineColor ("Outline Color", Color) = (0,0,0,1)
|
||||
_Cube ("Reflection Cubemap", Cube) = "black" { /* TexGen CubeReflect */ }
|
||||
_EnvMatrixRotation ("Texture Rotation", vector) = (0, 0, 0, 0)
|
||||
[HDR]_SpecColor ("Specular Color", Color) = (0,0,0,1)
|
||||
_EnvMatrixRotation ("Texture Rotation", vector) = (0, 0, 0, 0)
|
||||
_SpecColor ("Specular Color", Color) = (0,0,0,1)
|
||||
|
||||
_FaceShininess ("Face Shininess", Range(0,1)) = 0
|
||||
_OutlineShininess ("Outline Shininess", Range(0,1)) = 0
|
||||
|
||||
[HDR]_GlowColor ("Color", Color) = (0, 1, 0, 0.5)
|
||||
_GlowColor ("Color", Color) = (0, 1, 0, 0.5)
|
||||
_GlowOffset ("Offset", Range(-1,1)) = 0
|
||||
_GlowInner ("Inner", Range(0,1)) = 0.05
|
||||
_GlowOuter ("Outer", Range(0,1)) = 0.05
|
||||
@ -59,15 +59,13 @@ Properties {
|
||||
|
||||
_VertexOffsetX ("Vertex OffsetX", float) = 0
|
||||
_VertexOffsetY ("Vertex OffsetY", float) = 0
|
||||
|
||||
_CullMode ("Cull Mode", Float) = 0
|
||||
//_MaskCoord ("Mask Coords", vector) = (0,0,0,0)
|
||||
//_MaskSoftness ("Mask Softness", float) = 0
|
||||
}
|
||||
|
||||
SubShader {
|
||||
|
||||
Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
|
||||
Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
|
||||
|
||||
LOD 300
|
||||
Cull [_CullMode]
|
||||
@ -91,10 +89,10 @@ SubShader {
|
||||
float2 uv2_FaceTex;
|
||||
float2 uv2_OutlineTex;
|
||||
float2 param; // Weight, Scale
|
||||
float3 viewDirEnv;
|
||||
float3 viewDirEnv;
|
||||
};
|
||||
|
||||
|
||||
|
||||
#define BEVEL_ON 1
|
||||
#include "TMPro_Surface.cginc"
|
||||
|
||||
|
@ -1,9 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f7ada0af4f174f0694ca6a487b8f543d
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures: []
|
||||
nonModifiableTextures: []
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
@ -4,10 +4,10 @@ Properties {
|
||||
_FaceTex ("Face Texture", 2D) = "white" {}
|
||||
_FaceUVSpeedX ("Face UV Speed X", Range(-5, 5)) = 0.0
|
||||
_FaceUVSpeedY ("Face UV Speed Y", Range(-5, 5)) = 0.0
|
||||
[HDR]_FaceColor ("Face Color", Color) = (1,1,1,1)
|
||||
_FaceColor ("Face Color", Color) = (1,1,1,1)
|
||||
_FaceDilate ("Face Dilate", Range(-1,1)) = 0
|
||||
|
||||
[HDR]_OutlineColor ("Outline Color", Color) = (0,0,0,1)
|
||||
_OutlineColor ("Outline Color", Color) = (0,0,0,1)
|
||||
_OutlineTex ("Outline Texture", 2D) = "white" {}
|
||||
_OutlineUVSpeedX ("Outline UV Speed X", Range(-5, 5)) = 0.0
|
||||
_OutlineUVSpeedY ("Outline UV Speed Y", Range(-5, 5)) = 0.0
|
||||
@ -21,7 +21,7 @@ Properties {
|
||||
_BevelRoundness ("Bevel Roundness", Range(0,1)) = 0
|
||||
|
||||
_LightAngle ("Light Angle", Range(0.0, 6.2831853)) = 3.1416
|
||||
[HDR]_SpecularColor ("Specular", Color) = (1,1,1,1)
|
||||
_SpecularColor ("Specular", Color) = (1,1,1,1)
|
||||
_SpecularPower ("Specular", Range(0,4)) = 2.0
|
||||
_Reflectivity ("Reflectivity", Range(5.0,15.0)) = 10
|
||||
_Diffuse ("Diffuse", Range(0,1)) = 0.5
|
||||
@ -35,15 +35,15 @@ Properties {
|
||||
_ReflectOutlineColor("Reflection Color", Color) = (0,0,0,1)
|
||||
_Cube ("Reflection Cubemap", Cube) = "black" { /* TexGen CubeReflect */ }
|
||||
_EnvMatrixRotation ("Texture Rotation", vector) = (0, 0, 0, 0)
|
||||
|
||||
|
||||
|
||||
[HDR]_UnderlayColor ("Border Color", Color) = (0,0,0, 0.5)
|
||||
_UnderlayColor ("Border Color", Color) = (0,0,0, 0.5)
|
||||
_UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0
|
||||
_UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0
|
||||
_UnderlayDilate ("Border Dilate", Range(-1,1)) = 0
|
||||
_UnderlaySoftness ("Border Softness", Range(0,1)) = 0
|
||||
|
||||
[HDR]_GlowColor ("Color", Color) = (0, 1, 0, 0.5)
|
||||
_GlowColor ("Color", Color) = (0, 1, 0, 0.5)
|
||||
_GlowOffset ("Offset", Range(-1,1)) = 0
|
||||
_GlowInner ("Inner", Range(0,1)) = 0.05
|
||||
_GlowOuter ("Outer", Range(0,1)) = 0.05
|
||||
@ -68,7 +68,7 @@ Properties {
|
||||
|
||||
_VertexOffsetX ("Vertex OffsetX", float) = 0
|
||||
_VertexOffsetY ("Vertex OffsetY", float) = 0
|
||||
|
||||
|
||||
_MaskCoord ("Mask Coordinates", vector) = (0, 0, 32767, 32767)
|
||||
_ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767)
|
||||
_MaskSoftnessX ("Mask SoftnessX", float) = 0
|
||||
@ -80,7 +80,6 @@ Properties {
|
||||
_StencilWriteMask ("Stencil Write Mask", Float) = 255
|
||||
_StencilReadMask ("Stencil Read Mask", Float) = 255
|
||||
|
||||
_CullMode ("Cull Mode", Float) = 0
|
||||
_ColorMask ("Color Mask", Float) = 15
|
||||
}
|
||||
|
||||
@ -97,7 +96,7 @@ SubShader {
|
||||
{
|
||||
Ref [_Stencil]
|
||||
Comp [_StencilComp]
|
||||
Pass [_StencilOp]
|
||||
Pass [_StencilOp]
|
||||
ReadMask [_StencilReadMask]
|
||||
WriteMask [_StencilWriteMask]
|
||||
}
|
||||
@ -146,7 +145,7 @@ SubShader {
|
||||
float4 param : TEXCOORD1; // alphaClip, scale, bias, weight
|
||||
float4 mask : TEXCOORD2; // Position in object space(xy), pixel Size(zw)
|
||||
float3 viewDir : TEXCOORD3;
|
||||
|
||||
|
||||
#if (UNDERLAY_ON || UNDERLAY_INNER)
|
||||
float4 texcoord2 : TEXCOORD4; // u,v, scale, bias
|
||||
fixed4 underlayColor : COLOR1;
|
||||
@ -187,7 +186,7 @@ SubShader {
|
||||
float bias =(.5 - weight) + (.5 / scale);
|
||||
|
||||
float alphaClip = (1.0 - _OutlineWidth * _ScaleRatioA - _OutlineSoftness * _ScaleRatioA);
|
||||
|
||||
|
||||
#if GLOW_ON
|
||||
alphaClip = min(alphaClip, 1.0 - _GlowOffset * _ScaleRatioB - _GlowOuter * _ScaleRatioB);
|
||||
#endif
|
||||
@ -216,7 +215,7 @@ SubShader {
|
||||
float2 faceUV = TRANSFORM_TEX(textureUV, _FaceTex);
|
||||
float2 outlineUV = TRANSFORM_TEX(textureUV, _OutlineTex);
|
||||
|
||||
|
||||
|
||||
output.position = vPosition;
|
||||
output.color = input.color;
|
||||
output.atlas = input.texcoord0;
|
||||
@ -228,7 +227,7 @@ SubShader {
|
||||
output.underlayColor = underlayColor;
|
||||
#endif
|
||||
output.textures = float4(faceUV, outlineUV);
|
||||
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
@ -238,7 +237,7 @@ SubShader {
|
||||
UNITY_SETUP_INSTANCE_ID(input);
|
||||
|
||||
float c = tex2D(_MainTex, input.atlas).a;
|
||||
|
||||
|
||||
#ifndef UNDERLAY_ON
|
||||
clip(c - input.param.x);
|
||||
#endif
|
||||
@ -255,7 +254,7 @@ SubShader {
|
||||
half4 outlineColor = _OutlineColor;
|
||||
|
||||
faceColor.rgb *= input.color.rgb;
|
||||
|
||||
|
||||
faceColor *= tex2D(_FaceTex, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y);
|
||||
outlineColor *= tex2D(_OutlineTex, input.textures.zw + float2(_OutlineUVSpeedX, _OutlineUVSpeedY) * _Time.y);
|
||||
|
||||
|
@ -1,9 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 68e6db2ebdc24f95958faec2be5558d6
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures: []
|
||||
nonModifiableTextures: []
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
@ -2,7 +2,7 @@ Shader "TextMeshPro/Sprite"
|
||||
{
|
||||
Properties
|
||||
{
|
||||
[PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
|
||||
_MainTex ("Sprite Texture", 2D) = "white" {}
|
||||
_Color ("Tint", Color) = (1,1,1,1)
|
||||
|
||||
_StencilComp ("Stencil Comparison", Float) = 8
|
||||
@ -10,8 +10,7 @@ Shader "TextMeshPro/Sprite"
|
||||
_StencilOp ("Stencil Operation", Float) = 0
|
||||
_StencilWriteMask ("Stencil Write Mask", Float) = 255
|
||||
_StencilReadMask ("Stencil Read Mask", Float) = 255
|
||||
|
||||
_CullMode ("Cull Mode", Float) = 0
|
||||
|
||||
_ColorMask ("Color Mask", Float) = 15
|
||||
_ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767)
|
||||
|
||||
@ -38,7 +37,7 @@ Shader "TextMeshPro/Sprite"
|
||||
WriteMask [_StencilWriteMask]
|
||||
}
|
||||
|
||||
Cull [_CullMode]
|
||||
Cull Off
|
||||
Lighting Off
|
||||
ZWrite Off
|
||||
ZTest [unity_GUIZTestMode]
|
||||
@ -47,60 +46,58 @@ Shader "TextMeshPro/Sprite"
|
||||
|
||||
Pass
|
||||
{
|
||||
Name "Default"
|
||||
CGPROGRAM
|
||||
#pragma vertex vert
|
||||
#pragma fragment frag
|
||||
#pragma target 2.0
|
||||
|
||||
#include "UnityCG.cginc"
|
||||
#include "UnityUI.cginc"
|
||||
|
||||
#pragma multi_compile __ UNITY_UI_CLIP_RECT
|
||||
#pragma multi_compile __ UNITY_UI_ALPHACLIP
|
||||
#pragma multi_compile __ UNITY_UI_CLIP_RECT
|
||||
#pragma multi_compile __ UNITY_UI_ALPHACLIP
|
||||
|
||||
struct appdata_t
|
||||
{
|
||||
float4 vertex : POSITION;
|
||||
float4 color : COLOR;
|
||||
float2 texcoord : TEXCOORD0;
|
||||
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||||
};
|
||||
|
||||
struct v2f
|
||||
{
|
||||
float4 vertex : SV_POSITION;
|
||||
fixed4 color : COLOR;
|
||||
float2 texcoord : TEXCOORD0;
|
||||
half2 texcoord : TEXCOORD0;
|
||||
float4 worldPosition : TEXCOORD1;
|
||||
UNITY_VERTEX_OUTPUT_STEREO
|
||||
};
|
||||
|
||||
sampler2D _MainTex;
|
||||
fixed4 _Color;
|
||||
fixed4 _TextureSampleAdd;
|
||||
float4 _ClipRect;
|
||||
float4 _MainTex_ST;
|
||||
|
||||
v2f vert(appdata_t v)
|
||||
v2f vert(appdata_t IN)
|
||||
{
|
||||
v2f OUT;
|
||||
UNITY_SETUP_INSTANCE_ID(v);
|
||||
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT);
|
||||
OUT.worldPosition = v.vertex;
|
||||
OUT.worldPosition = IN.vertex;
|
||||
OUT.vertex = UnityObjectToClipPos(OUT.worldPosition);
|
||||
|
||||
OUT.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
|
||||
OUT.texcoord = IN.texcoord;
|
||||
|
||||
OUT.color = v.color * _Color;
|
||||
#ifdef UNITY_HALF_TEXEL_OFFSET
|
||||
OUT.vertex.xy += (_ScreenParams.zw-1.0)*float2(-1,1);
|
||||
#endif
|
||||
|
||||
OUT.color = IN.color * _Color;
|
||||
return OUT;
|
||||
}
|
||||
|
||||
sampler2D _MainTex;
|
||||
|
||||
fixed4 frag(v2f IN) : SV_Target
|
||||
{
|
||||
half4 color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd) * IN.color;
|
||||
|
||||
#ifdef UNITY_UI_CLIP_RECT
|
||||
#if UNITY_UI_CLIP_RECT
|
||||
color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect);
|
||||
#endif
|
||||
|
||||
|
@ -1,9 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cf81c85f95fe47e1a27f6ae460cf182c
|
||||
timeCreated: 1450517184
|
||||
licenseType: Pro
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures: []
|
||||
nonModifiableTextures: []
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
@ -1,9 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 407bc68d299748449bbf7f48ee690f8d
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures: []
|
||||
nonModifiableTextures: []
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
@ -1,9 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3997e2241185407d80309a82f9148466
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures: []
|
||||
nonModifiableTextures: []
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
@ -25,6 +25,8 @@ void VertShader(inout appdata_full v, out Input data)
|
||||
data.param.y = scale;
|
||||
#endif
|
||||
|
||||
//float opacity = v.color.a;
|
||||
|
||||
data.param.x = (lerp(_WeightNormal, _WeightBold, bold) / 4.0 + _FaceDilate) * _ScaleRatioA * 0.5; //
|
||||
|
||||
v.texcoord1.xy = UnpackUV(v.texcoord1.x);
|
||||
@ -34,10 +36,26 @@ void VertShader(inout appdata_full v, out Input data)
|
||||
void PixShader(Input input, inout SurfaceOutput o)
|
||||
{
|
||||
|
||||
#if USE_DERIVATIVE | BEVEL_ON
|
||||
float3 delta = float3(1.0 / _TextureWidth, 1.0 / _TextureHeight, 0.0);
|
||||
|
||||
float4 smp4x = { tex2D(_MainTex, input.uv_MainTex - delta.xz).a,
|
||||
tex2D(_MainTex, input.uv_MainTex + delta.xz).a,
|
||||
tex2D(_MainTex, input.uv_MainTex - delta.zy).a,
|
||||
tex2D(_MainTex, input.uv_MainTex + delta.zy).a };
|
||||
#endif
|
||||
|
||||
#if USE_DERIVATIVE
|
||||
float2 pixelSize = float2(ddx(input.uv_MainTex.y), ddy(input.uv_MainTex.y));
|
||||
pixelSize *= _TextureWidth * .75;
|
||||
float scale = rsqrt(dot(pixelSize, pixelSize)) * _GradientScale * (_Sharpness + 1);
|
||||
// Screen space scaling reciprocal with anisotropic correction
|
||||
float2 edgeNormal = Normalize(float2(smp4x.x - smp4x.y, smp4x.z - smp4x.w));
|
||||
float2 res = float2(_TextureWidth * input.param.y, _TextureHeight);
|
||||
float2 tdx = ddx(input.uv_MainTex)*res;
|
||||
float2 tdy = ddy(input.uv_MainTex)*res;
|
||||
float lx = length(tdx);
|
||||
float ly = length(tdy);
|
||||
float s = sqrt(min(lx, ly) / max(lx, ly));
|
||||
s = lerp(1, s, abs(dot(normalize(tdx + tdy), edgeNormal)));
|
||||
float scale = rsqrt(abs(tdx.x * tdy.y - tdx.y * tdy.x)) * (_GradientScale * 2) * s;
|
||||
#else
|
||||
float scale = input.param.y;
|
||||
#endif
|
||||
@ -58,14 +76,8 @@ void PixShader(Input input, inout SurfaceOutput o)
|
||||
faceColor = GetColor(sd, faceColor, outlineColor, outline, softness);
|
||||
faceColor.rgb /= max(faceColor.a, 0.0001);
|
||||
|
||||
|
||||
#if BEVEL_ON
|
||||
float3 delta = float3(1.0 / _TextureWidth, 1.0 / _TextureHeight, 0.0);
|
||||
|
||||
float4 smp4x = {tex2D(_MainTex, input.uv_MainTex - delta.xz).a,
|
||||
tex2D(_MainTex, input.uv_MainTex + delta.xz).a,
|
||||
tex2D(_MainTex, input.uv_MainTex - delta.zy).a,
|
||||
tex2D(_MainTex, input.uv_MainTex + delta.zy).a };
|
||||
|
||||
// Face Normal
|
||||
float3 n = GetSurfaceNormal(smp4x, input.param.x);
|
||||
|
||||
@ -82,7 +94,9 @@ void PixShader(Input input, inout SurfaceOutput o)
|
||||
float3 n = float3(0, 0, -1);
|
||||
float3 emission = float3(0, 0, 0);
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
#if GLOW_ON
|
||||
float4 glowColor = GetGlowColor(sd, scale);
|
||||
glowColor.a *= input.color.a;
|
||||
|
@ -1,9 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d930090c0cd643c7b55f19a38538c162
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures: []
|
||||
nonModifiableTextures: []
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 110 KiB After Width: | Height: | Size: 72 KiB |
10
Assets/_.meta
Normal file
10
Assets/_.meta
Normal file
@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4ad70f11d566df74ea78e615ab4e6803
|
||||
folderAsset: yes
|
||||
timeCreated: 1526456054
|
||||
licenseType: Pro
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
10
Assets/_/Stuff.meta
Normal file
10
Assets/_/Stuff.meta
Normal file
@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5a1f5de3e19072249a9182176764c31e
|
||||
folderAsset: yes
|
||||
timeCreated: 1526278638
|
||||
licenseType: Pro
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
8
Assets/_/Stuff/GridPathfinding.meta
Normal file
8
Assets/_/Stuff/GridPathfinding.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 195b2f3b3faa2ff4fa4e89d879e79def
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
285
Assets/_/Stuff/GridPathfinding/BinaryTree.cs
Normal file
285
Assets/_/Stuff/GridPathfinding/BinaryTree.cs
Normal file
@ -0,0 +1,285 @@
|
||||
/*
|
||||
------------------- Code Monkey -------------------
|
||||
|
||||
Thank you for downloading this package
|
||||
I hope you find it useful in your projects
|
||||
If you have any questions let me know
|
||||
Cheers!
|
||||
|
||||
unitycodemonkey.com
|
||||
--------------------------------------------------
|
||||
*/
|
||||
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
|
||||
namespace GridPathfindingSystem {
|
||||
|
||||
public class BinaryTree {
|
||||
|
||||
private class BinaryNode {
|
||||
//public static int nextId = 0;
|
||||
//public int id;
|
||||
public PathNode pathNode;
|
||||
public BinaryNode left;
|
||||
public BinaryNode right;
|
||||
|
||||
public BinaryNode(PathNode _pathNode, BinaryNode _left, BinaryNode _right) {
|
||||
//id = nextId++;
|
||||
pathNode = _pathNode;
|
||||
left = _left;
|
||||
right = _right;
|
||||
}
|
||||
/*public override string ToString() {
|
||||
return "n_" + id;
|
||||
}*/
|
||||
}
|
||||
|
||||
private BinaryNode root;
|
||||
public int totalNodes = 0;
|
||||
|
||||
//private string debugString;
|
||||
//private string debugCodePath;
|
||||
|
||||
public BinaryTree() {
|
||||
//BinaryNode.nextId = 0;
|
||||
root = null;
|
||||
//debugCodePath = "NEW: ";
|
||||
}
|
||||
|
||||
public void AddNode(PathNode pathNode) {
|
||||
//debugCodePath += "AD; ";
|
||||
if (root == null) {
|
||||
root = new BinaryNode(pathNode, null, null);
|
||||
totalNodes++;
|
||||
} else {
|
||||
// Has root
|
||||
//debugString = "";
|
||||
try {
|
||||
addNode(root, pathNode, pathNode.fValue);
|
||||
} catch (System.Exception e) {
|
||||
Debug.Log(e);
|
||||
//Debug.LogError("Error: "+debugString);
|
||||
//Debug.LogError(debugCodePath);
|
||||
}
|
||||
totalNodes++;
|
||||
}
|
||||
}
|
||||
|
||||
private void addNode(BinaryNode node, PathNode pathNode, int pathFvalue) {
|
||||
//debugString += node.id + " " + ((node.left == null) ? "-1" : ""+node.left.id) + " " + (node.right == null ? "-1" : ""+node.right.id) + " ";
|
||||
if (pathFvalue <= node.pathNode.fValue) {
|
||||
// Left
|
||||
if (node.left == null) {
|
||||
// Become left
|
||||
//debugString += " LEFT" + "; \n";
|
||||
node.left = new BinaryNode(pathNode, null, null);
|
||||
//debugCodePath += "AD" + node.left + "; ";
|
||||
} else {
|
||||
// Check left
|
||||
//debugString += "L; \n";
|
||||
//debugString += node.id + " " + (node == (node.left));
|
||||
addNode(node.left, pathNode, pathFvalue);
|
||||
}
|
||||
} else {
|
||||
// Right
|
||||
if (node.right == null) {
|
||||
// Become right
|
||||
//debugString += " RIGHT" + "; \n";
|
||||
node.right = new BinaryNode(pathNode, null, null);
|
||||
//debugCodePath += "AD" + node.right + "; ";
|
||||
} else {
|
||||
// Check right
|
||||
//debugString += node.id + " ";
|
||||
//debugString += "R; \n";
|
||||
addNode(node.right, pathNode, pathFvalue);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void RemoveNode(PathNode pathNode) {
|
||||
if (root.pathNode == pathNode) {
|
||||
// It's the root
|
||||
//debugCodePath += "RR" + root + "; ";
|
||||
BinaryNode prevRoot = root;
|
||||
if (root.left == null && root.right == null) {
|
||||
// Both are null
|
||||
root = null;
|
||||
// Tree is dead
|
||||
} else {
|
||||
// Atleast one has something
|
||||
if (root.left == null && root.right != null) {
|
||||
// Has right but no left
|
||||
root = root.right;
|
||||
} else {
|
||||
if (root.right == null && root.left != null) {
|
||||
// Has left but no right
|
||||
root = root.left;
|
||||
} else {
|
||||
// Has both right and left
|
||||
if (root.left.right == null) {
|
||||
// Root left has no right
|
||||
root.left.right = root.right;
|
||||
root = root.left;
|
||||
} else {
|
||||
// Root left has a right
|
||||
BinaryNode leafRight = getLeafRight(root.left);
|
||||
root = leafRight.right;
|
||||
if (leafRight.right.left != null) {
|
||||
// This leaf has a left
|
||||
leafRight.right = leafRight.right.left;
|
||||
}
|
||||
leafRight.right = null;
|
||||
root.left = leafRight;
|
||||
root.right = prevRoot.right;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
int pathFvalue = pathNode.fValue;
|
||||
removeNode(root, pathNode, pathFvalue);
|
||||
}
|
||||
totalNodes--;
|
||||
}
|
||||
|
||||
private void removeNode(BinaryNode node, PathNode pathNode, int pathFvalue) {
|
||||
if (pathFvalue <= node.pathNode.fValue) {
|
||||
// Check left
|
||||
// Is it this left?
|
||||
if (node.left != null) {
|
||||
if (node.left.pathNode == pathNode) {
|
||||
// It's this left one!
|
||||
BinaryNode del = node.left;
|
||||
//debugCodePath += "RNL" + del + "; ";
|
||||
if (del.left == null && del.right == null) {
|
||||
// Both are null
|
||||
node.left = null;
|
||||
} else {
|
||||
// Atleast one has something
|
||||
if (del.left == null && del.right != null) {
|
||||
// Has right but no left
|
||||
node.left = del.right;
|
||||
} else {
|
||||
if (del.right == null && del.left != null) {
|
||||
// Has left but no right
|
||||
node.left = del.left;
|
||||
} else {
|
||||
// Has both right and left
|
||||
if (del.left.right == null) {
|
||||
// Root left has no right
|
||||
del.left.right = del.right;
|
||||
node.left = del.left;
|
||||
} else {
|
||||
// Root left has a right
|
||||
BinaryNode leafRight = getLeafRight(del.left);
|
||||
node.left = leafRight.right;
|
||||
if (leafRight.right.left != null) {
|
||||
// This leaf has a left
|
||||
leafRight.right = leafRight.right.left;
|
||||
}
|
||||
leafRight.right = null;
|
||||
node.left.left = leafRight;
|
||||
node.left.right = del.right;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Not this left
|
||||
// Check next one
|
||||
removeNode(node.left, pathNode, pathFvalue);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Check right
|
||||
// Is it this right?
|
||||
if (node.right != null) {
|
||||
if (node.right.pathNode == pathNode) {
|
||||
// It's this right one!
|
||||
BinaryNode del = node.right;
|
||||
//debugCodePath += "RNR" + del + "; ";
|
||||
if (del.left == null && del.right == null) {
|
||||
// Both are null
|
||||
node.right = null;
|
||||
} else {
|
||||
// Atleast one has something
|
||||
if (del.left == null && del.right != null) {
|
||||
// Has right but no left
|
||||
node.right = del.right;
|
||||
} else {
|
||||
if (del.right == null && del.left != null) {
|
||||
// Has left but no right
|
||||
node.right = del.left;
|
||||
} else {
|
||||
// Has both right and left
|
||||
if (del.left.right == null) {
|
||||
// Root left has no right
|
||||
del.left.right = del.right;
|
||||
node.right = del.left;
|
||||
} else {
|
||||
// Root left has a right
|
||||
BinaryNode leafRight = getLeafRight(del.left);
|
||||
node.right = leafRight.right;
|
||||
if (leafRight.right.left != null) {
|
||||
// This leaf has a left
|
||||
leafRight.right = leafRight.right.left;
|
||||
}
|
||||
leafRight.right = null;
|
||||
node.right.left = leafRight;
|
||||
node.right.right = del.right;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Not this right
|
||||
// Check next one
|
||||
removeNode(node.right, pathNode, pathFvalue);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private BinaryNode getLeafRight(BinaryNode node) {
|
||||
if (node.right.right == null)
|
||||
return node;
|
||||
else
|
||||
return getLeafRight(node.right);
|
||||
}
|
||||
|
||||
public int getTotalHeight() {
|
||||
return getHeight(root);
|
||||
}
|
||||
|
||||
private int getHeight(BinaryNode node) {
|
||||
if (node == null) return 0;
|
||||
else {
|
||||
return 1 + (int)Mathf.Max(getHeight(node.left), getHeight(node.right));
|
||||
}
|
||||
}
|
||||
|
||||
public PathNode GetSmallest() {
|
||||
PathNode pathNode = null;
|
||||
int count = 0;
|
||||
try {
|
||||
pathNode = getSmallest(root, ref count);
|
||||
} catch {
|
||||
Debug.LogError("GetSmallest: " + count);
|
||||
}
|
||||
return pathNode;
|
||||
//return getSmallest(root, 0);
|
||||
}
|
||||
|
||||
private PathNode getSmallest(BinaryNode node, ref int count) {
|
||||
if (node == null) return null;
|
||||
if (node.left != null) {
|
||||
count++;
|
||||
return getSmallest(node.left, ref count);
|
||||
} else {
|
||||
// No more left nodes
|
||||
return node.pathNode;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
8
Assets/_/Stuff/GridPathfinding/BinaryTree.cs.meta
Normal file
8
Assets/_/Stuff/GridPathfinding/BinaryTree.cs.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5021e6dce69bb414c9edbaf785dc6f64
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
673
Assets/_/Stuff/GridPathfinding/GridPathfinding.cs
Normal file
673
Assets/_/Stuff/GridPathfinding/GridPathfinding.cs
Normal file
@ -0,0 +1,673 @@
|
||||
/*
|
||||
------------------- Code Monkey -------------------
|
||||
|
||||
Thank you for downloading this package
|
||||
I hope you find it useful in your projects
|
||||
If you have any questions let me know
|
||||
Cheers!
|
||||
|
||||
unitycodemonkey.com
|
||||
--------------------------------------------------
|
||||
*/
|
||||
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
|
||||
namespace GridPathfindingSystem {
|
||||
|
||||
public class GridPathfinding {
|
||||
|
||||
public static GridPathfinding instance;
|
||||
|
||||
public const int WALL_WEIGHT = 56000;
|
||||
|
||||
public enum UnitMovementCallbackType {
|
||||
Simple,
|
||||
}
|
||||
|
||||
//private List<PathNode> openList;
|
||||
private BinaryTree binaryTree;
|
||||
private int openListCount;
|
||||
private PathNode[][] mapNodes;
|
||||
private int widthMax, heightMax;
|
||||
|
||||
private float nodeSize;
|
||||
private Vector3 worldOrigin;
|
||||
|
||||
private bool foundTarget;
|
||||
private int movementCost = 10;
|
||||
private float timer;
|
||||
|
||||
public delegate void OnPathCallback(List<PathNode> path, MapPos finalPos);
|
||||
public delegate void OnVoidDelegate();
|
||||
public OnVoidDelegate callbacks;
|
||||
|
||||
public GridPathfinding(Vector3 worldLowerLeft, Vector3 worldUpperRight, float nodeSize) {
|
||||
instance = this;
|
||||
worldOrigin = worldLowerLeft;
|
||||
this.nodeSize = nodeSize;
|
||||
|
||||
float worldWidth = worldUpperRight.x - worldLowerLeft.x;
|
||||
float worldHeight = worldUpperRight.y - worldLowerLeft.y;
|
||||
|
||||
int mapWidth = Mathf.RoundToInt(worldWidth / nodeSize);
|
||||
int mapHeight = Mathf.RoundToInt(worldHeight / nodeSize);
|
||||
|
||||
mapNodes = new PathNode[mapWidth][];
|
||||
for (int i = 0; i < mapWidth; i++) {
|
||||
mapNodes[i] = new PathNode[mapHeight];
|
||||
}
|
||||
widthMax = mapWidth;
|
||||
heightMax = mapHeight;
|
||||
|
||||
Initialize(mapWidth, mapHeight);
|
||||
}
|
||||
|
||||
public GridPathfinding(int mapWidth, int mapHeight, float nodeSize, Vector3 worldOrigin) {//, Texture2D map) {
|
||||
this.nodeSize = nodeSize;
|
||||
this.worldOrigin = worldOrigin;
|
||||
|
||||
mapNodes = new PathNode[mapWidth][];
|
||||
for (int i = 0; i < mapWidth; i++) {
|
||||
mapNodes[i] = new PathNode[mapHeight];
|
||||
}
|
||||
widthMax = mapWidth;
|
||||
heightMax = mapHeight;
|
||||
|
||||
Initialize(mapWidth, mapHeight);
|
||||
}
|
||||
|
||||
public void RaycastWalkable() {
|
||||
for (int i = 0; i < widthMax; i++) {
|
||||
for (int j = 0; j < heightMax; j++) {
|
||||
Vector3 nodeWorldPosition = mapNodes[i][j].GetWorldVector(worldOrigin, nodeSize);
|
||||
RaycastHit2D raycastHit = Physics2D.Raycast(nodeWorldPosition, Vector2.zero, 0f);
|
||||
if (raycastHit.collider != null) {
|
||||
mapNodes[i][j].SetWalkable(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void ModifySize(int modifyX, int modifyY, int newPathNodeWeight) {
|
||||
if (modifyX == 0 && modifyY == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
int newWidth = widthMax + modifyX;
|
||||
int newHeight = heightMax + modifyY;
|
||||
|
||||
PathNode[][] newMapNodes = new PathNode[newWidth][];
|
||||
for (int i = 0; i < newWidth; i++) {
|
||||
newMapNodes[i] = new PathNode[newHeight];
|
||||
for (int j = 0; j < newHeight; j++) {
|
||||
if (i < mapNodes.Length && j < mapNodes[0].Length) {
|
||||
newMapNodes[i][j] = mapNodes[i][j];
|
||||
} else {
|
||||
newMapNodes[i][j] = new PathNode(i, j);
|
||||
newMapNodes[i][j].SetWeight(newPathNodeWeight);
|
||||
}
|
||||
}
|
||||
}
|
||||
widthMax = newWidth;
|
||||
heightMax = newHeight;
|
||||
|
||||
mapNodes = newMapNodes;
|
||||
|
||||
UpdateNodeConnections();
|
||||
|
||||
//if (OnSizeModified != null) OnSizeModified(this, EventArgs.Empty);
|
||||
}
|
||||
|
||||
public Vector3 GetWorldOffset() {
|
||||
return worldOrigin;
|
||||
}
|
||||
|
||||
public float GetNodeSize() {
|
||||
return nodeSize;
|
||||
}
|
||||
|
||||
public void SetWalkable(int x, int y, bool walkable) {
|
||||
mapNodes[x][y].SetWalkable(walkable);
|
||||
}
|
||||
|
||||
public void SetAllWalkable(bool walkable) {
|
||||
for (int x = 0; x < mapNodes.Length; x++) {
|
||||
for (int y = 0; y < mapNodes[x].Length; y++) {
|
||||
mapNodes[x][y].SetWalkable(walkable);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void SetWeight(int x, int y, int weight) {
|
||||
mapNodes[x][y].SetWeight(weight);
|
||||
}
|
||||
|
||||
public void SetAllWeight(int weight) {
|
||||
for (int x = 0; x < mapNodes.Length; x++) {
|
||||
for (int y = 0; y < mapNodes[x].Length; y++) {
|
||||
mapNodes[x][y].SetWeight(weight);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int GetMapWidth() {
|
||||
return widthMax;
|
||||
}
|
||||
|
||||
public int GetMapHeight() {
|
||||
return heightMax;
|
||||
}
|
||||
|
||||
public void Initialize(int mapWidth, int mapHeight) {
|
||||
// Creates PathNodes
|
||||
for (int x = 0; x < mapNodes.Length; x++) {
|
||||
for (int y = 0; y < mapNodes[x].Length; y++) {
|
||||
mapNodes[x][y] = new PathNode(x, y);
|
||||
}
|
||||
}
|
||||
UpdateNodeConnections();
|
||||
}
|
||||
|
||||
private void UpdateNodeConnections() {
|
||||
for (int x = 0; x < mapNodes.Length; x++) {
|
||||
for (int y = 0; y < mapNodes[x].Length; y++) {
|
||||
if (y < mapNodes[x].Length - 1)
|
||||
mapNodes[x][y].north = mapNodes[x][y + 1];
|
||||
if (y > 0)
|
||||
mapNodes[x][y].south = mapNodes[x][y - 1];
|
||||
|
||||
if (x < mapNodes.Length - 1)
|
||||
mapNodes[x][y].east = mapNodes[x + 1][y];
|
||||
if (x > 0)
|
||||
mapNodes[x][y].west = mapNodes[x - 1][y];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void PrintMap(Transform prefabWalkable, Transform prefabUnwalkable) {
|
||||
for (int x = 0; x < mapNodes.Length; x++) {
|
||||
for (int y = 0; y < mapNodes[x].Length; y++) {
|
||||
PathNode pathNode = mapNodes[x][y];
|
||||
UnityEngine.Object.Instantiate(pathNode.IsWalkable() ? prefabWalkable : prefabUnwalkable, new Vector3(x * nodeSize, y * nodeSize), Quaternion.identity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void PrintMap(Action<int, int> printNode) {
|
||||
for (int x = 0; x < mapNodes.Length; x++) {
|
||||
for (int y = 0; y < mapNodes[x].Length; y++) {
|
||||
printNode(x, y);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void PrintMap(Action<int, int, Vector3> printNode) {
|
||||
for (int x = 0; x < mapNodes.Length; x++) {
|
||||
for (int y = 0; y < mapNodes[x].Length; y++) {
|
||||
printNode(x, y, worldOrigin + new Vector3(x * nodeSize, y * nodeSize));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void PrintMap(Action<int, int> printWalkable, Action<int, int> printUnwalkable) {
|
||||
for (int x = 0; x < mapNodes.Length; x++) {
|
||||
for (int y = 0; y < mapNodes[x].Length; y++) {
|
||||
PathNode pathNode = mapNodes[x][y];
|
||||
if (pathNode.IsWalkable()) {
|
||||
printWalkable(x, y);
|
||||
} else {
|
||||
printUnwalkable(x, y);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void PrintMap(Action<Vector3, Vector3, Color> createSprite) {
|
||||
PrintMap(
|
||||
(int x, int y) => {
|
||||
createSprite(worldOrigin + new Vector3(x * nodeSize, y * nodeSize), new Vector3(2, 2), Color.green);
|
||||
//MyUtils.World_Sprite.Create(worldOrigin + new Vector3(x * nodeSize, y * nodeSize), new Vector3(2, 2), SpriteHolder.instance.s_White, Color.green);
|
||||
},
|
||||
(int x, int y) => {
|
||||
createSprite(worldOrigin + new Vector3(x * nodeSize, y * nodeSize), new Vector3(2, 2), Color.red);
|
||||
//MyUtils.World_Sprite.Create(worldOrigin + new Vector3(x * nodeSize, y * nodeSize), new Vector3(2, 2), SpriteHolder.instance.s_White, Color.red);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/*public void PrintMapUpdateable() {
|
||||
}*/
|
||||
private bool IsValidShortcut(int startX, int startY, int endX, int endY) {
|
||||
//Debug.Log("Testing Shortcut: " + startX + ", " + startY + " -> " + endX + ", " + endY);
|
||||
int shortcutWeight = mapNodes[startX][startY].weight;
|
||||
Vector3 dir = (new Vector3(endX, endY) - new Vector3(startX, startY)).normalized;
|
||||
Vector3 test = new Vector3(startX, startY) + dir;
|
||||
int testX = Mathf.RoundToInt(test.x);
|
||||
int testY = Mathf.RoundToInt(test.y);
|
||||
// Check if shortcut is walkable
|
||||
//Debug.Log("Testing: "+testX+","+testY);
|
||||
while (!(testX == endX && testY == endY)) {
|
||||
if (!IsWalkable(testX, testY) || mapNodes[testX][testY].weight != shortcutWeight) {
|
||||
// Not walkable
|
||||
//Debug.Log("Shortcut invalid!");
|
||||
return false;
|
||||
} else {
|
||||
test += dir;
|
||||
testX = Mathf.RoundToInt(test.x);
|
||||
testY = Mathf.RoundToInt(test.y);
|
||||
//Debug.Log("Testing: "+testX+","+testY);
|
||||
}
|
||||
}
|
||||
// Shortcut walkable
|
||||
//Debug.Log("Shortcut valid!");
|
||||
return true;
|
||||
}
|
||||
|
||||
public List<PathNode> GetFindPath(MapPos startPos, MapPos finalPos) {
|
||||
int width = widthMax;
|
||||
int height = heightMax;
|
||||
|
||||
startPos = GetClosestValidPos(startPos.x, startPos.y);
|
||||
|
||||
if (startPos.x < 0 || startPos.y < 0 || finalPos.x < 0 || finalPos.y < 0 ||
|
||||
startPos.x >= width || finalPos.x >= width ||
|
||||
startPos.y >= height || finalPos.y >= height) {
|
||||
return null; //Out of bounds!
|
||||
}
|
||||
if (mapNodes[finalPos.x][finalPos.y].weight == WALL_WEIGHT ||
|
||||
mapNodes[startPos.x][startPos.y].weight == WALL_WEIGHT)
|
||||
return null; //Wall
|
||||
|
||||
return findPath(startPos.x, startPos.y, finalPos.x, finalPos.y);
|
||||
}
|
||||
|
||||
public List<PathNode> GetFindPathClosest(MapPos startPos, List<MapPos> allFinalPos) {
|
||||
List<PathNode> closest = null;
|
||||
|
||||
for (int i = 0; i < allFinalPos.Count; i++) {
|
||||
List<PathNode> path = GetFindPath(startPos, allFinalPos[i]);
|
||||
if (path != null) {
|
||||
if (closest == null)
|
||||
closest = path;
|
||||
else {
|
||||
if (path.Count < closest.Count) {
|
||||
closest = path;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return closest;
|
||||
}
|
||||
|
||||
public bool FindPath(int startX, int startY, MapPos finalPos, OnPathCallback callback) {
|
||||
return FindPath(startX, startY, new List<MapPos>() { finalPos }, callback);
|
||||
}
|
||||
|
||||
public bool FindPath(int startX, int startY, List<MapPos> finalPositions, OnPathCallback callback) {
|
||||
int width = widthMax;
|
||||
int height = heightMax;
|
||||
|
||||
MapPos start = GetClosestValidPos(startX, startY);
|
||||
startX = start.x;
|
||||
startY = start.y;
|
||||
List<PathRoute> paths = new List<PathRoute>();
|
||||
|
||||
foreach (MapPos finalPos in finalPositions) {
|
||||
if (startX < 0 || startY < 0 || finalPos.x < 0 || finalPos.y < 0 ||
|
||||
startX >= width || finalPos.x >= width ||
|
||||
startY >= height || finalPos.y >= height) {
|
||||
continue; // Out of bounds!
|
||||
}
|
||||
if (mapNodes[finalPos.x][finalPos.y].weight == WALL_WEIGHT ||
|
||||
mapNodes[startX][startY].weight == WALL_WEIGHT) {
|
||||
// Find close non-wall start/end
|
||||
continue; // Wall
|
||||
}
|
||||
|
||||
List<PathNode> currentPath = findPath(startX, startY, finalPos.x, finalPos.y);
|
||||
if (currentPath.Count <= 0 && (startX != finalPos.x || startY != finalPos.y)) {
|
||||
// Don't add path if there's no path
|
||||
} else {
|
||||
if (!finalPos.straightToOffset) {
|
||||
// Don't go straight to offset, add dummy
|
||||
currentPath.Add(currentPath[currentPath.Count - 1]);
|
||||
}
|
||||
paths.Add(new PathRoute(currentPath, worldOrigin, nodeSize, finalPos));
|
||||
}
|
||||
}
|
||||
int smallest = 0;
|
||||
for (int i = 1; i < paths.Count; i++) {
|
||||
if (paths[i].pathNodeList.Count < paths[smallest].pathNodeList.Count)
|
||||
smallest = i;
|
||||
}
|
||||
|
||||
if (paths.Count <= 0 || (paths.Count > 0 && paths[smallest].pathNodeList.Count <= 0)) {
|
||||
// No path
|
||||
return false;
|
||||
} else {
|
||||
callback(paths[smallest].pathNodeList, paths[smallest].finalPos);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public Vector3 GetClosestValidPosition(Vector3 position) {
|
||||
int mapX, mapY;
|
||||
ConvertVectorPositionValidate(position, out mapX, out mapY);
|
||||
MapPos closestValidMapPos = GetClosestValidPos(mapX, mapY);
|
||||
PathNode pathNode = mapNodes[closestValidMapPos.x][closestValidMapPos.y];
|
||||
return pathNode.GetWorldVector(worldOrigin, nodeSize);
|
||||
}
|
||||
|
||||
private MapPos GetClosestValidPos(int mapX, int mapY) {
|
||||
int width = widthMax;
|
||||
int height = heightMax;
|
||||
// Inside bounds
|
||||
while (mapX < 0) mapX++;
|
||||
while (mapY < 0) mapY++;
|
||||
while (mapX >= width) mapX--;
|
||||
while (mapY >= height) mapY--;
|
||||
|
||||
// Check inside walls
|
||||
if (mapNodes[mapX][mapY].weight == WALL_WEIGHT) {
|
||||
int radius = 1;
|
||||
MapPos valid = null;
|
||||
do {
|
||||
valid = GetValidPosRadius(mapX, mapY, radius);
|
||||
radius++;
|
||||
} while (valid == null && radius < 100);
|
||||
if (radius == 100) return new MapPos(0, 0);
|
||||
return valid;
|
||||
}
|
||||
return new MapPos(mapX, mapY);
|
||||
}
|
||||
|
||||
private MapPos GetValidPosRadius(int mapX, int mapY, int radius) {
|
||||
int width = widthMax;
|
||||
int height = heightMax;
|
||||
|
||||
int endX = mapX + radius;
|
||||
for (int i = mapX - radius; i <= endX; i++) {
|
||||
int j = mapY + radius;
|
||||
if (i < 0 || i >= width || j < 0 || j >= height) {
|
||||
//Out of bounds
|
||||
} else {
|
||||
if (mapNodes[i][j].weight != WALL_WEIGHT)
|
||||
return new MapPos(i, j);
|
||||
}
|
||||
|
||||
j = mapY - radius;
|
||||
if (i < 0 || i >= width || j < 0 || j >= height) {
|
||||
//Out of bounds
|
||||
} else {
|
||||
if (mapNodes[i][j].weight != WALL_WEIGHT)
|
||||
return new MapPos(i, j);
|
||||
}
|
||||
|
||||
}
|
||||
int endY = mapY + radius;
|
||||
for (int j = mapY - radius + 1; j < endY; j++) {
|
||||
int i = mapX - radius;
|
||||
if (i < 0 || i >= width || j < 0 || j >= height) {
|
||||
//Out of bounds
|
||||
} else {
|
||||
if (mapNodes[i][j].weight != WALL_WEIGHT)
|
||||
return new MapPos(i, j);
|
||||
}
|
||||
|
||||
i = mapX + radius;
|
||||
if (i < 0 || i >= width || j < 0 || j >= height) {
|
||||
//Out of bounds
|
||||
} else {
|
||||
if (mapNodes[i][j].weight != WALL_WEIGHT)
|
||||
return new MapPos(i, j);
|
||||
}
|
||||
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void ApplyShortcuts(ref List<PathNode> pathNodeList) {
|
||||
if (pathNodeList.Count > 1) {
|
||||
int testStartNodeIndex = 1;
|
||||
while (testStartNodeIndex < pathNodeList.Count - 2) { // Only test untils there's 3 nodes left
|
||||
PathNode testStartNode = pathNodeList[testStartNodeIndex];
|
||||
int testEndNodeIndex = testStartNodeIndex + 2;
|
||||
// Test start node with node 2 indexes in front
|
||||
PathNode testEndNode = pathNodeList[testEndNodeIndex];
|
||||
while (IsValidShortcut(testStartNode.xPos, testStartNode.yPos, testEndNode.xPos, testEndNode.yPos)) {
|
||||
// Valid shortcut
|
||||
// Remove in between node
|
||||
pathNodeList.RemoveAt(testStartNodeIndex + 1);
|
||||
if (testEndNodeIndex >= pathNodeList.Count - 1) {
|
||||
// No more nodes
|
||||
break;
|
||||
} else {
|
||||
// Test next node
|
||||
testEndNode = pathNodeList[testEndNodeIndex];
|
||||
}
|
||||
}
|
||||
// Start next shortcut test from this end node
|
||||
testStartNodeIndex = testEndNodeIndex;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public PathRoute GetPathRouteWithShortcuts(Vector3 start, Vector3 end) {
|
||||
List<PathNode> pathNodeList = GetPath(start, end);
|
||||
ApplyShortcuts(ref pathNodeList);
|
||||
return new PathRoute(pathNodeList, worldOrigin, nodeSize, null);
|
||||
}
|
||||
|
||||
public PathRoute GetPathRoute(Vector3 start, Vector3 end) {
|
||||
List<PathNode> pathNodeList = GetPath(start, end);
|
||||
return new PathRoute(pathNodeList, worldOrigin, nodeSize, null);
|
||||
}
|
||||
|
||||
public List<PathNode> GetPath(Vector3 start, Vector3 end) {
|
||||
start = start - worldOrigin;
|
||||
end = end - worldOrigin;
|
||||
start = start / nodeSize;
|
||||
end = end / nodeSize;
|
||||
MapPos startMapPos = GetClosestValidPos(Mathf.RoundToInt(start.x), Mathf.RoundToInt(start.y));
|
||||
MapPos endMapPos = GetClosestValidPos(Mathf.RoundToInt(end.x), Mathf.RoundToInt(end.y));
|
||||
return findPath(startMapPos.x, startMapPos.y, endMapPos.x, endMapPos.y);
|
||||
}
|
||||
|
||||
public List<PathNode> findPath(int startX, int startY, int endX, int endY) {
|
||||
List<PathNode> ret = new List<PathNode>();
|
||||
// Calculate H for all nodes
|
||||
CalculateAllHeuristics(endX, endY);
|
||||
|
||||
// Start finding target
|
||||
foundTarget = false;
|
||||
binaryTree = new BinaryTree();
|
||||
openListCount = 1;
|
||||
|
||||
PathNode currentNode = mapNodes[startX][startY];
|
||||
PathNode targetNode = mapNodes[endX][endY];
|
||||
|
||||
if (currentNode == targetNode) {
|
||||
return new List<PathNode> { currentNode };
|
||||
}
|
||||
int iterations = 0;
|
||||
do {
|
||||
iterations++;
|
||||
currentNode = FindTarget(currentNode, targetNode);
|
||||
} while (!foundTarget && openListCount > 0 && iterations < 60000);
|
||||
if (iterations >= 60000) UnityEngine.Debug.Log("iteration overload");
|
||||
|
||||
if (foundTarget) {
|
||||
// Get path
|
||||
currentNode = targetNode;
|
||||
ret.Add(currentNode);
|
||||
while (currentNode.parent != null && currentNode.parent != currentNode) {
|
||||
ret.Add(currentNode.parent);
|
||||
currentNode = currentNode.parent;
|
||||
}
|
||||
if (currentNode.parent == currentNode) UnityEngine.Debug.Log("parent == child");
|
||||
} else {
|
||||
// No path possible
|
||||
}
|
||||
ret.Reverse();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
private PathNode FindTarget(PathNode currentNode, PathNode targetNode) {
|
||||
// Check the north node
|
||||
if (currentNode.moveNorth) DetermineNodeValues(currentNode, currentNode.north, targetNode);
|
||||
// Check the east node
|
||||
if (currentNode.moveEast) DetermineNodeValues(currentNode, currentNode.east, targetNode);
|
||||
// Check the south node
|
||||
if (currentNode.moveSouth) DetermineNodeValues(currentNode, currentNode.south, targetNode);
|
||||
// Check the west node
|
||||
if (currentNode.moveWest) DetermineNodeValues(currentNode, currentNode.west, targetNode);
|
||||
|
||||
if (!foundTarget) {
|
||||
// Once done checking add to the closed list and remove from the open list
|
||||
AddToClosedList(currentNode);
|
||||
RemoveFromOpenList(currentNode);
|
||||
|
||||
// Get the next node with the smallest F value
|
||||
return GetSmallestFValueNode();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private void DetermineNodeValues(PathNode currentNode, PathNode testing, PathNode targetNode) {
|
||||
// Dont work on null nodes
|
||||
if (testing == null)
|
||||
return;
|
||||
|
||||
// Check to see if the node is the target
|
||||
if (testing == targetNode) {
|
||||
targetNode.parent = currentNode;
|
||||
foundTarget = true;
|
||||
return;
|
||||
}
|
||||
|
||||
// Ignore Walls
|
||||
if (currentNode.weight == WALL_WEIGHT || testing.weight == WALL_WEIGHT)
|
||||
return;
|
||||
|
||||
// While the node has not already been tested
|
||||
if (!testing.isOnClosedList) {
|
||||
// Check to see if the node is already on the open list
|
||||
if (testing.isOnOpenList) {
|
||||
// Get a Gcost to move from this node to the testing node
|
||||
int newGcost = currentNode.gValue + currentNode.weight + movementCost;
|
||||
|
||||
// If the G cost is better then change the nodes parent and update its costs.
|
||||
if (newGcost < testing.gValue) {
|
||||
testing.parent = currentNode;
|
||||
testing.gValue = newGcost;
|
||||
binaryTree.RemoveNode(testing);
|
||||
testing.CalculateFValue();
|
||||
binaryTree.AddNode(testing);
|
||||
}
|
||||
} else {
|
||||
// Set the testing nodes parent to the current location, calculate its costs, and add it to the open list
|
||||
testing.parent = currentNode;
|
||||
testing.gValue = currentNode.gValue + currentNode.weight + movementCost;
|
||||
testing.CalculateFValue();
|
||||
AddToOpenList(testing);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void AddToOpenList(PathNode node) {
|
||||
binaryTree.AddNode(node);
|
||||
openListCount++;
|
||||
node.isOnOpenList = true;
|
||||
}
|
||||
|
||||
private void AddToClosedList(PathNode currentNode) {
|
||||
currentNode.isOnClosedList = true;
|
||||
}
|
||||
|
||||
private void RemoveFromOpenList(PathNode currentNode) {
|
||||
binaryTree.RemoveNode(currentNode);
|
||||
openListCount--;
|
||||
currentNode.isOnOpenList = false;
|
||||
}
|
||||
|
||||
private PathNode GetSmallestFValueNode() {
|
||||
return binaryTree.GetSmallest();
|
||||
}
|
||||
|
||||
private void CalculateManhattanDistance(PathNode currentNode, int currX, int currY, int targetX, int targetY) {
|
||||
currentNode.parent = null;
|
||||
currentNode.hValue = (Mathf.Abs(currX - targetX) + Mathf.Abs(currY - targetY));
|
||||
currentNode.isOnOpenList = false;
|
||||
currentNode.isOnClosedList = false;
|
||||
}
|
||||
private void CalculateAllHeuristics(int endX, int endY) {
|
||||
int rows = heightMax;
|
||||
int cols = widthMax;
|
||||
for (int x = 0; x < cols; x++) {
|
||||
for (int y = 0; y < rows; y++) {
|
||||
CalculateManhattanDistance(mapNodes[x][y], x, y, endX, endY);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void ResetRestrictions() {
|
||||
for (int i = 0; i < GetMapWidth(); i++) {
|
||||
for (int j = 0; j < GetMapHeight(); j++) {
|
||||
mapNodes[i][j].ResetRestrictions();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void RefreshAllHitboxes() {
|
||||
for (int x = 0; x < widthMax; x++) {
|
||||
for (int y = 0; y < heightMax; y++) {
|
||||
mapNodes[x][y].TestHitbox();
|
||||
}
|
||||
}
|
||||
//Event_Speaker.Broadcast(Event_Trigger.Pathfinding_Refresh);
|
||||
}
|
||||
|
||||
public void RefreshHitbox(MapPos mapPos) {
|
||||
mapNodes[mapPos.x][mapPos.y].TestHitbox();
|
||||
//Event_Speaker.Broadcast(Event_Trigger.Pathfinding_Refresh);
|
||||
}
|
||||
|
||||
public bool IsWalkable(MapPos mapPos) {
|
||||
return mapNodes[mapPos.x][mapPos.y].weight != WALL_WEIGHT;
|
||||
}
|
||||
|
||||
public bool IsWalkable(int x, int y) {
|
||||
return mapNodes[x][y].weight != WALL_WEIGHT;
|
||||
}
|
||||
|
||||
public bool IsWall(int x, int y) {
|
||||
return mapNodes[x][y].weight == WALL_WEIGHT;
|
||||
}
|
||||
|
||||
public bool HasWeight(int x, int y) {
|
||||
return mapNodes[x][y].weight > 0;
|
||||
}
|
||||
|
||||
|
||||
private void ConvertVectorPosition(Vector3 position, out int x, out int y) {
|
||||
x = (int)((position.x - worldOrigin.x) / nodeSize);
|
||||
y = (int)((position.y - worldOrigin.y) / nodeSize);
|
||||
}
|
||||
private void ConvertVectorPositionValidate(Vector3 position, out int x, out int y) {
|
||||
ConvertVectorPosition(position, out x, out y);
|
||||
|
||||
if (x < 0) x = 0;
|
||||
if (y < 0) y = 0;
|
||||
if (x >= widthMax) x = widthMax - 1;
|
||||
if (y >= heightMax) y = heightMax - 1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
8
Assets/_/Stuff/GridPathfinding/GridPathfinding.cs.meta
Normal file
8
Assets/_/Stuff/GridPathfinding/GridPathfinding.cs.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: eace4f719d58cb648a489e77d2f64e7f
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
41
Assets/_/Stuff/GridPathfinding/LastMoveTo.cs
Normal file
41
Assets/_/Stuff/GridPathfinding/LastMoveTo.cs
Normal file
@ -0,0 +1,41 @@
|
||||
/*
|
||||
------------------- Code Monkey -------------------
|
||||
|
||||
Thank you for downloading this package
|
||||
I hope you find it useful in your projects
|
||||
If you have any questions let me know
|
||||
Cheers!
|
||||
|
||||
unitycodemonkey.com
|
||||
--------------------------------------------------
|
||||
*/
|
||||
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
//using myNameSpace;
|
||||
|
||||
namespace GridPathfindingSystem {
|
||||
|
||||
public class LastMoveTo {
|
||||
|
||||
public List<MapPos> mapPos;
|
||||
public GridPathfinding.UnitMovementCallbackType callbackType;
|
||||
public object obj;
|
||||
public UnitMovement.PathCallback callback;
|
||||
|
||||
public LastMoveTo(List<MapPos> _mapPos, GridPathfinding.UnitMovementCallbackType _callbackType, object _obj, UnitMovement.PathCallback _callback) {
|
||||
mapPos = _mapPos;
|
||||
callbackType = _callbackType;
|
||||
obj = _obj;
|
||||
callback = _callback;
|
||||
}
|
||||
public LastMoveTo(MapPos _mapPos, GridPathfinding.UnitMovementCallbackType _callbackType, object _obj, UnitMovement.PathCallback _callback) {
|
||||
mapPos = new List<MapPos>() { _mapPos };
|
||||
callbackType = _callbackType;
|
||||
obj = _obj;
|
||||
callback = _callback;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
8
Assets/_/Stuff/GridPathfinding/LastMoveTo.cs.meta
Normal file
8
Assets/_/Stuff/GridPathfinding/LastMoveTo.cs.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 82477c170e8678441ac7c96ea78318ee
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
96
Assets/_/Stuff/GridPathfinding/MapPos.cs
Normal file
96
Assets/_/Stuff/GridPathfinding/MapPos.cs
Normal file
@ -0,0 +1,96 @@
|
||||
/*
|
||||
------------------- Code Monkey -------------------
|
||||
|
||||
Thank you for downloading this package
|
||||
I hope you find it useful in your projects
|
||||
If you have any questions let me know
|
||||
Cheers!
|
||||
|
||||
unitycodemonkey.com
|
||||
--------------------------------------------------
|
||||
*/
|
||||
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace GridPathfindingSystem {
|
||||
|
||||
public class MapPos {
|
||||
|
||||
public int x;
|
||||
public int y;
|
||||
public float offsetX;
|
||||
public float offsetY;
|
||||
public bool straightToOffset = true;
|
||||
|
||||
public MapPos(int _x, int _y, float _offsetX = 0f, float _offsetY = 0f, bool _straightToOffset = true) {
|
||||
x = _x;
|
||||
y = _y;
|
||||
offsetX = _offsetX;
|
||||
offsetY = _offsetY;
|
||||
straightToOffset = _straightToOffset;
|
||||
}
|
||||
public bool Equals(MapPos p2) {
|
||||
// Check if this one equals that one
|
||||
return x == p2.x && y == p2.y;
|
||||
}
|
||||
public bool EqualsDeep(MapPos p2) {
|
||||
// Check if this one equals that one
|
||||
return x == p2.x && y == p2.y && offsetX == p2.offsetX && offsetY == p2.offsetY && straightToOffset == p2.straightToOffset;
|
||||
}
|
||||
public override string ToString() {
|
||||
return "x:" + x + ", y:" + y;
|
||||
}
|
||||
public string ToStringThorough() {
|
||||
return "x:" + x + ", y:" + y + "; ox:" + offsetX + ", oy:" + offsetY + ", s: " + straightToOffset;
|
||||
}
|
||||
public void ResetOffset() {
|
||||
offsetX = 0f;
|
||||
offsetY = 0f;
|
||||
}
|
||||
public MapPos ClearOffset() {
|
||||
return new MapPos(x, y);
|
||||
}
|
||||
public MapPos Clone() {
|
||||
return new MapPos(x, y, offsetX, offsetY, straightToOffset);
|
||||
}
|
||||
public MapPos AddPosCopy(int x, int y) {
|
||||
return new MapPos(this.x + x, this.y + y);
|
||||
}
|
||||
|
||||
public static int Distance(MapPos p1, MapPos p2) {
|
||||
return System.Math.Abs(p1.x - p2.x) + System.Math.Abs(p1.y - p2.y);
|
||||
}
|
||||
public static bool ListContains(List<MapPos> list, MapPos mapPos) {
|
||||
// Check if map pos is in list
|
||||
foreach (MapPos pos in list)
|
||||
if (pos.Equals(mapPos))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
public string Save() {
|
||||
// Returns a string to be used in savefiles
|
||||
string[] content = new string[]{
|
||||
""+x,
|
||||
""+y,
|
||||
""+offsetX,
|
||||
""+offsetY,
|
||||
""+straightToOffset,
|
||||
};
|
||||
return string.Join("#MAPPOS#", content);
|
||||
}
|
||||
public static MapPos Load(string save) {
|
||||
return new MapPos(save);
|
||||
}
|
||||
public MapPos(string save) {
|
||||
// Loads a MapPos object form a given savefile string
|
||||
string[] content = save.Split(new string[] { "#MAPPOS#" }, System.StringSplitOptions.None);
|
||||
x = int.Parse(content[0]);
|
||||
y = int.Parse(content[1]);
|
||||
offsetX = float.Parse(content[2]);
|
||||
offsetY = float.Parse(content[3]);
|
||||
straightToOffset = bool.Parse(content[4]);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
8
Assets/_/Stuff/GridPathfinding/MapPos.cs.meta
Normal file
8
Assets/_/Stuff/GridPathfinding/MapPos.cs.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: af7b62dd0b271c6449459b06c6ac897a
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
91
Assets/_/Stuff/GridPathfinding/PathNode.cs
Normal file
91
Assets/_/Stuff/GridPathfinding/PathNode.cs
Normal file
@ -0,0 +1,91 @@
|
||||
/*
|
||||
------------------- Code Monkey -------------------
|
||||
|
||||
Thank you for downloading this package
|
||||
I hope you find it useful in your projects
|
||||
If you have any questions let me know
|
||||
Cheers!
|
||||
|
||||
unitycodemonkey.com
|
||||
--------------------------------------------------
|
||||
*/
|
||||
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
|
||||
namespace GridPathfindingSystem {
|
||||
|
||||
public class PathNode {
|
||||
|
||||
public event EventHandler OnWalkableChanged;
|
||||
|
||||
public int xPos;
|
||||
public int yPos;
|
||||
public PathNode parent;
|
||||
public PathNode north;
|
||||
public PathNode south;
|
||||
public PathNode west;
|
||||
public PathNode east;
|
||||
public bool moveNorth;
|
||||
public bool moveSouth;
|
||||
public bool moveWest;
|
||||
public bool moveEast;
|
||||
|
||||
public bool isOnOpenList = false;
|
||||
public bool isOnClosedList = false;
|
||||
|
||||
public int weight = 0;
|
||||
public int gValue = 0;
|
||||
public int hValue;
|
||||
public int fValue;
|
||||
|
||||
//public Transform trans;
|
||||
//public int layerMask = 1 << 9;
|
||||
|
||||
public PathNode(int _xPos, int _yPos) {
|
||||
xPos = _xPos;
|
||||
yPos = _yPos;
|
||||
|
||||
moveNorth = true;
|
||||
moveSouth = true;
|
||||
moveWest = true;
|
||||
moveEast = true;
|
||||
|
||||
//trans = ((GameObject) Object.Instantiate(Resources.Load("pfPathNode"), new Vector3(xPos*10, 0, zPos*10), Quaternion.identity)).transform;
|
||||
TestHitbox();
|
||||
}
|
||||
public void ResetRestrictions() {
|
||||
moveNorth = true;
|
||||
moveSouth = true;
|
||||
moveWest = true;
|
||||
moveEast = true;
|
||||
}
|
||||
public override string ToString() {
|
||||
return "x: " + xPos + ", y:" + yPos;
|
||||
}
|
||||
public void SetWalkable(bool walkable) {
|
||||
weight = walkable ? 0 : GridPathfinding.WALL_WEIGHT;
|
||||
if (OnWalkableChanged != null) OnWalkableChanged(this, EventArgs.Empty);
|
||||
}
|
||||
public void SetWeight(int weight) {
|
||||
this.weight = weight;
|
||||
}
|
||||
public bool IsWalkable() {
|
||||
return weight < GridPathfinding.WALL_WEIGHT;
|
||||
}
|
||||
public void TestHitbox() {
|
||||
weight = 0;
|
||||
}
|
||||
public MapPos GetMapPos() {
|
||||
return new MapPos(xPos, yPos);
|
||||
}
|
||||
public void CalculateFValue() {
|
||||
fValue = gValue + hValue;
|
||||
}
|
||||
public Vector3 GetWorldVector(Vector3 worldOrigin, float nodeSize) {
|
||||
return worldOrigin + new Vector3(xPos * nodeSize, yPos * nodeSize);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
8
Assets/_/Stuff/GridPathfinding/PathNode.cs.meta
Normal file
8
Assets/_/Stuff/GridPathfinding/PathNode.cs.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a4734582c1b75204b8e0d988a68c69fa
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
35
Assets/_/Stuff/GridPathfinding/PathQueue.cs
Normal file
35
Assets/_/Stuff/GridPathfinding/PathQueue.cs
Normal file
@ -0,0 +1,35 @@
|
||||
/*
|
||||
------------------- Code Monkey -------------------
|
||||
|
||||
Thank you for downloading this package
|
||||
I hope you find it useful in your projects
|
||||
If you have any questions let me know
|
||||
Cheers!
|
||||
|
||||
unitycodemonkey.com
|
||||
--------------------------------------------------
|
||||
*/
|
||||
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
|
||||
namespace GridPathfindingSystem {
|
||||
|
||||
public class PathQueue {
|
||||
|
||||
public int startX;
|
||||
public int startY;
|
||||
public int endX;
|
||||
public int endY;
|
||||
public GridPathfinding.OnPathCallback callback;
|
||||
|
||||
public PathQueue(int _startX, int _startY, int _endX, int _endY, GridPathfinding.OnPathCallback _callback) {
|
||||
startX = _startX;
|
||||
startY = _startY;
|
||||
endX = _endX;
|
||||
endY = _endY;
|
||||
callback = _callback;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
8
Assets/_/Stuff/GridPathfinding/PathQueue.cs.meta
Normal file
8
Assets/_/Stuff/GridPathfinding/PathQueue.cs.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: be5654ed6c4e7d04a80a23cacd4284ca
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
46
Assets/_/Stuff/GridPathfinding/PathRoute.cs
Normal file
46
Assets/_/Stuff/GridPathfinding/PathRoute.cs
Normal file
@ -0,0 +1,46 @@
|
||||
/*
|
||||
------------------- Code Monkey -------------------
|
||||
|
||||
Thank you for downloading this package
|
||||
I hope you find it useful in your projects
|
||||
If you have any questions let me know
|
||||
Cheers!
|
||||
|
||||
unitycodemonkey.com
|
||||
--------------------------------------------------
|
||||
*/
|
||||
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace GridPathfindingSystem {
|
||||
|
||||
public class PathRoute {
|
||||
|
||||
public List<PathNode> pathNodeList;
|
||||
public List<Vector3> pathVectorList;
|
||||
public MapPos finalPos;
|
||||
|
||||
public PathRoute(List<PathNode> pathNodeList, List<Vector3> pathVectorList, MapPos finalPos) {
|
||||
this.pathNodeList = pathNodeList;
|
||||
this.pathVectorList = pathVectorList;
|
||||
this.finalPos = finalPos;
|
||||
}
|
||||
|
||||
public PathRoute(List<PathNode> pathNodeList, Vector3 worldOrigin, float nodeSize, MapPos finalPos) {
|
||||
this.pathNodeList = pathNodeList;
|
||||
pathVectorList = new List<Vector3>();
|
||||
foreach (PathNode pathNode in pathNodeList) {
|
||||
pathVectorList.Add(pathNode.GetWorldVector(worldOrigin, nodeSize));
|
||||
}
|
||||
this.finalPos = finalPos;
|
||||
}
|
||||
|
||||
public void AddVector(Vector3 vector) {
|
||||
pathVectorList.Add(vector);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
8
Assets/_/Stuff/GridPathfinding/PathRoute.cs.meta
Normal file
8
Assets/_/Stuff/GridPathfinding/PathRoute.cs.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c49d6b0e0cdcbdd4192999d5dc56793f
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user