Compare commits

..

47 Commits

Author SHA1 Message Date
Dominik G.
76a513b577 Refaktro funguje lol 2025-11-01 18:15:05 +01:00
Dominik G.
bec90a20a0 Public metody pro vlastní Menu. 2025-11-01 16:32:34 +01:00
Dominik G.
fbe588c854 Low Fix 2025-10-31 14:03:04 +01:00
Dominik G.
4c110f98c0 Nekopletní fix 2025-10-29 19:14:20 +01:00
Dominik G.
cd0ef3c73a Jmenovka 2025-10-29 16:44:55 +01:00
Dominik G.
691c80343e wtf sračka 2025-10-29 15:36:37 +01:00
Dominik G.
2c283c6623 Fix UI 2025-10-28 14:49:02 +01:00
Dominik G.
d0a16d1e44 Marakake Ficx 2025-10-28 12:09:49 +01:00
Dominik G.
e2fa430d50 Marek Fix 2025-10-28 12:04:22 +01:00
0cb9be4070 Revert "online fix"
This reverts commit 3221488a9e.
2025-10-27 15:10:17 +01:00
3221488a9e online fix 2025-10-27 15:06:26 +01:00
43ea25b9e3 online fix 2025-10-27 14:58:20 +01:00
b34e135610 online fix 2025-10-27 14:47:03 +01:00
24a09dac43 online fix 2025-10-27 14:41:22 +01:00
cf44edc19a online fix 2025-10-27 14:34:26 +01:00
3c5507dd87 online fix 2025-10-27 14:18:56 +01:00
9ded503704 online fix 2025-10-27 14:09:52 +01:00
8ea4b173a3 online fix 2025-10-27 13:54:38 +01:00
3ff9819d78 online fix 2025-10-27 13:45:26 +01:00
Dominik G.
94511923d5 Hotovo animace 2025-10-27 13:15:34 +01:00
Dominik G.
2435f0d27f Merge remote-tracking branch 'origin/master' 2025-10-27 12:59:19 +01:00
Dominik G.
352ba8a27b Animace 2+ 2025-10-27 12:58:27 +01:00
4d3e9da172 online fix 2025-10-27 12:58:26 +01:00
Dominik G.
501312e0c2 Animace 2+ 2025-10-27 12:57:52 +01:00
e55827d9d0 online fix 2025-10-27 12:50:17 +01:00
e6759d6610 online fix 2025-10-27 12:37:18 +01:00
Dominik G.
96d50bfad5 Animace 2025-10-26 14:26:09 +01:00
40a62b5b5a enemy spawner 2025-10-26 14:17:31 +01:00
20d3b46834 enemy ai 2025-10-24 20:31:52 +02:00
4229355a32 enemy ai 2025-10-24 20:18:24 +02:00
db45509eaa enemy ai 2025-10-24 20:06:15 +02:00
b13d748ec4 enemy ai 2025-10-24 19:56:38 +02:00
Dominik G.
33d34c251b 1 task 2025-10-24 19:28:42 +02:00
e1abeeb547 Join and leave improvements 2025-10-12 14:36:59 +02:00
Dominik G.
ba150ac5d3 Fixed 2025-10-12 14:18:12 +02:00
3594fdd761 Character camera and movement fix 2025-10-12 14:09:41 +02:00
c6ec8ead32 Character camera and movement fix - maybe 3 2025-10-12 13:51:51 +02:00
43865e57f1 Character camera and movement fix - maybe 2 2025-10-12 13:42:19 +02:00
78836c0691 Character camera and movement fix - maybe 2025-10-12 13:27:37 +02:00
Dominik G.
0f716ab4a7 Fix ? 2025-10-12 12:01:26 +02:00
Dominik G.
515160b1ec Jo Jo funguje Kappa 2025-10-06 18:15:27 +02:00
807e8fc5f3 online game working 2025-10-05 19:54:30 +02:00
73595994d1 online game working 2025-10-05 19:31:52 +02:00
dd89012919 online game working 2025-10-05 19:24:52 +02:00
7cec95b8a0 online game working 2025-10-05 19:15:37 +02:00
586d364772 lobby tweaking 2025-10-05 19:01:48 +02:00
6ebb88cb26 scene push 2025-10-05 18:40:40 +02:00
2482 changed files with 1402707 additions and 15158 deletions

View File

@@ -13,4 +13,24 @@ MonoBehaviour:
m_Name: DefaultNetworkPrefabs m_Name: DefaultNetworkPrefabs
m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.NetworkPrefabsList m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.NetworkPrefabsList
IsDefault: 1 IsDefault: 1
List: [] List:
- Override: 0
Prefab: {fileID: 7059514996416789454, guid: fe75fe22781f92b369675fdfc9657f7d, type: 3}
SourcePrefabToOverride: {fileID: 0}
SourceHashToOverride: 0
OverridingTargetPrefab: {fileID: 0}
- Override: 0
Prefab: {fileID: 2809934685114486836, guid: ae082cf2d3a36684fb23d8ec0e643150, type: 3}
SourcePrefabToOverride: {fileID: 0}
SourceHashToOverride: 0
OverridingTargetPrefab: {fileID: 0}
- Override: 0
Prefab: {fileID: 1170732337855516, guid: b5051c49d05768c73a8c42e1967fe4b2, type: 3}
SourcePrefabToOverride: {fileID: 0}
SourceHashToOverride: 0
OverridingTargetPrefab: {fileID: 0}
- Override: 0
Prefab: {fileID: 1170732337855516, guid: d086cbb30c7bb4ba3a58cb2024fa0b31, type: 3}
SourcePrefabToOverride: {fileID: 0}
SourceHashToOverride: 0
OverridingTargetPrefab: {fileID: 0}

View File

@@ -0,0 +1,133 @@
#if UNITY_EDITOR
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;
using UnityEngine.SceneManagement;
// Project namespaces
using MegaKoop.Steam; // SteamManager, SteamLobbyService
using MegaKoop.Game.Networking; // SteamCoopNetworkManager, SteamP2PTransport, LobbyGameSceneCoordinator
public static class CharacterSceneSetupGenerator
{
private const string WizardPrefabPath = "Assets/Game/Hero/Wizard.prefab";
[MenuItem("Tools/MegaKoop/Setup Character Scene Objects", priority = 1000)]
public static void SetupCharacterScene()
{
var scene = SceneManager.GetActiveScene();
if (!scene.IsValid())
{
EditorUtility.DisplayDialog("Character Scene Setup", "No valid scene is open. Please open your CharacterScene and run again.", "OK");
return;
}
Undo.IncrementCurrentGroup();
int group = Undo.GetCurrentGroup();
// 1) Ensure SteamServices root and required components
var servicesRoot = GameObject.Find("SteamServices");
if (servicesRoot == null)
{
servicesRoot = new GameObject("SteamServices");
Undo.RegisterCreatedObjectUndo(servicesRoot, "Create SteamServices");
}
EnsureComponent<SteamManager>(servicesRoot, "Add SteamManager");
var lobby = EnsureComponent<SteamLobbyService>(servicesRoot, "Add SteamLobbyService");
var coop = EnsureComponent<SteamCoopNetworkManager>(servicesRoot, "Add SteamCoopNetworkManager");
EnsureComponent<SteamP2PTransport>(servicesRoot, "Add SteamP2PTransport");
var coordinator = EnsureComponent<LobbyGameSceneCoordinator>(servicesRoot, "Add LobbyGameSceneCoordinator");
// Keep servicesRoot persistent across scenes to match runtime behavior
if (!Application.isPlaying)
{
// Editor-time: mark as DontSaveInBuild is not needed; users expect this object in scene.
// At runtime, code calls DontDestroyOnLoad itself.
}
// 2) Ensure Wizard template exists in scene root
var wizardInScene = GameObject.Find("Wizard");
if (wizardInScene == null)
{
var prefab = AssetDatabase.LoadAssetAtPath<GameObject>(WizardPrefabPath);
if (prefab != null)
{
var instantiated = PrefabUtility.InstantiatePrefab(prefab, scene) as GameObject;
if (instantiated != null)
{
Undo.RegisterCreatedObjectUndo(instantiated, "Instantiate Wizard Template");
instantiated.name = "Wizard"; // Ensure exact name for coordinator lookup
instantiated.transform.SetPositionAndRotation(Vector3.zero, Quaternion.identity);
}
}
else
{
// Fallback: create a simple placeholder
var placeholder = GameObject.CreatePrimitive(PrimitiveType.Capsule);
Undo.RegisterCreatedObjectUndo(placeholder, "Create Wizard Placeholder");
placeholder.name = "Wizard";
placeholder.transform.SetPositionAndRotation(Vector3.zero, Quaternion.identity);
// Controller components are optional for template; coordinator will add bridges on clones.
placeholder.AddComponent<CharacterController>();
placeholder.AddComponent<MegaKoop.Game.ThirdPersonCharacterController>();
}
}
// 3) Optional: ensure a basic ground so CharacterController can stand
if (GameObject.Find("Ground") == null)
{
var ground = GameObject.CreatePrimitive(PrimitiveType.Plane);
Undo.RegisterCreatedObjectUndo(ground, "Create Ground");
ground.name = "Ground";
ground.transform.position = Vector3.zero;
ground.transform.localScale = Vector3.one * 2f;
}
// 4) Optional: ensure there is at least one light
if (Object.FindObjectOfType<Light>() == null)
{
var lightGO = new GameObject("Directional Light");
Undo.RegisterCreatedObjectUndo(lightGO, "Create Directional Light");
var light = lightGO.AddComponent<Light>();
light.type = LightType.Directional;
light.intensity = 1.1f;
lightGO.transform.rotation = Quaternion.Euler(50f, -30f, 0f);
}
// 5) Hint coordinator to use current scene name if it differs
if (coordinator != null)
{
// If you want the coordinator to target this scene specifically, uncomment the next line:
// SetPrivateField(coordinator, "characterSceneName", scene.name);
}
EditorSceneManager.MarkSceneDirty(scene);
Undo.CollapseUndoOperations(group);
EditorUtility.DisplayDialog("Character Scene Setup", "Character scene objects have been set up successfully.", "OK");
}
private static T EnsureComponent<T>(GameObject go, string undoName) where T : Component
{
var c = go.GetComponent<T>();
if (c == null)
{
c = Undo.AddComponent<T>(go);
}
return c;
}
// Example helper if you later want to set private serialized fields via reflection
private static void SetPrivateField(object target, string fieldName, object value)
{
var t = target.GetType();
var f = t.GetField(fieldName, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
if (f != null)
{
f.SetValue(target, value);
EditorUtility.SetDirty((Object)target);
}
}
}
#endif

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 78e4bcab8a4eb484f99e4ef14054c921

200
Editor/LobbyPanelBuilder.cs Normal file
View File

@@ -0,0 +1,200 @@
#if UNITY_EDITOR
using TMPro;
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
namespace MegaKoop.EditorTools
{
internal sealed class LobbyPanelBuilder
{
private readonly Transform _parent;
internal LobbyPanelBuilder(Transform parent)
{
_parent = parent;
}
internal GameObject Build()
{
var panelLobby = UGUIBuilderUtils.CreatePanel(_parent, "Panel_Lobby", new Vector2(1100, 820));
panelLobby.SetActive(false);
var lobbyContainer = UGUIBuilderUtils.CreateVerticalGroup(
panelLobby.transform,
"Lobby_VLayout",
16f,
TextAnchor.UpperCenter,
new RectOffset(24, 24, 24, 24));
var lobbyHeader = UGUIBuilderUtils.CreateHorizontalGroup(
lobbyContainer.transform,
"Lobby_Header",
10f,
TextAnchor.MiddleCenter,
new RectOffset(0, 0, 0, 10));
UGUIBuilderUtils.CreateText(lobbyHeader.transform, "Text_LobbyTitle", "MULTIPLAYER LOBBY", 36, TextAnchor.MiddleLeft, new Color(0.7f, 1f, 0.7f), FontStyles.Bold);
UGUIBuilderUtils.CreateText(lobbyHeader.transform, "Text_Status", "OFFLINE", 18, TextAnchor.MiddleRight, new Color(0.8f, 0.8f, 0.8f), FontStyles.Bold);
var codeGroup = UGUIBuilderUtils.CreateVerticalGroup(
lobbyContainer.transform,
"Lobby_CodeGroup",
8f,
TextAnchor.MiddleCenter,
new RectOffset(10, 10, 10, 10));
UGUIBuilderUtils.CreateText(codeGroup.transform, "Text_LobbyCodeLabel", "LOBBY CODE", 16, TextAnchor.MiddleCenter, new Color(0.8f, 0.8f, 0.8f), FontStyles.Bold);
var codeRow = UGUIBuilderUtils.CreateHorizontalGroup(
codeGroup.transform,
"Lobby_CodeRow",
10f,
TextAnchor.MiddleCenter,
new RectOffset(0, 0, 0, 0));
UGUIBuilderUtils.CreateText(codeRow.transform, "Text_LobbyCodeValue", "------", 44, TextAnchor.MiddleCenter, new Color(0.7f, 1f, 0.7f), FontStyles.Bold);
UGUIBuilderUtils.CreateMenuButton(codeRow.transform, "Button_CopyCode", "COPY");
UGUIBuilderUtils.CreateText(codeGroup.transform, "Text_LobbyCodeHint", "Share this code with friends to invite them", 12, TextAnchor.MiddleCenter, new Color(0.8f, 0.8f, 0.8f), FontStyles.Normal);
var tabs = UGUIBuilderUtils.CreateHorizontalGroup(
lobbyContainer.transform,
"Lobby_Tabs",
0f,
TextAnchor.MiddleCenter,
new RectOffset(0, 0, 0, 0));
UGUIBuilderUtils.CreateMenuButton(tabs.transform, "Button_HostTab", "HOST LOBBY");
UGUIBuilderUtils.CreateMenuButton(tabs.transform, "Button_JoinTab", "JOIN LOBBY");
var joinGroup = UGUIBuilderUtils.CreateVerticalGroup(
lobbyContainer.transform,
"Group_Join",
10f,
TextAnchor.UpperCenter,
new RectOffset(10, 10, 10, 10));
var joinRow = UGUIBuilderUtils.CreateHorizontalGroup(
joinGroup.transform,
"Join_Row",
10f,
TextAnchor.MiddleCenter,
new RectOffset(0, 0, 0, 0));
UGUIBuilderUtils.CreateInputField(joinRow.transform, "Input_LobbyCode", "Enter 6-digit code...");
UGUIBuilderUtils.CreateMenuButton(joinGroup.transform, "Button_Connect", "CONNECT");
var hostGroup = UGUIBuilderUtils.CreateVerticalGroup(
lobbyContainer.transform,
"Group_Host",
10f,
TextAnchor.UpperCenter,
new RectOffset(10, 10, 10, 10));
UGUIBuilderUtils.CreateDropdown(hostGroup.transform, "Dropdown_MaxPlayers", new[] { "2", "3", "4", "8" });
UGUIBuilderUtils.CreateToggle(hostGroup.transform, "Toggle_PublicLobby", "Public", true);
UGUIBuilderUtils.CreateMenuButton(hostGroup.transform, "Button_CreateLobby", "CREATE LOBBY");
var playersHeader = UGUIBuilderUtils.CreateHorizontalGroup(
lobbyContainer.transform,
"Players_Header",
10f,
TextAnchor.MiddleLeft,
new RectOffset(0, 0, 0, 0));
UGUIBuilderUtils.CreateText(playersHeader.transform, "Text_PlayersTitle", "PLAYERS", 20, TextAnchor.MiddleLeft, Color.white, FontStyles.Bold);
UGUIBuilderUtils.CreateText(playersHeader.transform, "Text_PlayerCount", "0/4", 18, TextAnchor.MiddleRight, new Color(0.7f, 1f, 0.7f), FontStyles.Bold);
var scroll = UGUIBuilderUtils.CreateScrollList(
lobbyContainer.transform,
out var playersContent,
"Scroll_Players",
"Viewport",
"Content_PlayersList");
UGUIBuilderUtils.CreateText(lobbyContainer.transform, "Empty_Players", "Waiting for players...", 16, TextAnchor.MiddleCenter, new Color(0.8f, 0.8f, 0.8f), FontStyles.Italic);
var template = new GameObject("PlayerItemTemplate", typeof(RectTransform), typeof(HorizontalLayoutGroup));
template.transform.SetParent(playersContent, false);
var hlg = template.GetComponent<HorizontalLayoutGroup>();
hlg.childAlignment = TextAnchor.MiddleLeft;
hlg.spacing = 12;
hlg.childControlWidth = false;
hlg.childForceExpandWidth = true;
var avatar = UGUIBuilderUtils.CreateImage(template.transform, "Image_Avatar", new Color(0.3f, 0.6f, 0.3f));
var name = UGUIBuilderUtils.CreateText(template.transform, "Text_PlayerName", "Player", 18, TextAnchor.MiddleLeft, Color.white, FontStyles.Bold);
var status = UGUIBuilderUtils.CreateText(template.transform, "Text_PlayerStatus", "NOT READY", 14, TextAnchor.MiddleRight, new Color(0.8f, 0.8f, 0.8f), FontStyles.Bold);
((RectTransform)avatar.transform).sizeDelta = new Vector2(40, 40);
template.SetActive(false);
var hostControls = UGUIBuilderUtils.CreateHorizontalGroup(
lobbyContainer.transform,
"Host_Controls",
10f,
TextAnchor.MiddleCenter,
new RectOffset(0, 0, 0, 0));
UGUIBuilderUtils.CreateMenuButton(hostControls.transform, "Button_InviteFriends", "INVITE FRIENDS");
UGUIBuilderUtils.CreateMenuButton(hostControls.transform, "Button_KickSelected", "KICK SELECTED");
var friendsOverlay = new GameObject("Panel_Friends", typeof(RectTransform), typeof(Image));
friendsOverlay.transform.SetParent(panelLobby.transform, false);
var ovRT = (RectTransform)friendsOverlay.transform;
ovRT.anchorMin = Vector2.zero;
ovRT.anchorMax = Vector2.one;
ovRT.offsetMin = Vector2.zero;
ovRT.offsetMax = Vector2.zero;
var ovImg = friendsOverlay.GetComponent<Image>();
ovImg.color = new Color(0, 0, 0, 0.55f);
friendsOverlay.SetActive(false);
var closeBg = new GameObject("Button_CloseFriendsOverlay", typeof(RectTransform), typeof(Image), typeof(Button));
closeBg.transform.SetParent(friendsOverlay.transform, false);
var closeBgRT = (RectTransform)closeBg.transform;
closeBgRT.anchorMin = Vector2.zero;
closeBgRT.anchorMax = Vector2.one;
closeBgRT.offsetMin = Vector2.zero;
closeBgRT.offsetMax = Vector2.zero;
var closeBgImg = closeBg.GetComponent<Image>();
closeBgImg.color = new Color(0, 0, 0, 0);
var friendsWindow = UGUIBuilderUtils.CreatePanel(friendsOverlay.transform, "Friends_Window", new Vector2(900, 420));
var friendsV = UGUIBuilderUtils.CreateVerticalGroup(
friendsWindow.transform,
"Friends_VLayout",
8f,
TextAnchor.UpperCenter,
new RectOffset(16, 16, 16, 16));
UGUIBuilderUtils.CreateText(friendsV.transform, "Text_FriendsTitle", "INVITE FRIENDS", 24, TextAnchor.MiddleCenter, Color.white, FontStyles.Bold);
UGUIBuilderUtils.CreateText(friendsV.transform, "Text_FriendsHint", "Select a friend to send a Steam invite.", 12, TextAnchor.MiddleCenter, new Color(0.8f, 0.8f, 0.8f), FontStyles.Normal);
UGUIBuilderUtils.CreateScrollList(friendsV.transform, out var friendsContent, "Scroll_Friends", "Viewport", "Content_FriendsList");
var vlgFriends = friendsContent.GetComponent<VerticalLayoutGroup>();
if (vlgFriends)
{
Object.DestroyImmediate(vlgFriends);
}
var gridFriends = friendsContent.gameObject.AddComponent<GridLayoutGroup>();
gridFriends.cellSize = new Vector2(72, 72);
gridFriends.spacing = new Vector2(10, 10);
gridFriends.startAxis = GridLayoutGroup.Axis.Horizontal;
var csfFriends = friendsContent.GetComponent<ContentSizeFitter>();
if (csfFriends == null)
{
csfFriends = friendsContent.gameObject.AddComponent<ContentSizeFitter>();
}
csfFriends.verticalFit = ContentSizeFitter.FitMode.PreferredSize;
UGUIBuilderUtils.CreateText(friendsV.transform, "Empty_Friends", "No friends found.", 14, TextAnchor.MiddleCenter, new Color(0.8f, 0.8f, 0.8f), FontStyles.Italic);
var friendsFooter = UGUIBuilderUtils.CreateHorizontalGroup(
friendsV.transform,
"Friends_Footer",
8f,
TextAnchor.MiddleCenter,
new RectOffset(0, 0, 0, 0));
UGUIBuilderUtils.CreateMenuButton(friendsFooter.transform, "Button_BackFromFriends", "BACK");
UGUIBuilderUtils.CreateMenuButton(lobbyContainer.transform, "Button_ToggleReady", "TOGGLE READY");
var footer = UGUIBuilderUtils.CreateHorizontalGroup(
lobbyContainer.transform,
"Lobby_Footer",
10f,
TextAnchor.MiddleCenter,
new RectOffset(0, 0, 0, 0));
UGUIBuilderUtils.CreateMenuButton(footer.transform, "Button_StartGame", "START GAME");
UGUIBuilderUtils.CreateMenuButton(footer.transform, "Button_LeaveLobby", "LEAVE LOBBY");
UGUIBuilderUtils.CreateMenuButton(footer.transform, "Button_BackFromLobby", "BACK TO MENU");
return panelLobby;
}
}
}
#endif

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 46d584193d4545f45b0a8a344fa11093

View File

@@ -0,0 +1,40 @@
#if UNITY_EDITOR
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace MegaKoop.EditorTools
{
internal sealed class MainMenuPanelBuilder
{
private readonly Transform _parent;
internal MainMenuPanelBuilder(Transform parent)
{
_parent = parent;
}
internal GameObject Build()
{
var panelMain = UGUIBuilderUtils.CreatePanel(_parent, "Panel_MainMenu", new Vector2(900, 800));
var mainContainer = UGUIBuilderUtils.CreateVerticalGroup(
panelMain.transform,
"Main_VLayout",
20f,
TextAnchor.MiddleCenter,
new RectOffset(30, 30, 30, 30));
UGUIBuilderUtils.CreateText(mainContainer.transform, "Text_Title", "MEGA KOOP", 70, TextAnchor.MiddleCenter, Color.white, FontStyles.Bold);
UGUIBuilderUtils.CreateText(mainContainer.transform, "Text_Subtitle", "CO-OP ADVENTURE", 20, TextAnchor.MiddleCenter, new Color(0.8f, 0.8f, 0.8f), FontStyles.Normal);
UGUIBuilderUtils.CreateSpacer(mainContainer.transform, 20f);
UGUIBuilderUtils.CreateMenuButton(mainContainer.transform, "Button_Multiplayer", "MULTIPLAYER");
UGUIBuilderUtils.CreateMenuButton(mainContainer.transform, "Button_Settings", "SETTINGS");
UGUIBuilderUtils.CreateMenuButton(mainContainer.transform, "Button_Quit", "QUIT GAME", isDanger: true);
return panelMain;
}
}
}
#endif

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: c43d178d57dd2ae4db117649aad9e5b7

View File

@@ -0,0 +1,67 @@
#if UNITY_EDITOR
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace MegaKoop.EditorTools
{
internal sealed class SettingsPanelBuilder
{
private readonly Transform _parent;
internal SettingsPanelBuilder(Transform parent)
{
_parent = parent;
}
internal GameObject Build()
{
var panelSettings = UGUIBuilderUtils.CreatePanel(_parent, "Panel_Settings", new Vector2(900, 800));
panelSettings.SetActive(false);
var settingsContainer = UGUIBuilderUtils.CreateVerticalGroup(
panelSettings.transform,
"Settings_VLayout",
16f,
TextAnchor.UpperCenter,
new RectOffset(30, 30, 30, 30));
UGUIBuilderUtils.CreateText(settingsContainer.transform, "Text_SettingsTitle", "SETTINGS", 48, TextAnchor.MiddleCenter, Color.white, FontStyles.Bold);
UGUIBuilderUtils.CreateSpacer(settingsContainer.transform, 10f);
var gfxGroup = UGUIBuilderUtils.CreateVerticalGroup(
settingsContainer.transform,
"Graphics_Group",
10f,
TextAnchor.UpperLeft,
new RectOffset(10, 10, 10, 10));
UGUIBuilderUtils.CreateText(gfxGroup.transform, "Text_Graphics", "Graphics", 24, TextAnchor.MiddleLeft, Color.white, FontStyles.Bold);
UGUIBuilderUtils.CreateDropdown(gfxGroup.transform, "Dropdown_Quality", new[] { "Low", "Medium", "High", "Ultra" });
UGUIBuilderUtils.CreateToggle(gfxGroup.transform, "Toggle_Fullscreen", "Fullscreen", true);
UGUIBuilderUtils.CreateDropdown(gfxGroup.transform, "Dropdown_Resolution", new[] { "1280x720", "1920x1080", "2560x1440", "3840x2160" });
var audioGroup = UGUIBuilderUtils.CreateVerticalGroup(
settingsContainer.transform,
"Audio_Group",
10f,
TextAnchor.UpperLeft,
new RectOffset(10, 10, 10, 10));
UGUIBuilderUtils.CreateText(audioGroup.transform, "Text_Audio", "Audio", 24, TextAnchor.MiddleLeft, Color.white, FontStyles.Bold);
UGUIBuilderUtils.CreateLabeledSlider(audioGroup.transform, "Master Volume", "Slider_MasterVolume", 0, 100, 100);
UGUIBuilderUtils.CreateLabeledSlider(audioGroup.transform, "Music Volume", "Slider_MusicVolume", 0, 100, 80);
UGUIBuilderUtils.CreateLabeledSlider(audioGroup.transform, "SFX Volume", "Slider_SFXVolume", 0, 100, 100);
var buttonsRow = UGUIBuilderUtils.CreateHorizontalGroup(
settingsContainer.transform,
"Settings_Buttons",
10f,
TextAnchor.MiddleCenter,
new RectOffset(0, 0, 0, 0));
UGUIBuilderUtils.CreateMenuButton(buttonsRow.transform, "Button_ApplySettings", "APPLY");
UGUIBuilderUtils.CreateMenuButton(buttonsRow.transform, "Button_BackFromSettings", "BACK");
return panelSettings;
}
}
}
#endif

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 1f247737932b5ac4f83890f357d265f6

432
Editor/UGUIBuilderUtils.cs Normal file
View File

@@ -0,0 +1,432 @@
#if UNITY_EDITOR
using System.Linq;
using TMPro;
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
namespace MegaKoop.EditorTools
{
internal static class UGUIBuilderUtils
{
internal static GameObject CreatePanel(Transform parent, string name, Vector2 size)
{
var go = new GameObject(name, typeof(RectTransform), typeof(Image));
go.transform.SetParent(parent, false);
var rt = (RectTransform)go.transform;
rt.anchorMin = rt.anchorMax = new Vector2(0.5f, 0.5f);
rt.pivot = new Vector2(0.5f, 0.5f);
rt.sizeDelta = size;
var img = go.GetComponent<Image>();
img.color = new Color(0.13f, 0.13f, 0.13f, 0.95f);
return go;
}
internal static GameObject CreateVerticalGroup(Transform parent, string name, float spacing, TextAnchor align, RectOffset padding)
{
var go = new GameObject(name, typeof(RectTransform), typeof(VerticalLayoutGroup), typeof(ContentSizeFitter));
go.transform.SetParent(parent, false);
var rt = (RectTransform)go.transform;
rt.anchorMin = new Vector2(0, 0);
rt.anchorMax = new Vector2(1, 1);
rt.offsetMin = Vector2.zero;
rt.offsetMax = Vector2.zero;
var vlg = go.GetComponent<VerticalLayoutGroup>();
vlg.spacing = spacing;
vlg.childAlignment = align;
vlg.padding = padding;
vlg.childForceExpandWidth = true;
vlg.childControlWidth = true;
vlg.childControlHeight = false;
var fitter = go.GetComponent<ContentSizeFitter>();
fitter.verticalFit = ContentSizeFitter.FitMode.PreferredSize;
fitter.horizontalFit = ContentSizeFitter.FitMode.Unconstrained;
return go;
}
internal static GameObject CreateHorizontalGroup(Transform parent, string name, float spacing, TextAnchor align, RectOffset padding)
{
var go = new GameObject(name, typeof(RectTransform), typeof(HorizontalLayoutGroup));
go.transform.SetParent(parent, false);
var rt = (RectTransform)go.transform;
rt.anchorMin = new Vector2(0, 0);
rt.anchorMax = new Vector2(1, 0);
rt.pivot = new Vector2(0.5f, 0.5f);
rt.sizeDelta = new Vector2(0, 60);
var hlg = go.GetComponent<HorizontalLayoutGroup>();
hlg.spacing = spacing;
hlg.childAlignment = align;
hlg.padding = padding;
hlg.childControlWidth = true;
hlg.childForceExpandWidth = true;
return go;
}
internal static GameObject CreateText(Transform parent, string name, string text, int fontSize, TextAnchor anchor, Color color, FontStyles fontStyle)
{
var go = new GameObject(name, typeof(RectTransform), typeof(TextMeshProUGUI), typeof(LayoutElement));
go.transform.SetParent(parent, false);
var tmp = go.GetComponent<TextMeshProUGUI>();
tmp.text = text;
tmp.fontSize = fontSize;
tmp.color = color;
tmp.alignment = MapAlignment(anchor);
tmp.fontStyle = fontStyle;
tmp.enableWordWrapping = false;
tmp.raycastTarget = false;
if (TMP_Settings.defaultFontAsset != null)
{
tmp.font = TMP_Settings.defaultFontAsset;
}
var le = go.GetComponent<LayoutElement>();
le.minHeight = Mathf.Max(24, fontSize + 12);
var rt = (RectTransform)go.transform;
rt.sizeDelta = new Vector2(0, fontSize + 20);
return go;
}
private static TextAlignmentOptions MapAlignment(TextAnchor anchor)
{
switch (anchor)
{
case TextAnchor.UpperLeft: return TextAlignmentOptions.TopLeft;
case TextAnchor.UpperCenter: return TextAlignmentOptions.Top;
case TextAnchor.UpperRight: return TextAlignmentOptions.TopRight;
case TextAnchor.MiddleLeft: return TextAlignmentOptions.MidlineLeft;
case TextAnchor.MiddleCenter: return TextAlignmentOptions.Midline;
case TextAnchor.MiddleRight: return TextAlignmentOptions.MidlineRight;
case TextAnchor.LowerLeft: return TextAlignmentOptions.BottomLeft;
case TextAnchor.LowerCenter: return TextAlignmentOptions.Bottom;
case TextAnchor.LowerRight: return TextAlignmentOptions.BottomRight;
default: return TextAlignmentOptions.Center;
}
}
internal static GameObject CreateMenuButton(Transform parent, string name, string label, bool isDanger = false)
{
var go = new GameObject(name, typeof(RectTransform), typeof(Image), typeof(Button));
go.transform.SetParent(parent, false);
var img = go.GetComponent<Image>();
img.color = isDanger ? new Color(0.5f, 0.15f, 0.15f, 0.9f) : new Color(0.25f, 0.5f, 0.25f, 0.9f);
var rt = (RectTransform)go.transform;
rt.sizeDelta = new Vector2(0, 48);
var leBtn = go.AddComponent<LayoutElement>();
leBtn.flexibleWidth = 1;
leBtn.minHeight = 48;
var text = CreateText(go.transform, "Text", label, 20, TextAnchor.MiddleCenter, Color.white, FontStyles.Bold);
var textRT = (RectTransform)text.transform;
textRT.anchorMin = new Vector2(0, 0);
textRT.anchorMax = new Vector2(1, 1);
textRT.offsetMin = Vector2.zero;
textRT.offsetMax = Vector2.zero;
return go;
}
internal static GameObject CreateInputField(Transform parent, string name, string placeholder)
{
var go = new GameObject(name, typeof(RectTransform), typeof(Image), typeof(TMP_InputField));
go.transform.SetParent(parent, false);
var img = go.GetComponent<Image>();
img.color = new Color(0.1f, 0.1f, 0.1f, 0.9f);
var rt = (RectTransform)go.transform;
rt.sizeDelta = new Vector2(600, 50);
var viewport = new GameObject("TextViewport", typeof(RectTransform));
viewport.transform.SetParent(go.transform, false);
var viewportRT = (RectTransform)viewport.transform;
viewportRT.anchorMin = new Vector2(0, 0);
viewportRT.anchorMax = new Vector2(1, 1);
viewportRT.offsetMin = new Vector2(10, 6);
viewportRT.offsetMax = new Vector2(-10, -6);
var text = CreateText(viewport.transform, "Text", string.Empty, 20, TextAnchor.MiddleLeft, Color.white, FontStyles.Normal);
var placeholderGO = CreateText(viewport.transform, "Placeholder", placeholder, 18, TextAnchor.MiddleLeft, new Color(0.7f, 0.7f, 0.7f), FontStyles.Italic);
var input = go.GetComponent<TMP_InputField>();
input.textViewport = viewportRT;
input.textComponent = text.GetComponent<TextMeshProUGUI>();
input.placeholder = placeholderGO.GetComponent<TextMeshProUGUI>();
var tRT = (RectTransform)text.transform;
tRT.anchorMin = new Vector2(0, 0);
tRT.anchorMax = new Vector2(1, 1);
tRT.offsetMin = new Vector2(10, 0);
tRT.offsetMax = new Vector2(-10, 0);
var pRT = (RectTransform)placeholderGO.transform;
pRT.anchorMin = new Vector2(0, 0);
pRT.anchorMax = new Vector2(1, 1);
pRT.offsetMin = new Vector2(10, 0);
pRT.offsetMax = new Vector2(-10, 0);
return go;
}
internal static GameObject CreateDropdown(Transform parent, string name, string[] options)
{
var go = new GameObject(name, typeof(RectTransform), typeof(Image), typeof(TMP_Dropdown));
go.transform.SetParent(parent, false);
var img = go.GetComponent<Image>();
img.color = new Color(0.2f, 0.2f, 0.2f, 0.9f);
var rt = (RectTransform)go.transform;
rt.sizeDelta = new Vector2(600, 50);
var caption = CreateText(go.transform, "Label", options.FirstOrDefault() ?? "Option", 18, TextAnchor.MiddleLeft, Color.white, FontStyles.Normal);
var arrow = CreateText(go.transform, "Arrow", "▼", 18, TextAnchor.MiddleRight, Color.white, FontStyles.Bold);
var template = new GameObject("Template", typeof(RectTransform), typeof(Image), typeof(ScrollRect));
template.transform.SetParent(go.transform, false);
var templateRT = (RectTransform)template.transform;
templateRT.anchorMin = new Vector2(0, 0);
templateRT.anchorMax = new Vector2(1, 0);
templateRT.pivot = new Vector2(0.5f, 1f);
templateRT.sizeDelta = new Vector2(0, 220);
template.SetActive(false);
var templateImg = template.GetComponent<Image>();
templateImg.color = new Color(0.1f, 0.1f, 0.1f, 0.95f);
var tplCanvas = template.GetComponent<Canvas>();
if (tplCanvas == null)
{
tplCanvas = template.AddComponent<Canvas>();
}
tplCanvas.overrideSorting = true;
tplCanvas.sortingOrder = 5000;
if (!template.GetComponent<GraphicRaycaster>())
{
template.AddComponent<GraphicRaycaster>();
}
var viewport = new GameObject("Viewport", typeof(RectTransform), typeof(Mask), typeof(Image));
viewport.transform.SetParent(template.transform, false);
var viewportRT = (RectTransform)viewport.transform;
viewportRT.anchorMin = new Vector2(0, 0);
viewportRT.anchorMax = new Vector2(1, 1);
viewportRT.offsetMin = Vector2.zero;
viewportRT.offsetMax = Vector2.zero;
var vImg = viewport.GetComponent<Image>();
vImg.color = new Color(0, 0, 0, 0.2f);
vImg.raycastTarget = false;
var mask = viewport.GetComponent<Mask>();
mask.showMaskGraphic = false;
var content = new GameObject("Content", typeof(RectTransform), typeof(VerticalLayoutGroup));
content.transform.SetParent(viewport.transform, false);
var contentRT = (RectTransform)content.transform;
contentRT.anchorMin = new Vector2(0, 1);
contentRT.anchorMax = new Vector2(1, 1);
contentRT.pivot = new Vector2(0.5f, 1f);
var vlg = content.GetComponent<VerticalLayoutGroup>();
vlg.spacing = 4;
vlg.childForceExpandWidth = true;
vlg.childControlHeight = true;
var item = new GameObject("Item", typeof(RectTransform), typeof(Toggle));
item.transform.SetParent(content.transform, false);
var itemRT = (RectTransform)item.transform;
itemRT.sizeDelta = new Vector2(0, 30);
var itemBG = new GameObject("Item Background", typeof(RectTransform), typeof(Image));
itemBG.transform.SetParent(item.transform, false);
var itemBGImg = itemBG.GetComponent<Image>();
itemBGImg.color = new Color(0.2f, 0.2f, 0.2f, 0.9f);
var itemCheck = new GameObject("Item Checkmark", typeof(RectTransform), typeof(Image));
itemCheck.transform.SetParent(itemBG.transform, false);
var itemCheckImg = itemCheck.GetComponent<Image>();
itemCheckImg.color = new Color(0.7f, 1f, 0.7f, 1f);
var itemLabelGO = CreateText(item.transform, "Item Label", "Option", 18, TextAnchor.MiddleLeft, Color.white, FontStyles.Normal);
var bgRT = (RectTransform)itemBG.transform;
bgRT.anchorMin = new Vector2(0, 0);
bgRT.anchorMax = new Vector2(1, 1);
bgRT.offsetMin = Vector2.zero;
bgRT.offsetMax = Vector2.zero;
var ckRT = (RectTransform)itemCheck.transform;
ckRT.anchorMin = new Vector2(0, 0.5f);
ckRT.anchorMax = new Vector2(0, 0.5f);
ckRT.pivot = new Vector2(0, 0.5f);
ckRT.sizeDelta = new Vector2(18, 18);
ckRT.anchoredPosition = new Vector2(6, 0);
var itemLabelRT = (RectTransform)itemLabelGO.transform;
itemLabelRT.anchorMin = new Vector2(0, 0);
itemLabelRT.anchorMax = new Vector2(1, 1);
itemLabelRT.offsetMin = new Vector2(28, 0);
itemLabelRT.offsetMax = new Vector2(-6, 0);
var toggle = item.GetComponent<Toggle>();
toggle.targetGraphic = itemBGImg;
toggle.graphic = itemCheckImg;
var dropdown = go.GetComponent<TMP_Dropdown>();
dropdown.template = templateRT;
dropdown.captionText = caption.GetComponent<TextMeshProUGUI>();
dropdown.itemText = itemLabelGO.GetComponent<TextMeshProUGUI>();
dropdown.options = options.Select(o => new TMP_Dropdown.OptionData(o)).ToList();
dropdown.alphaFadeSpeed = 0.15f;
dropdown.RefreshShownValue();
var scrollRect = template.GetComponent<ScrollRect>();
scrollRect.viewport = viewportRT;
scrollRect.content = (RectTransform)content.transform;
scrollRect.horizontal = false;
scrollRect.vertical = true;
return go;
}
internal static GameObject CreateSlider(Transform parent, string name, float min, float max, float value)
{
var go = new GameObject(name, typeof(RectTransform), typeof(Slider));
go.transform.SetParent(parent, false);
var slider = go.GetComponent<Slider>();
slider.minValue = min;
slider.maxValue = max;
slider.value = value;
slider.direction = Slider.Direction.LeftToRight;
slider.wholeNumbers = true;
var rt = (RectTransform)go.transform;
rt.sizeDelta = new Vector2(600, 30);
var background = new GameObject("Background", typeof(RectTransform), typeof(Image));
background.transform.SetParent(go.transform, false);
var bgRT = (RectTransform)background.transform;
bgRT.anchorMin = new Vector2(0, 0.25f);
bgRT.anchorMax = new Vector2(1, 0.75f);
bgRT.offsetMin = Vector2.zero;
bgRT.offsetMax = Vector2.zero;
var bgImg = background.GetComponent<Image>();
bgImg.color = new Color(0.1f, 0.1f, 0.1f, 1f);
var fillArea = new GameObject("Fill Area", typeof(RectTransform));
fillArea.transform.SetParent(go.transform, false);
var faRT = (RectTransform)fillArea.transform;
faRT.anchorMin = new Vector2(0, 0.25f);
faRT.anchorMax = new Vector2(1, 0.75f);
faRT.offsetMin = new Vector2(10, 0);
faRT.offsetMax = new Vector2(-10, 0);
var fill = new GameObject("Fill", typeof(RectTransform), typeof(Image));
fill.transform.SetParent(fillArea.transform, false);
var fillImg = fill.GetComponent<Image>();
fillImg.color = new Color(0.4f, 0.9f, 0.4f, 1f);
var fillRT = (RectTransform)fill.transform;
fillRT.anchorMin = new Vector2(0, 0);
fillRT.anchorMax = new Vector2(1, 1);
fillRT.offsetMin = Vector2.zero;
fillRT.offsetMax = Vector2.zero;
var handleArea = new GameObject("Handle Slide Area", typeof(RectTransform));
handleArea.transform.SetParent(go.transform, false);
var haRT = (RectTransform)handleArea.transform;
haRT.anchorMin = new Vector2(0, 0);
haRT.anchorMax = new Vector2(1, 1);
haRT.offsetMin = Vector2.zero;
haRT.offsetMax = Vector2.zero;
var handle = new GameObject("Handle", typeof(RectTransform), typeof(Image));
handle.transform.SetParent(handleArea.transform, false);
var handleImg = handle.GetComponent<Image>();
handleImg.color = new Color(0.8f, 1f, 0.8f, 1f);
var hRT = (RectTransform)handle.transform;
hRT.sizeDelta = new Vector2(16, 24);
hRT.anchorMin = new Vector2(0.5f, 0.5f);
hRT.anchorMax = new Vector2(0.5f, 0.5f);
hRT.anchoredPosition = Vector2.zero;
slider.fillRect = fill.GetComponent<RectTransform>();
slider.handleRect = handle.GetComponent<RectTransform>();
slider.targetGraphic = handleImg;
slider.direction = Slider.Direction.LeftToRight;
return go;
}
internal static GameObject CreateLabeledSlider(Transform parent, string label, string name, float min, float max, float value)
{
var group = CreateVerticalGroup(parent, name + "_Group", 4, TextAnchor.UpperLeft, new RectOffset(0, 0, 0, 0));
CreateText(group.transform, name + "_Label", label, 18, TextAnchor.MiddleLeft, Color.white, FontStyles.Normal);
CreateSlider(group.transform, name, min, max, value);
return group;
}
internal static GameObject CreateToggle(Transform parent, string name, string labelText, bool initial)
{
var go = new GameObject(name, typeof(RectTransform), typeof(Toggle));
go.transform.SetParent(parent, false);
var bg = CreateImage(go.transform, "Background", new Color(0.2f, 0.2f, 0.2f));
var check = CreateImage(bg.transform, "Checkmark", new Color(0.7f, 1f, 0.7f));
var label = CreateText(go.transform, "Label", labelText, 18, TextAnchor.MiddleLeft, Color.white, FontStyles.Normal);
var toggle = go.GetComponent<Toggle>();
toggle.isOn = initial;
toggle.graphic = check.GetComponent<Image>();
toggle.targetGraphic = bg.GetComponent<Image>();
var rt = (RectTransform)go.transform;
rt.sizeDelta = new Vector2(600, 40);
var bgRT = (RectTransform)bg.transform;
bgRT.anchorMin = new Vector2(0, 0.5f);
bgRT.anchorMax = new Vector2(0, 0.5f);
bgRT.pivot = new Vector2(0, 0.5f);
bgRT.sizeDelta = new Vector2(24, 24);
var checkRT = (RectTransform)check.transform;
checkRT.anchorMin = checkRT.anchorMax = new Vector2(0.5f, 0.5f);
checkRT.sizeDelta = new Vector2(16, 16);
var labelRT = (RectTransform)label.transform;
labelRT.anchorMin = new Vector2(0, 0);
labelRT.anchorMax = new Vector2(1, 1);
labelRT.offsetMin = new Vector2(34, 0);
labelRT.offsetMax = new Vector2(0, 0);
return go;
}
internal static GameObject CreateImage(Transform parent, string name, Color color)
{
var go = new GameObject(name, typeof(RectTransform), typeof(Image));
go.transform.SetParent(parent, false);
var img = go.GetComponent<Image>();
img.color = color;
return go;
}
internal static void CreateSpacer(Transform parent, float height)
{
var spacer = new GameObject("Spacer", typeof(RectTransform));
spacer.transform.SetParent(parent, false);
var rt = (RectTransform)spacer.transform;
rt.sizeDelta = new Vector2(0, height);
}
internal static ScrollRect CreateScrollList(Transform parent, out Transform content, string scrollName, string viewportName, string contentName)
{
var scrollGO = new GameObject(scrollName, typeof(RectTransform), typeof(Image), typeof(ScrollRect));
scrollGO.transform.SetParent(parent, false);
var srt = (RectTransform)scrollGO.transform;
srt.sizeDelta = new Vector2(0, 240);
var img = scrollGO.GetComponent<Image>();
img.color = new Color(0, 0, 0, 0.3f);
var viewport = new GameObject(viewportName, typeof(RectTransform), typeof(Mask), typeof(Image));
viewport.transform.SetParent(scrollGO.transform, false);
var vImg = viewport.GetComponent<Image>();
vImg.color = new Color(0, 0, 0, 0.1f);
viewport.GetComponent<Mask>().showMaskGraphic = false;
var vprt = (RectTransform)viewport.transform;
vprt.anchorMin = new Vector2(0, 0);
vprt.anchorMax = new Vector2(1, 1);
vprt.offsetMin = Vector2.zero;
vprt.offsetMax = Vector2.zero;
var contentGO = new GameObject(contentName, typeof(RectTransform), typeof(VerticalLayoutGroup));
contentGO.transform.SetParent(viewport.transform, false);
var vlg = contentGO.GetComponent<VerticalLayoutGroup>();
vlg.spacing = 8;
vlg.childAlignment = TextAnchor.UpperLeft;
vlg.childForceExpandWidth = true;
var crt = (RectTransform)contentGO.transform;
crt.anchorMin = new Vector2(0, 1);
crt.anchorMax = new Vector2(1, 1);
crt.pivot = new Vector2(0.5f, 1);
crt.offsetMin = Vector2.zero;
crt.offsetMax = Vector2.zero;
var csf = contentGO.AddComponent<ContentSizeFitter>();
csf.verticalFit = ContentSizeFitter.FitMode.PreferredSize;
content = contentGO.transform;
var scroll = scrollGO.GetComponent<ScrollRect>();
scroll.viewport = (RectTransform)viewport.transform;
scroll.content = (RectTransform)content;
scroll.horizontal = false;
scroll.vertical = true;
return scroll;
}
}
}
#endif

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 2af2a4c51891b754d82ab14274d8146d

View File

@@ -2,8 +2,6 @@
using UnityEditor; using UnityEditor;
using UnityEngine; using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
using TMPro;
using System.Linq;
namespace MegaKoop.EditorTools namespace MegaKoop.EditorTools
{ {
@@ -23,17 +21,92 @@ namespace MegaKoop.EditorTools
canvas = canvasGO.GetComponent<Canvas>(); canvas = canvasGO.GetComponent<Canvas>();
if (canvas == null) canvas = canvasGO.AddComponent<Canvas>(); if (canvas == null) canvas = canvasGO.AddComponent<Canvas>();
canvas.renderMode = RenderMode.ScreenSpaceOverlay; canvas.renderMode = RenderMode.ScreenSpaceOverlay;
canvas.sortingOrder = 100;
var scaler = canvasGO.GetComponent<CanvasScaler>(); var scaler = canvasGO.GetComponent<CanvasScaler>();
if (scaler == null) scaler = canvasGO.AddComponent<CanvasScaler>(); if (scaler == null) scaler = canvasGO.AddComponent<CanvasScaler>();
scaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize; scaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize;
scaler.referenceResolution = new Vector2(1920, 1080); scaler.referenceResolution = new Vector2(1920, 1080);
scaler.matchWidthOrHeight = 0.5f; scaler.matchWidthOrHeight = 0.5f;
var raycaster = canvasGO.GetComponent<GraphicRaycaster>();
if (raycaster == null) raycaster = canvasGO.AddComponent<GraphicRaycaster>();
// Ensure EventSystem exists // Ensure/upgrade EventSystem based on available modules
if (Object.FindObjectOfType<UnityEngine.EventSystems.EventSystem>() == null) var existingES = Object.FindObjectOfType<UnityEngine.EventSystems.EventSystem>();
var inputSystemModuleType = System.Type.GetType("UnityEngine.InputSystem.UI.InputSystemUIInputModule, Unity.InputSystem", false);
bool wantIS = inputSystemModuleType != null;
bool wantLegacy = !wantIS;
GameObject esGO = null;
if (existingES == null)
{ {
var es = new GameObject("EventSystem", typeof(UnityEngine.EventSystems.EventSystem), typeof(UnityEngine.EventSystems.StandaloneInputModule)); var es = new GameObject("EventSystem", typeof(UnityEngine.EventSystems.EventSystem));
if (wantIS) es.AddComponent(inputSystemModuleType);
if (wantLegacy) es.AddComponent<UnityEngine.EventSystems.StandaloneInputModule>();
Undo.RegisterCreatedObjectUndo(es, "Create EventSystem"); Undo.RegisterCreatedObjectUndo(es, "Create EventSystem");
esGO = es;
}
else
{
esGO = existingES.gameObject;
var sim = existingES.GetComponent<UnityEngine.EventSystems.StandaloneInputModule>();
var ism = inputSystemModuleType != null ? existingES.GetComponent(inputSystemModuleType) : null;
if (wantIS && ism == null) Undo.AddComponent(existingES.gameObject, inputSystemModuleType);
if (wantLegacy && sim == null) Undo.AddComponent<UnityEngine.EventSystems.StandaloneInputModule>(existingES.gameObject);
}
// Assign actionsAsset only if the picked InputActionAsset contains a "UI" action map
bool assignedUIActions = false;
if (wantIS && inputSystemModuleType != null && esGO != null)
{
var module = esGO.GetComponent(inputSystemModuleType);
if (module != null)
{
var prop = inputSystemModuleType.GetProperty("actionsAsset");
if (prop != null)
{
var current = prop.GetValue(module, null) as UnityEngine.Object;
if (current == null)
{
var iaaType = System.Type.GetType("UnityEngine.InputSystem.InputActionAsset, Unity.InputSystem", false);
string ChooseUIAsset()
{
var guids = AssetDatabase.FindAssets("t:InputActionAsset");
foreach (var g in guids)
{
var path = AssetDatabase.GUIDToAssetPath(g);
var asset = AssetDatabase.LoadAssetAtPath<UnityEngine.Object>(path);
if (asset != null && iaaType != null && iaaType.IsInstanceOfType(asset))
{
var map = iaaType.GetMethod("FindActionMap", new[] { typeof(string), typeof(bool) })?.Invoke(asset, new object[] { "UI", true });
if (map != null) return path;
}
}
return null;
}
var best = ChooseUIAsset();
if (!string.IsNullOrEmpty(best))
{
var asset = AssetDatabase.LoadAssetAtPath<UnityEngine.Object>(best);
prop.SetValue(module, asset, null);
var comp = module as Component; if (comp != null) EditorUtility.SetDirty(comp);
assignedUIActions = true;
}
// else: leave null to let module use its default actions
}
else { assignedUIActions = true; }
}
}
}
if (esGO != null)
{
var hasSIM = esGO.GetComponent<UnityEngine.EventSystems.StandaloneInputModule>() != null;
var hasIS = inputSystemModuleType != null && esGO.GetComponent(inputSystemModuleType) != null;
if (hasIS && !assignedUIActions && !hasSIM)
{
Undo.AddComponent<UnityEngine.EventSystems.StandaloneInputModule>(esGO);
}
Debug.Log($"[UGUIMenuBuilder] EventSystem configured. InputSystem={(hasIS ? "ON" : "OFF")} (actions={(assignedUIActions ? "OK" : "none")}), Standalone={(hasSIM ? "ON" : "OFF")}");
} }
// Clean old generated panels if present to avoid duplicates // Clean old generated panels if present to avoid duplicates
@@ -49,134 +122,9 @@ namespace MegaKoop.EditorTools
DestroyChildIfExists(canvas.transform, "Panel_Settings"); DestroyChildIfExists(canvas.transform, "Panel_Settings");
DestroyChildIfExists(canvas.transform, "Panel_Lobby"); DestroyChildIfExists(canvas.transform, "Panel_Lobby");
// Root panels var mainPanel = new MainMenuPanelBuilder(canvas.transform).Build();
var panelMain = CreatePanel(canvas.transform, "Panel_MainMenu", new Vector2(900, 800)); var settingsPanel = new SettingsPanelBuilder(canvas.transform).Build();
var panelSettings = CreatePanel(canvas.transform, "Panel_Settings", new Vector2(900, 800)); var lobbyPanel = new LobbyPanelBuilder(canvas.transform).Build();
var panelLobby = CreatePanel(canvas.transform, "Panel_Lobby", new Vector2(1100, 820));
panelSettings.SetActive(false);
panelLobby.SetActive(false);
// Main Menu Content
var mainContainer = CreateVerticalGroup(panelMain.transform, "Main_VLayout", 20, TextAnchor.MiddleCenter, new RectOffset(30, 30, 30, 30));
CreateText(mainContainer.transform, "Text_Title", "MEGA KOOP", 70, TextAnchor.MiddleCenter, Color.white, FontStyles.Bold);
CreateText(mainContainer.transform, "Text_Subtitle", "CO-OP ADVENTURE", 20, TextAnchor.MiddleCenter, new Color(0.8f,0.8f,0.8f), FontStyles.Normal);
CreateSpacer(mainContainer.transform, 20);
CreateMenuButton(mainContainer.transform, "Button_Multiplayer", "MULTIPLAYER");
CreateMenuButton(mainContainer.transform, "Button_Settings", "SETTINGS");
CreateMenuButton(mainContainer.transform, "Button_Quit", "QUIT GAME", isDanger:true);
// Settings
var settingsContainer = CreateVerticalGroup(panelSettings.transform, "Settings_VLayout", 16, TextAnchor.UpperCenter, new RectOffset(30,30,30,30));
CreateText(settingsContainer.transform, "Text_SettingsTitle", "SETTINGS", 48, TextAnchor.MiddleCenter, Color.white, FontStyles.Bold);
CreateSpacer(settingsContainer.transform, 10);
var gfxGroup = CreateVerticalGroup(settingsContainer.transform, "Graphics_Group", 10, TextAnchor.UpperLeft, new RectOffset(10,10,10,10));
CreateText(gfxGroup.transform, "Text_Graphics", "Graphics", 24, TextAnchor.MiddleLeft, Color.white, FontStyles.Bold);
CreateDropdown(gfxGroup.transform, "Dropdown_Quality", new string[]{"Low","Medium","High","Ultra"});
CreateToggle(gfxGroup.transform, "Toggle_Fullscreen", "Fullscreen", true);
CreateDropdown(gfxGroup.transform, "Dropdown_Resolution", new string[]{"1280x720","1920x1080","2560x1440","3840x2160"});
var settingsButtons = CreateHorizontalGroup(settingsContainer.transform, "Settings_Buttons", 10, TextAnchor.MiddleCenter, new RectOffset(0,0,0,0));
CreateMenuButton(settingsButtons.transform, "Button_ApplySettings", "APPLY");
CreateMenuButton(settingsButtons.transform, "Button_BackFromSettings", "BACK");
// Lobby
var lobbyContainer = CreateVerticalGroup(panelLobby.transform, "Lobby_VLayout", 16, TextAnchor.UpperCenter, new RectOffset(24,24,24,24));
var lobbyHeader = CreateHorizontalGroup(lobbyContainer.transform, "Lobby_Header", 10, TextAnchor.MiddleCenter, new RectOffset(0,0,0,10));
CreateText(lobbyHeader.transform, "Text_LobbyTitle", "MULTIPLAYER LOBBY", 36, TextAnchor.MiddleLeft, new Color(0.7f,1f,0.7f), FontStyles.Bold);
CreateText(lobbyHeader.transform, "Text_Status", "OFFLINE", 18, TextAnchor.MiddleRight, new Color(0.8f,0.8f,0.8f), FontStyles.Bold);
// Lobby code area
var codeGroup = CreateVerticalGroup(lobbyContainer.transform, "Lobby_CodeGroup", 8, TextAnchor.MiddleCenter, new RectOffset(10,10,10,10));
CreateText(codeGroup.transform, "Text_LobbyCodeLabel", "LOBBY CODE", 16, TextAnchor.MiddleCenter, new Color(0.8f,0.8f,0.8f), FontStyles.Bold);
var codeRow = CreateHorizontalGroup(codeGroup.transform, "Lobby_CodeRow", 10, TextAnchor.MiddleCenter, new RectOffset(0,0,0,0));
CreateText(codeRow.transform, "Text_LobbyCodeValue", "------", 44, TextAnchor.MiddleCenter, new Color(0.7f,1f,0.7f), FontStyles.Bold);
CreateMenuButton(codeRow.transform, "Button_CopyCode", "COPY");
CreateText(codeGroup.transform, "Text_LobbyCodeHint", "Share this code with friends to invite them", 12, TextAnchor.MiddleCenter, new Color(0.8f,0.8f,0.8f), FontStyles.Normal);
// Tabs
var tabs = CreateHorizontalGroup(lobbyContainer.transform, "Lobby_Tabs", 0, TextAnchor.MiddleCenter, new RectOffset(0,0,0,0));
CreateMenuButton(tabs.transform, "Button_HostTab", "HOST LOBBY");
CreateMenuButton(tabs.transform, "Button_JoinTab", "JOIN LOBBY");
// Join content
var joinGroup = CreateVerticalGroup(lobbyContainer.transform, "Group_Join", 10, TextAnchor.UpperCenter, new RectOffset(10,10,10,10));
var joinRow = CreateHorizontalGroup(joinGroup.transform, "Join_Row", 10, TextAnchor.MiddleCenter, new RectOffset(0,0,0,0));
CreateInputField(joinRow.transform, "Input_LobbyCode", "Enter 6-digit code...");
CreateMenuButton(joinGroup.transform, "Button_Connect", "CONNECT");
// Host content
var hostGroup = CreateVerticalGroup(lobbyContainer.transform, "Group_Host", 10, TextAnchor.UpperCenter, new RectOffset(10,10,10,10));
CreateDropdown(hostGroup.transform, "Dropdown_MaxPlayers", new string[]{"2","3","4","8"});
CreateToggle(hostGroup.transform, "Toggle_PublicLobby", "Public", true);
CreateMenuButton(hostGroup.transform, "Button_CreateLobby", "CREATE LOBBY");
// Players list
var playersHeader = CreateHorizontalGroup(lobbyContainer.transform, "Players_Header", 10, TextAnchor.MiddleLeft, new RectOffset(0,0,0,0));
CreateText(playersHeader.transform, "Text_PlayersTitle", "PLAYERS", 20, TextAnchor.MiddleLeft, Color.white, FontStyles.Bold);
CreateText(playersHeader.transform, "Text_PlayerCount", "0/4", 18, TextAnchor.MiddleRight, new Color(0.7f,1f,0.7f), FontStyles.Bold);
var scroll = CreateScrollList(lobbyContainer.transform, out var content, "Scroll_Players", "Viewport", "Content_PlayersList");
var empty = CreateText(lobbyContainer.transform, "Empty_Players", "Waiting for players...", 16, TextAnchor.MiddleCenter, new Color(0.8f,0.8f,0.8f), FontStyles.Italic);
// Template for player entry
var template = new GameObject("PlayerItemTemplate", typeof(RectTransform), typeof(HorizontalLayoutGroup));
template.transform.SetParent(content, false);
var hlg = template.GetComponent<HorizontalLayoutGroup>();
hlg.childAlignment = TextAnchor.MiddleLeft; hlg.spacing = 12; hlg.childControlWidth = false; hlg.childForceExpandWidth = true;
var avatar = CreateImage(template.transform, "Image_Avatar", new Color(0.3f,0.6f,0.3f));
var name = CreateText(template.transform, "Text_PlayerName", "Player", 18, TextAnchor.MiddleLeft, Color.white, FontStyles.Bold);
var status = CreateText(template.transform, "Text_PlayerStatus", "NOT READY", 14, TextAnchor.MiddleRight, new Color(0.8f,0.8f,0.8f), FontStyles.Bold);
((RectTransform)avatar.transform).sizeDelta = new Vector2(40,40);
template.SetActive(false);
// Host controls
var hostControls = CreateHorizontalGroup(lobbyContainer.transform, "Host_Controls", 10, TextAnchor.MiddleCenter, new RectOffset(0,0,0,0));
CreateMenuButton(hostControls.transform, "Button_InviteFriends", "INVITE FRIENDS");
CreateMenuButton(hostControls.transform, "Button_KickSelected", "KICK SELECTED");
// Friends picker will be a modal overlay under Panel_Lobby (so it doesn't stretch main layout)
var friendsOverlay = new GameObject("Panel_Friends", typeof(RectTransform), typeof(Image));
friendsOverlay.transform.SetParent(panelLobby.transform, false);
var ovRT = (RectTransform)friendsOverlay.transform; ovRT.anchorMin = new Vector2(0,0); ovRT.anchorMax = new Vector2(1,1); ovRT.offsetMin = Vector2.zero; ovRT.offsetMax = Vector2.zero;
var ovImg = friendsOverlay.GetComponent<Image>(); ovImg.color = new Color(0,0,0,0.55f);
friendsOverlay.SetActive(false);
// Transparent background button to close on backdrop click
var closeBg = new GameObject("Button_CloseFriendsOverlay", typeof(RectTransform), typeof(Image), typeof(Button));
closeBg.transform.SetParent(friendsOverlay.transform, false);
var closeBgRT = (RectTransform)closeBg.transform; closeBgRT.anchorMin = new Vector2(0,0); closeBgRT.anchorMax = new Vector2(1,1); closeBgRT.offsetMin = Vector2.zero; closeBgRT.offsetMax = Vector2.zero;
var closeBgImg = closeBg.GetComponent<Image>(); closeBgImg.color = new Color(0,0,0,0);
// Center modal window
var friendsWindow = CreatePanel(friendsOverlay.transform, "Friends_Window", new Vector2(900, 420));
var friendsV = CreateVerticalGroup(friendsWindow.transform, "Friends_VLayout", 8, TextAnchor.UpperCenter, new RectOffset(16,16,16,16));
CreateText(friendsV.transform, "Text_FriendsTitle", "INVITE FRIENDS", 24, TextAnchor.MiddleCenter, Color.white, FontStyles.Bold);
CreateText(friendsV.transform, "Text_FriendsHint", "Select a friend to send a Steam invite.", 12, TextAnchor.MiddleCenter, new Color(0.8f,0.8f,0.8f), FontStyles.Normal);
var friendsScroll = CreateScrollList(friendsV.transform, out var friendsContent, "Scroll_Friends", "Viewport", "Content_FriendsList");
// Make friends content a compact grid of icons
var vlgFriends = friendsContent.GetComponent<VerticalLayoutGroup>();
if (vlgFriends) Object.DestroyImmediate(vlgFriends);
var gridFriends = friendsContent.gameObject.AddComponent<GridLayoutGroup>();
gridFriends.cellSize = new Vector2(72, 72);
gridFriends.spacing = new Vector2(10, 10);
gridFriends.startAxis = GridLayoutGroup.Axis.Horizontal;
var csfFriends = friendsContent.GetComponent<ContentSizeFitter>();
if (csfFriends == null) csfFriends = friendsContent.gameObject.AddComponent<ContentSizeFitter>();
csfFriends.verticalFit = ContentSizeFitter.FitMode.PreferredSize;
CreateText(friendsV.transform, "Empty_Friends", "No friends found.", 14, TextAnchor.MiddleCenter, new Color(0.8f,0.8f,0.8f), FontStyles.Italic);
var friendsFooter = CreateHorizontalGroup(friendsV.transform, "Friends_Footer", 8, TextAnchor.MiddleCenter, new RectOffset(0,0,0,0));
CreateMenuButton(friendsFooter.transform, "Button_BackFromFriends", "BACK");
// Ready
CreateMenuButton(lobbyContainer.transform, "Button_ToggleReady", "TOGGLE READY");
// Footer
var footer = CreateHorizontalGroup(lobbyContainer.transform, "Lobby_Footer", 10, TextAnchor.MiddleCenter, new RectOffset(0,0,0,0));
CreateMenuButton(footer.transform, "Button_StartGame", "START GAME");
CreateMenuButton(footer.transform, "Button_LeaveLobby", "LEAVE LOBBY");
CreateMenuButton(footer.transform, "Button_BackFromLobby", "BACK TO MENU");
// Controllers // Controllers
var mainCtrl = canvas.gameObject.GetComponent<MegaKoop.UI.UGUIMainMenuController>(); var mainCtrl = canvas.gameObject.GetComponent<MegaKoop.UI.UGUIMainMenuController>();
@@ -185,238 +133,13 @@ namespace MegaKoop.EditorTools
if (lobbyCtrl == null) lobbyCtrl = canvas.gameObject.AddComponent<MegaKoop.UI.UGUIMultiplayerLobbyController>(); if (lobbyCtrl == null) lobbyCtrl = canvas.gameObject.AddComponent<MegaKoop.UI.UGUIMultiplayerLobbyController>();
// Inject panel references for reliability // Inject panel references for reliability
mainCtrl.SetPanels(panelMain, panelSettings, panelLobby); mainCtrl.SetPanels(mainPanel, settingsPanel, lobbyPanel);
lobbyCtrl.SetLobbyRoot(panelLobby); lobbyCtrl.SetLobbyRoot(lobbyPanel);
Selection.activeGameObject = canvas.gameObject; Selection.activeGameObject = canvas.gameObject;
Debug.Log("[UGUIMenuBuilder] UGUI Main Menu generated successfully. You can press Play and test."); Debug.Log("[UGUIMenuBuilder] UGUI Main Menu generated successfully. You can press Play and test.");
} }
private static GameObject CreatePanel(Transform parent, string name, Vector2 size)
{
var go = new GameObject(name, typeof(RectTransform), typeof(Image));
go.transform.SetParent(parent, false);
var rt = (RectTransform)go.transform;
rt.anchorMin = rt.anchorMax = new Vector2(0.5f, 0.5f);
rt.pivot = new Vector2(0.5f, 0.5f);
rt.sizeDelta = size;
var img = go.GetComponent<Image>();
img.color = new Color(0.13f, 0.13f, 0.13f, 0.95f);
return go;
}
private static GameObject CreateVerticalGroup(Transform parent, string name, float spacing, TextAnchor align, RectOffset padding)
{
var go = new GameObject(name, typeof(RectTransform), typeof(VerticalLayoutGroup), typeof(ContentSizeFitter));
go.transform.SetParent(parent, false);
var rt = (RectTransform)go.transform;
rt.anchorMin = new Vector2(0, 0); rt.anchorMax = new Vector2(1, 1); rt.offsetMin = new Vector2(0,0); rt.offsetMax = new Vector2(0,0);
var vlg = go.GetComponent<VerticalLayoutGroup>();
vlg.spacing = spacing; vlg.childAlignment = align; vlg.padding = padding; vlg.childForceExpandWidth = true; vlg.childControlWidth = true; vlg.childControlHeight = false;
var fitter = go.GetComponent<ContentSizeFitter>();
fitter.verticalFit = ContentSizeFitter.FitMode.PreferredSize; fitter.horizontalFit = ContentSizeFitter.FitMode.Unconstrained;
return go;
}
private static GameObject CreateHorizontalGroup(Transform parent, string name, float spacing, TextAnchor align, RectOffset padding)
{
var go = new GameObject(name, typeof(RectTransform), typeof(HorizontalLayoutGroup));
go.transform.SetParent(parent, false);
var rt = (RectTransform)go.transform;
rt.anchorMin = new Vector2(0, 0); rt.anchorMax = new Vector2(1, 0); rt.pivot = new Vector2(0.5f, 0.5f);
rt.sizeDelta = new Vector2(0, 60);
var hlg = go.GetComponent<HorizontalLayoutGroup>();
hlg.spacing = spacing; hlg.childAlignment = align; hlg.padding = padding; hlg.childControlWidth = true; hlg.childForceExpandWidth = true;
return go;
}
private static GameObject CreateText(Transform parent, string name, string text, int fontSize, TextAnchor anchor, Color color, FontStyles fontStyle)
{
var go = new GameObject(name, typeof(RectTransform), typeof(TextMeshProUGUI), typeof(LayoutElement));
go.transform.SetParent(parent, false);
var t = go.GetComponent<TextMeshProUGUI>();
t.text = text; t.fontSize = fontSize; t.color = color; t.alignment = MapAlignment(anchor); t.fontStyle = fontStyle;
t.enableWordWrapping = false; // avoid vertical letters
t.raycastTarget = false; // don't block parent UI clicks
if (TMP_Settings.defaultFontAsset != null) t.font = TMP_Settings.defaultFontAsset;
var le = go.GetComponent<LayoutElement>();
le.minHeight = Mathf.Max(24, fontSize + 12);
var rt = (RectTransform)go.transform; rt.sizeDelta = new Vector2(0, fontSize + 20);
return go;
}
private static TextAlignmentOptions MapAlignment(TextAnchor anchor)
{
switch (anchor)
{
case TextAnchor.UpperLeft: return TextAlignmentOptions.TopLeft;
case TextAnchor.UpperCenter: return TextAlignmentOptions.Top;
case TextAnchor.UpperRight: return TextAlignmentOptions.TopRight;
case TextAnchor.MiddleLeft: return TextAlignmentOptions.MidlineLeft;
case TextAnchor.MiddleCenter: return TextAlignmentOptions.Midline;
case TextAnchor.MiddleRight: return TextAlignmentOptions.MidlineRight;
case TextAnchor.LowerLeft: return TextAlignmentOptions.BottomLeft;
case TextAnchor.LowerCenter: return TextAlignmentOptions.Bottom;
case TextAnchor.LowerRight: return TextAlignmentOptions.BottomRight;
default: return TextAlignmentOptions.Center;
}
}
private static GameObject CreateMenuButton(Transform parent, string name, string label, bool isDanger = false)
{
var go = new GameObject(name, typeof(RectTransform), typeof(Image), typeof(Button));
go.transform.SetParent(parent, false);
var img = go.GetComponent<Image>();
img.color = isDanger ? new Color(0.5f, 0.15f, 0.15f, 0.9f) : new Color(0.25f, 0.5f, 0.25f, 0.9f);
var rt = (RectTransform)go.transform; rt.sizeDelta = new Vector2(0, 48);
var leBtn = go.AddComponent<LayoutElement>();
leBtn.flexibleWidth = 1; leBtn.minHeight = 48;
var text = CreateText(go.transform, "Text", label, 20, TextAnchor.MiddleCenter, Color.white, FontStyles.Bold);
var textRT = (RectTransform)text.transform; textRT.anchorMin = new Vector2(0,0); textRT.anchorMax = new Vector2(1,1); textRT.offsetMin = Vector2.zero; textRT.offsetMax = Vector2.zero;
return go;
}
private static GameObject CreateInputField(Transform parent, string name, string placeholder)
{
var go = new GameObject(name, typeof(RectTransform), typeof(Image), typeof(TMP_InputField));
go.transform.SetParent(parent, false);
var img = go.GetComponent<Image>(); img.color = new Color(0.1f,0.1f,0.1f,0.9f);
var rt = (RectTransform)go.transform; rt.sizeDelta = new Vector2(600, 50);
var viewport = new GameObject("TextViewport", typeof(RectTransform)); viewport.transform.SetParent(go.transform, false);
var viewportRT = (RectTransform)viewport.transform; viewportRT.anchorMin = new Vector2(0,0); viewportRT.anchorMax = new Vector2(1,1); viewportRT.offsetMin = new Vector2(10,6); viewportRT.offsetMax = new Vector2(-10,-6);
var text = CreateText(viewport.transform, "Text", string.Empty, 20, TextAnchor.MiddleLeft, Color.white, FontStyles.Normal);
var placeholderGO = CreateText(viewport.transform, "Placeholder", placeholder, 18, TextAnchor.MiddleLeft, new Color(0.7f,0.7f,0.7f), FontStyles.Italic);
var input = go.GetComponent<TMP_InputField>();
input.textViewport = viewportRT;
input.textComponent = text.GetComponent<TextMeshProUGUI>();
input.placeholder = placeholderGO.GetComponent<TextMeshProUGUI>();
var tRT = (RectTransform)text.transform; tRT.anchorMin = new Vector2(0,0); tRT.anchorMax = new Vector2(1,1); tRT.offsetMin = new Vector2(10,0); tRT.offsetMax = new Vector2(-10,0);
var pRT = (RectTransform)placeholderGO.transform; pRT.anchorMin = new Vector2(0,0); pRT.anchorMax = new Vector2(1,1); pRT.offsetMin = new Vector2(10,0); pRT.offsetMax = new Vector2(-10,0);
return go;
}
private static GameObject CreateDropdown(Transform parent, string name, string[] options)
{
var go = new GameObject(name, typeof(RectTransform), typeof(Image), typeof(TMP_Dropdown));
go.transform.SetParent(parent, false);
var img = go.GetComponent<Image>(); img.color = new Color(0.2f,0.2f,0.2f,0.9f);
var rt = (RectTransform)go.transform; rt.sizeDelta = new Vector2(600, 50);
// Caption label
var caption = CreateText(go.transform, "Label", options.FirstOrDefault() ?? "Option", 18, TextAnchor.MiddleLeft, Color.white, FontStyles.Normal);
var arrow = CreateText(go.transform, "Arrow", "▼", 18, TextAnchor.MiddleRight, Color.white, FontStyles.Bold);
// Template (disabled by default)
var template = new GameObject("Template", typeof(RectTransform), typeof(Image), typeof(ScrollRect));
template.transform.SetParent(go.transform, false);
var templateRT = (RectTransform)template.transform;
templateRT.anchorMin = new Vector2(0, 0); templateRT.anchorMax = new Vector2(1, 0); templateRT.pivot = new Vector2(0.5f, 1);
templateRT.sizeDelta = new Vector2(0, 220); // visible dropdown height
template.SetActive(false);
var templateImg = template.GetComponent<Image>(); templateImg.color = new Color(0.1f,0.1f,0.1f,0.95f);
// Viewport
var viewport = new GameObject("Viewport", typeof(RectTransform), typeof(Mask), typeof(Image));
viewport.transform.SetParent(template.transform, false);
var viewportRT = (RectTransform)viewport.transform; viewportRT.anchorMin = new Vector2(0,0); viewportRT.anchorMax = new Vector2(1,1); viewportRT.offsetMin = Vector2.zero; viewportRT.offsetMax = Vector2.zero;
var vImg = viewport.GetComponent<Image>(); vImg.color = new Color(0,0,0,0.2f);
viewport.GetComponent<Mask>().showMaskGraphic = false;
// Scroll content
var content = new GameObject("Content", typeof(RectTransform), typeof(VerticalLayoutGroup));
content.transform.SetParent(viewport.transform, false);
var contentRT = (RectTransform)content.transform; contentRT.anchorMin = new Vector2(0,1); contentRT.anchorMax = new Vector2(1,1); contentRT.pivot = new Vector2(0.5f,1);
var vlg = content.GetComponent<VerticalLayoutGroup>(); vlg.spacing = 4; vlg.childForceExpandWidth = true; vlg.childControlHeight = true;
// Item (Toggle)
var item = new GameObject("Item", typeof(RectTransform), typeof(Toggle));
item.transform.SetParent(content.transform, false);
var itemRT = (RectTransform)item.transform; itemRT.sizeDelta = new Vector2(0, 30);
var itemBG = new GameObject("Item Background", typeof(RectTransform), typeof(Image));
itemBG.transform.SetParent(item.transform, false);
var itemBGImg = itemBG.GetComponent<Image>(); itemBGImg.color = new Color(0.2f,0.2f,0.2f,0.9f);
var itemCheck = new GameObject("Item Checkmark", typeof(RectTransform), typeof(Image));
itemCheck.transform.SetParent(itemBG.transform, false);
var itemCheckImg = itemCheck.GetComponent<Image>(); itemCheckImg.color = new Color(0.7f,1f,0.7f,1f);
var itemLabelGO = CreateText(item.transform, "Item Label", "Option", 18, TextAnchor.MiddleLeft, Color.white, FontStyles.Normal);
// Position sub-elements
var bgRT = (RectTransform)itemBG.transform; bgRT.anchorMin = new Vector2(0,0); bgRT.anchorMax = new Vector2(1,1); bgRT.offsetMin = Vector2.zero; bgRT.offsetMax = Vector2.zero;
var ckRT = (RectTransform)itemCheck.transform; ckRT.anchorMin = new Vector2(0,0.5f); ckRT.anchorMax = new Vector2(0,0.5f); ckRT.pivot = new Vector2(0,0.5f); ckRT.sizeDelta = new Vector2(18,18); ckRT.anchoredPosition = new Vector2(6,0);
var itemLabelRT = (RectTransform)itemLabelGO.transform; itemLabelRT.anchorMin = new Vector2(0,0); itemLabelRT.anchorMax = new Vector2(1,1); itemLabelRT.offsetMin = new Vector2(28,0); itemLabelRT.offsetMax = new Vector2(-6,0);
// Toggle wiring
var tgl = item.GetComponent<Toggle>();
tgl.targetGraphic = itemBGImg; tgl.graphic = itemCheckImg;
// Dropdown wiring
var dd = go.GetComponent<TMP_Dropdown>();
dd.template = template.GetComponent<RectTransform>();
dd.captionText = caption.GetComponent<TextMeshProUGUI>();
dd.itemText = itemLabelGO.GetComponent<TextMeshProUGUI>();
dd.options = options.Select(o => new TMP_Dropdown.OptionData(o)).ToList();
dd.RefreshShownValue();
// ScrollRect wiring
var scr = template.GetComponent<ScrollRect>();
scr.viewport = viewport.GetComponent<RectTransform>();
scr.content = content.GetComponent<RectTransform>();
scr.horizontal = false; scr.vertical = true;
return go;
}
private static GameObject CreateToggle(Transform parent, string name, string labelText, bool initial)
{
var go = new GameObject(name, typeof(RectTransform), typeof(Toggle));
go.transform.SetParent(parent, false);
var bg = CreateImage(go.transform, "Background", new Color(0.2f,0.2f,0.2f));
var check = CreateImage(bg.transform, "Checkmark", new Color(0.7f,1f,0.7f));
var label = CreateText(go.transform, "Label", labelText, 18, TextAnchor.MiddleLeft, Color.white, FontStyles.Normal);
var t = go.GetComponent<Toggle>();
t.isOn = initial; t.graphic = check.GetComponent<Image>(); t.targetGraphic = bg.GetComponent<Image>();
var rt = (RectTransform)go.transform; rt.sizeDelta = new Vector2(600, 40);
var bgRT = (RectTransform)bg.transform; bgRT.anchorMin = new Vector2(0,0.5f); bgRT.anchorMax = new Vector2(0,0.5f); bgRT.pivot = new Vector2(0,0.5f); bgRT.sizeDelta = new Vector2(24,24);
var checkRT = (RectTransform)check.transform; checkRT.anchorMin = checkRT.anchorMax = new Vector2(0.5f,0.5f); checkRT.sizeDelta = new Vector2(16,16);
var labelRT = (RectTransform)label.transform; labelRT.anchorMin = new Vector2(0,0); labelRT.anchorMax = new Vector2(1,1); labelRT.offsetMin = new Vector2(34,0); labelRT.offsetMax = new Vector2(0,0);
return go;
}
private static GameObject CreateImage(Transform parent, string name, Color color)
{
var go = new GameObject(name, typeof(RectTransform), typeof(Image));
go.transform.SetParent(parent, false);
var img = go.GetComponent<Image>(); img.color = color;
return go;
}
private static void CreateSpacer(Transform parent, float height)
{
var sp = new GameObject("Spacer", typeof(RectTransform));
sp.transform.SetParent(parent, false);
var rt = (RectTransform)sp.transform; rt.sizeDelta = new Vector2(0, height);
}
private static ScrollRect CreateScrollList(Transform parent, out Transform content, string scrollName, string viewportName, string contentName)
{
var scrollGO = new GameObject(scrollName, typeof(RectTransform), typeof(Image), typeof(ScrollRect));
scrollGO.transform.SetParent(parent, false);
var srt = (RectTransform)scrollGO.transform; srt.sizeDelta = new Vector2(0, 240);
var img = scrollGO.GetComponent<Image>(); img.color = new Color(0,0,0,0.3f);
var viewport = new GameObject(viewportName, typeof(RectTransform), typeof(Mask), typeof(Image));
viewport.transform.SetParent(scrollGO.transform, false);
var vImg = viewport.GetComponent<Image>(); vImg.color = new Color(0,0,0,0.1f);
viewport.GetComponent<Mask>().showMaskGraphic = false;
var vprt = (RectTransform)viewport.transform; vprt.anchorMin = new Vector2(0,0); vprt.anchorMax = new Vector2(1,1); vprt.offsetMin = Vector2.zero; vprt.offsetMax = Vector2.zero;
var contentGO = new GameObject(contentName, typeof(RectTransform), typeof(VerticalLayoutGroup));
contentGO.transform.SetParent(viewport.transform, false);
var vlg = contentGO.GetComponent<VerticalLayoutGroup>(); vlg.spacing = 8; vlg.childAlignment = TextAnchor.UpperLeft; vlg.childForceExpandWidth = true;
var crt = (RectTransform)contentGO.transform; crt.anchorMin = new Vector2(0,1); crt.anchorMax = new Vector2(1,1); crt.pivot = new Vector2(0.5f,1); crt.offsetMin = new Vector2(0,0); crt.offsetMax = new Vector2(0,0);
var csf = contentGO.AddComponent<ContentSizeFitter>(); csf.verticalFit = ContentSizeFitter.FitMode.PreferredSize;
content = contentGO.transform;
var scroll = scrollGO.GetComponent<ScrollRect>(); scroll.viewport = (RectTransform)viewport.transform; scroll.content = (RectTransform)content; scroll.horizontal = false; scroll.vertical = true;
return scroll;
}
} }
} }
#endif #endif

176
Game/ANIMATOR_SETUP.md Normal file
View File

@@ -0,0 +1,176 @@
# Third Person Animator Setup
## Přehled
Animator systém je nyní plně integrován do `ThirdPersonCharacterController.cs` a má automatický generátor pro vytvoření Animator Controlleru z Kevin Iglesias animací.
## ⚠️ DŮLEŽITÉ - Pokud máte problémy s animacemi
Pokud animace pohybu trhají nebo jump animace nefungují:
1. **Smažte starý controller** (pokud jste ho už vytvořili)
2. **Vytvořte nový controller** s opraveným kódem (viz níže)
3. **Zkontrolujte Console** pro debug výpis všech nalezených animací
### Oprava provedena:
- ✅ Opraveno načítání animací z FBX souborů
- ✅ Opraveno použití skutečné rychlosti z CharacterController
- ✅ Opraveny jump transitions (Begin → Fall → Land)
- ✅ Přidán debug výpis pro kontrolu načtených animací
## Rychlý Start
### 1. Otevřete Auto Builder
V Unity menu: **MegaKoop → Animator → Auto Build Controller**
### 2. Vygenerujte Controller
- Okno automaticky najde všechny animace ve složce Kevin Iglesias
- Klikněte **"Najít Animace"** (nebo se načtou automaticky)
- **Zkontrolujte Console** - měli byste vidět "Načteno: [název animace] z [cesta]"
- Vyberte GameObject s `ThirdPersonCharacterController` v Hierarchy
- Zaškrtněte "Přiřadit na vybraný objekt"
- Klikněte na **Vytvořit Animator Controller**
### 3. Zkontrolujte Console
Měli byste vidět výpis všech načtených animací:
```
=== Vytváření Animator Controller ===
Idle: HumanM@Idle01
Walk Forward: HumanM@Walk01_Forward
Walk Backward: HumanM@Walk01_Backward
...
Jump Begin: HumanM@Jump01 - Begin
Jump Fall: HumanM@Fall01
Jump Land: HumanM@Jump01 - Land
```
### 4. Hotovo!
Controller je vytvořen a přiřazen. Animace budou fungovat automaticky.
## Co je zahrnuto
### Stavy Animatoru:
- **Idle** - Poklidový stav
- **Move** - 2D Blend Tree pro pohyb všemi směry (Forward/Backward/Left/Right + diagonály)
- **Crouch** - Dřep (stisknutím LeftControl)
- **Jump Begin** - Začátek skoku
- **Jump Fall** - Pád ve vzduchu
- **Jump Land** - Dopad
- **Death** - Smrt
### Parametry:
- **MoveX** (float) - Lokální X pohyb
- **MoveZ** (float) - Lokální Z pohyb
- **Speed** (float) - Rychlost postavy
- **IsGrounded** (bool) - Je na zemi
- **IsCrouching** (bool) - Dřepí
- **IsDead** (bool) - Je mrtvý
- **Jump** (trigger) - Spustí skok
## Použití v kódu
### Nastavení smrti:
```csharp
var controller = GetComponent<ThirdPersonCharacterController>();
controller.SetDead(true);
```
### Změna crouch klávesy:
V Inspectoru na `ThirdPersonCharacterController` změňte "Crouch Key".
## Nalezené animace
### Idle
- `HumanM@Idle01.fbx`
### Walk (všechny směry)
- `HumanM@Walk01_Forward.fbx`
- `HumanM@Walk01_Backward.fbx`
- `HumanM@Walk01_Left.fbx`
- `HumanM@Walk01_Right.fbx`
- `HumanM@Walk01_ForwardLeft.fbx`
- `HumanM@Walk01_ForwardRight.fbx`
- `HumanM@Walk01_BackwardLeft.fbx`
- `HumanM@Walk01_BackwardRight.fbx`
### Crouch
- `HumanM@Crouch01_Idle.fbx`
### Jump (3 fáze)
- `HumanM@Jump01 - Begin.fbx`
- `HumanM@Fall01.fbx`
- `HumanM@Jump01 - Land.fbx`
### Death
- `HumanM@Death01.fbx`
## Poznámky
- **Animator je přímo v ThirdPersonCharacterController** - není potřeba žádný driver
- **Automatické hledání animací** - stačí kliknout na tlačítko
- **Plná integrace** - funguje s existující movement logikou
- **Skok má 3 fáze** - Begin → Fall → Land pro realistický skok
- **2D Blend Movement** - plynulý přechod mezi všemi směry pohybu
## Řešení problémů
### Animace pohybu se zastaví po 1 sekundě
**OPRAVENO** - Použití `CharacterController.velocity` místo `planarVelocity`
**Co dělat:**
1. Smažte starý Animator Controller asset
2. Vytvořte nový controller přes Auto Builder
3. Ujistěte se, že používáte aktuální verzi `ThirdPersonCharacterController.cs`
### Jump animace nefungují
**OPRAVENO** - Přidány správné 3 fáze skoku a transitions
**Co kontrolovat:**
- V Animatoru musí být stavy: "Jump Begin", "Jump Fall", "Jump Land"
- Transitions: Begin → Fall (exit time 0.8) → Land (when IsGrounded)
- Zkontrolujte Console, že všechny 3 jump animace byly načteny
### Animace nejsou nalezeny
**Příznaky:** V okně Auto Builder jsou prázdná pole nebo Console ukazuje "Nelze najít FBX"
**Řešení:**
1. Zkontrolujte, že složka `Assets/Kevin Iglesias/Human Animations/Animations/Male` existuje
2. Zkontrolujte, že FBX soubory jsou v této struktuře:
- `Idles/HumanM@Idle01.fbx`
- `Movement/Walk/HumanM@Walk01_Forward.fbx`
- `Movement/Jump/HumanM@Jump01 - Begin.fbx`
- atd.
3. Klikněte na "Najít Animace" v Auto Builder okně
### Animace se nehrají vůbec
**Řešení:**
1. Vyberte GameObject v Hierarchy
2. V Inspectoru zkontrolujte:
- `Animator` komponenta existuje a má přiřazený Controller
- `ThirdPersonCharacterController.animator` není null (mělo by být auto-přiřazeno)
3. V Play mode otevřete Animator okno (Window → Animation → Animator)
4. Sledujte, jestli se mění parametry (MoveX, MoveZ, Speed)
### Animace se hrají, ale postavy se netočí správně
- Animace z Kevin Iglesias mohou mít Root Motion
- Zkontrolujte FBX Import Settings:
- Vyberte FBX soubor
- V Inspectoru → Rig → Animation Type: Humanoid
- Animation → Apply Root Motion (podle potřeby)
### Debug kroky
1. **Otevřete Console** při vytváření controlleru - měli byste vidět:
```
Načteno: HumanM@Idle01 z Assets/Kevin Iglesias/.../Idle01.fbx
Načteno: HumanM@Walk01_Forward z Assets/Kevin Iglesias/.../Walk01_Forward.fbx
...
```
2. **V Play mode sledujte Animator parametry:**
- Vyberte objekt
- Otevřete Animator okno
- Sledujte hodnoty MoveX, MoveZ, Speed při pohybu (WASD)
3. **Zkontrolujte rychlost:**
- V Inspectoru na `ThirdPersonCharacterController`
- `Move Speed` by měla být > 0 (default 5)
- `Animation Damping` by měla být malá (default 0.075)

View File

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

8
Game/Animations.meta Normal file
View File

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

View File

@@ -0,0 +1,773 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1102 &-8498935495016141866
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Move
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: -4781775403145456279}
- {fileID: 8850178536444615697}
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: 2825293835707982962}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!206 &-8424935704365893109
BlendTree:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: CrouchTree
m_Childs:
- serializedVersion: 2
m_Motion: {fileID: 3094330708855449807, guid: 8bb16e2bf48f0ba498b4ee70d2518ae0, type: 3}
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: 3094330708855449807, guid: c8513a8a84992304cbf5d83a50496982, type: 3}
m_Threshold: 0.14285715
m_Position: {x: 0, y: -1}
m_TimeScale: 1
m_CycleOffset: 0
m_DirectBlendParameter: Blend
m_Mirror: 0
- serializedVersion: 2
m_Motion: {fileID: 3094330708855449807, guid: 9aaaba966ff19b94d85b861b188e3c7c, type: 3}
m_Threshold: 0.2857143
m_Position: {x: -1, y: 0}
m_TimeScale: 1
m_CycleOffset: 0
m_DirectBlendParameter: Blend
m_Mirror: 0
- serializedVersion: 2
m_Motion: {fileID: 3094330708855449807, guid: a04e7617c7224c140bb54bc5efa749d8, type: 3}
m_Threshold: 0.42857143
m_Position: {x: 1, y: 0}
m_TimeScale: 1
m_CycleOffset: 0
m_DirectBlendParameter: Blend
m_Mirror: 0
- serializedVersion: 2
m_Motion: {fileID: 3094330708855449807, guid: c80bcd4bbb8f34b4295d0bbf504f9d14, type: 3}
m_Threshold: 0.5714286
m_Position: {x: -0.707, y: 0.707}
m_TimeScale: 1
m_CycleOffset: 0
m_DirectBlendParameter: Blend
m_Mirror: 0
- serializedVersion: 2
m_Motion: {fileID: 3094330708855449807, guid: 1739295ae441ee2449c2966785bf080d, type: 3}
m_Threshold: 0.71428573
m_Position: {x: 0.707, y: 0.707}
m_TimeScale: 1
m_CycleOffset: 0
m_DirectBlendParameter: Blend
m_Mirror: 0
- serializedVersion: 2
m_Motion: {fileID: 3094330708855449807, guid: 78b00c47efe6d994c9dd17dcdfb9f937, type: 3}
m_Threshold: 0.85714287
m_Position: {x: -0.707, y: -0.707}
m_TimeScale: 1
m_CycleOffset: 0
m_DirectBlendParameter: Blend
m_Mirror: 0
- serializedVersion: 2
m_Motion: {fileID: 3094330708855449807, guid: d2383fa5c874d6c47ba9641ed23c0f9b, type: 3}
m_Threshold: 1
m_Position: {x: 0.707, y: -0.707}
m_TimeScale: 1
m_CycleOffset: 0
m_DirectBlendParameter: Blend
m_Mirror: 0
m_BlendParameter: MoveX
m_BlendParameterY: MoveY
m_MinThreshold: 0
m_MaxThreshold: 1
m_UseAutomaticThresholds: 1
m_NormalizedBlendValues: 0
m_BlendType: 2
--- !u!1101 &-6651448720518132220
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: IsCrouching
m_EventTreshold: 0
- m_ConditionMode: 3
m_ConditionEvent: Speed
m_EventTreshold: 0.1
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -8498935495016141866}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.1
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1102 &-5610313386011628649
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Die
m_Speed: 1
m_CycleOffset: 0
m_Transitions: []
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 3094330708855449807, guid: fbf1938c2eaa52a46b465cf5cb6768e6, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &-4952808120312174995
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: JumpBegin
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: -1493415361259481946}
- {fileID: 312786165673304762}
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: 3094330708855449807, guid: b1844fbe628f5bf4ab29e6c68912a708, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1101 &-4781775403145456279
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 4
m_ConditionEvent: Speed
m_EventTreshold: 0.1
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 2828396430913159249}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.1
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &-2470093999796400837
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: IsGrounded
m_EventTreshold: 0
- m_ConditionMode: 1
m_ConditionEvent: Jump
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -4952808120312174995}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.02
m_TransitionOffset: 0
m_ExitTime: 0.75
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 0
--- !u!1101 &-1493415361259481946
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: IsFalling
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 8130476550729524520}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.05
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!91 &9100000
AnimatorController:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: HumanM
serializedVersion: 5
m_AnimatorParameters:
- m_Name: MoveX
m_Type: 1
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: MoveY
m_Type: 1
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: Speed
m_Type: 1
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: IsGrounded
m_Type: 4
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: IsCrouching
m_Type: 4
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: Jump
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: Die
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: IsFalling
m_Type: 4
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
m_AnimatorLayers:
- serializedVersion: 5
m_Name: Base Layer
m_StateMachine: {fileID: 6902866215468604435}
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!1101 &312786165673304762
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions: []
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 8130476550729524520}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &1581134310927100116
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions: []
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 2828396430913159249}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.05
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 1
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &2023964638505838094
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: Die
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -5610313386011628649}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.25
m_TransitionOffset: 0
m_ExitTime: 0.75
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!206 &2825293835707982962
BlendTree:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: MoveTree
m_Childs:
- serializedVersion: 2
m_Motion: {fileID: 3094330708855449807, guid: 6deac83e30d8acd4cbb8c7d8a11545bd, type: 3}
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: 3094330708855449807, guid: a8e6c7cf678a13541a726c2ae9ec00e3, type: 3}
m_Threshold: 0.14285715
m_Position: {x: 0, y: -1}
m_TimeScale: 1
m_CycleOffset: 0
m_DirectBlendParameter: Blend
m_Mirror: 0
- serializedVersion: 2
m_Motion: {fileID: 3094330708855449807, guid: 9f9dbe8815370164d8a2214328af4f13, type: 3}
m_Threshold: 0.2857143
m_Position: {x: -1, y: 0}
m_TimeScale: 1
m_CycleOffset: 0
m_DirectBlendParameter: Blend
m_Mirror: 0
- serializedVersion: 2
m_Motion: {fileID: 3094330708855449807, guid: 846fff649819bcf49b933d00ef6f703f, type: 3}
m_Threshold: 0.42857143
m_Position: {x: 1, y: 0}
m_TimeScale: 1
m_CycleOffset: 0
m_DirectBlendParameter: Blend
m_Mirror: 0
- serializedVersion: 2
m_Motion: {fileID: 3094330708855449807, guid: 2d491dc6ab8cc5045919954fe2601203, type: 3}
m_Threshold: 0.5714286
m_Position: {x: -0.707, y: 0.707}
m_TimeScale: 1
m_CycleOffset: 0
m_DirectBlendParameter: Blend
m_Mirror: 0
- serializedVersion: 2
m_Motion: {fileID: 3094330708855449807, guid: 152af2cd00aaae34e816ebb8deb4b68e, type: 3}
m_Threshold: 0.71428573
m_Position: {x: 0.707, y: 0.707}
m_TimeScale: 1
m_CycleOffset: 0
m_DirectBlendParameter: Blend
m_Mirror: 0
- serializedVersion: 2
m_Motion: {fileID: 3094330708855449807, guid: 02fe127be7c987640bef36b78efaf2cf, type: 3}
m_Threshold: 0.85714287
m_Position: {x: -0.707, y: -0.707}
m_TimeScale: 1
m_CycleOffset: 0
m_DirectBlendParameter: Blend
m_Mirror: 0
- serializedVersion: 2
m_Motion: {fileID: 3094330708855449807, guid: ca7bf50d255ff5749a3a9ff602076af8, type: 3}
m_Threshold: 1
m_Position: {x: 0.707, y: -0.707}
m_TimeScale: 1
m_CycleOffset: 0
m_DirectBlendParameter: Blend
m_Mirror: 0
m_BlendParameter: MoveX
m_BlendParameterY: MoveY
m_MinThreshold: 0
m_MaxThreshold: 1
m_UseAutomaticThresholds: 1
m_NormalizedBlendValues: 0
m_BlendType: 2
--- !u!1102 &2828396430913159249
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Idle
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: 8944780679689797325}
- {fileID: 5723977862795017248}
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: -2576967968662016515, guid: 56fd86b76fc74d24d83522069f5deb9b, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1101 &3940675542928111531
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: IsGrounded
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 7753169543815885552}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.1
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1102 &4785738724227979027
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Crouch
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: 6263248612010160671}
- {fileID: -6651448720518132220}
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: -8424935704365893109}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1101 &5723977862795017248
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: IsCrouching
m_EventTreshold: 0
- m_ConditionMode: 1
m_ConditionEvent: IsGrounded
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 4785738724227979027}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.1
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &6263248612010160671
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: IsCrouching
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 2828396430913159249}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.1
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1107 &6902866215468604435
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: 2828396430913159249}
m_Position: {x: 470, y: -50, z: 0}
- serializedVersion: 1
m_State: {fileID: -8498935495016141866}
m_Position: {x: 10, y: 400, z: 0}
- serializedVersion: 1
m_State: {fileID: 4785738724227979027}
m_Position: {x: 360, y: 400, z: 0}
- serializedVersion: 1
m_State: {fileID: -4952808120312174995}
m_Position: {x: 10, y: 310, z: 0}
- serializedVersion: 1
m_State: {fileID: 8130476550729524520}
m_Position: {x: 250, y: 310, z: 0}
- serializedVersion: 1
m_State: {fileID: 7753169543815885552}
m_Position: {x: 520, y: 330, z: 0}
- serializedVersion: 1
m_State: {fileID: -5610313386011628649}
m_Position: {x: -270, y: 100, z: 0}
m_ChildStateMachines: []
m_AnyStateTransitions:
- {fileID: -2470093999796400837}
- {fileID: 2023964638505838094}
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: 2828396430913159249}
--- !u!1102 &7753169543815885552
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: JumpLand
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: 1581134310927100116}
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: 3094330708855449807, guid: c969c57136eab8b48b882fdc45e975c4, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &8130476550729524520
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: JumpFall
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: 3940675542928111531}
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: 8908273484855622883, guid: 1455f282db7117d419994bb5c5f3acc2, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1101 &8850178536444615697
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: IsCrouching
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 4785738724227979027}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.1
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &8944780679689797325
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 3
m_ConditionEvent: Speed
m_EventTreshold: 0.1
- m_ConditionMode: 1
m_ConditionEvent: IsGrounded
m_EventTreshold: 0
- m_ConditionMode: 2
m_ConditionEvent: IsCrouching
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -8498935495016141866}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.1
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 0130b400909ef714a80f28c344f88f1d
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 9100000
userData:
assetBundleName:
assetBundleVariant:

View File

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

View File

@@ -0,0 +1,875 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1101 &-9223099930910222944
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 3
m_ConditionEvent: MoveX
m_EventTreshold: 0.1
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 3832306803502314366}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.1
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &-8532517125171013088
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 3
m_ConditionEvent: MoveY
m_EventTreshold: 0.1
- m_ConditionMode: 3
m_ConditionEvent: MoveX
m_EventTreshold: -0.5
- m_ConditionMode: 4
m_ConditionEvent: MoveX
m_EventTreshold: 0.5
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 8976783716086687100}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.1
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &-7598184442945806257
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 4
m_ConditionEvent: MoveY
m_EventTreshold: -0.1
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 7273822655190391941}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.1
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1102 &-5613363637968929658
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Crouch
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: 4793052910455504006}
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: 5615237629708574395, guid: e39f1f951d4bf1b4192e2b9843ddeac0, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1101 &-4733973239875750970
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 4
m_ConditionEvent: MoveX
m_EventTreshold: -0.1
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 3991497513609260727}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.1
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1107 &-3339399623978585728
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: 9180075961849181553}
m_Position: {x: 280, y: 0, z: 0}
- serializedVersion: 1
m_State: {fileID: 8976783716086687100}
m_Position: {x: 610, y: 10, z: 0}
- serializedVersion: 1
m_State: {fileID: 7273822655190391941}
m_Position: {x: 320, y: 140, z: 0}
- serializedVersion: 1
m_State: {fileID: 3991497513609260727}
m_Position: {x: 520, y: 260, z: 0}
- serializedVersion: 1
m_State: {fileID: 3832306803502314366}
m_Position: {x: 230, y: 250, z: 0}
- serializedVersion: 1
m_State: {fileID: -5613363637968929658}
m_Position: {x: 620, y: 330, z: 0}
- serializedVersion: 1
m_State: {fileID: 4338801518624474264}
m_Position: {x: 190, y: 380, z: 0}
- serializedVersion: 1
m_State: {fileID: -1033068699299765464}
m_Position: {x: -130, y: 310, z: 0}
m_ChildStateMachines: []
m_AnyStateTransitions:
- {fileID: -1744180146228335812}
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: 9180075961849181553}
--- !u!1101 &-1744180146228335812
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: IsDead
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -1033068699299765464}
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: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 0
--- !u!1102 &-1033068699299765464
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Death
m_Speed: 1
m_CycleOffset: 0
m_Transitions: []
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 3094330708855449807, guid: 7760eb562ddb5444b8d0e43f7c2192df, type: 3}
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: KevinIglesias_Animator
serializedVersion: 5
m_AnimatorParameters:
- m_Name: MoveX
m_Type: 1
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: MoveY
m_Type: 1
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: IsCrouching
m_Type: 4
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: IsJumping
m_Type: 4
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: IsDead
m_Type: 4
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
m_AnimatorLayers:
- serializedVersion: 5
m_Name: Base Layer
m_StateMachine: {fileID: -3339399623978585728}
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!1101 &127254228791712997
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 4
m_ConditionEvent: MoveY
m_EventTreshold: -0.1
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 7273822655190391941}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.1
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &589304064454404889
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 3
m_ConditionEvent: MoveY
m_EventTreshold: 0.1
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 8976783716086687100}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.1
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &1284069681199553331
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 4
m_ConditionEvent: MoveX
m_EventTreshold: 0.1
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 9180075961849181553}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.1
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &1312605581613424915
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 4
m_ConditionEvent: MoveX
m_EventTreshold: -0.1
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 3991497513609260727}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.1
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &2277284908929358149
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 3
m_ConditionEvent: MoveY
m_EventTreshold: 0.1
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 8976783716086687100}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.1
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &2972984080605431098
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 4
m_ConditionEvent: MoveY
m_EventTreshold: 0.1
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 9180075961849181553}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.1
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &3251282714847043942
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 3
m_ConditionEvent: MoveX
m_EventTreshold: 0.1
- m_ConditionMode: 3
m_ConditionEvent: MoveY
m_EventTreshold: -0.5
- m_ConditionMode: 4
m_ConditionEvent: MoveY
m_EventTreshold: 0.5
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 3832306803502314366}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.1
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &3746686181836934452
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 3
m_ConditionEvent: MoveX
m_EventTreshold: 0.1
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 3832306803502314366}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.1
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &3796912113966575383
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 4
m_ConditionEvent: MoveY
m_EventTreshold: -0.1
- m_ConditionMode: 3
m_ConditionEvent: MoveX
m_EventTreshold: -0.5
- m_ConditionMode: 4
m_ConditionEvent: MoveX
m_EventTreshold: 0.5
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 7273822655190391941}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.1
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1102 &3832306803502314366
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Walk_Right
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: 1284069681199553331}
- {fileID: 2277284908929358149}
- {fileID: 127254228791712997}
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: 3094330708855449807, guid: 04d25d986c5b3d14d95a5d3d2407bf88, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1101 &3956464035334462522
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: IsJumping
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 9180075961849181553}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1102 &3991497513609260727
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Walk_Left
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: 6145983808295941987}
- {fileID: 589304064454404889}
- {fileID: -7598184442945806257}
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: 3094330708855449807, guid: 0b06d1311dfeb18428ccc1797869bda2, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &4338801518624474264
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Jump
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: 3956464035334462522}
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: 3094330708855449807, guid: abfd5440ec4350b46bdc9de604553b7a, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1101 &4793052910455504006
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: IsCrouching
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 9180075961849181553}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &6145983808295941987
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 3
m_ConditionEvent: MoveX
m_EventTreshold: -0.1
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 9180075961849181553}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.1
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1102 &7273822655190391941
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Walk_Backward
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: 8649353525588907647}
- {fileID: 1312605581613424915}
- {fileID: 3746686181836934452}
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: 3094330708855449807, guid: fb96533b282f4bf4cb39e26ed7a456e5, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1101 &7329264976501435579
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 4
m_ConditionEvent: MoveX
m_EventTreshold: -0.1
- m_ConditionMode: 3
m_ConditionEvent: MoveY
m_EventTreshold: -0.5
- m_ConditionMode: 4
m_ConditionEvent: MoveY
m_EventTreshold: 0.5
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 3991497513609260727}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.1
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &7976597507551637200
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: IsCrouching
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -5613363637968929658}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &8011782933078922766
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: IsJumping
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 4338801518624474264}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &8649353525588907647
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 3
m_ConditionEvent: MoveY
m_EventTreshold: -0.1
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 9180075961849181553}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.1
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1102 &8976783716086687100
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Walk_Forward
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: 2972984080605431098}
- {fileID: -4733973239875750970}
- {fileID: -9223099930910222944}
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: 3094330708855449807, guid: fb96533b282f4bf4cb39e26ed7a456e5, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &9180075961849181553
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Idle
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: -8532517125171013088}
- {fileID: 3796912113966575383}
- {fileID: 7329264976501435579}
- {fileID: 3251282714847043942}
- {fileID: 7976597507551637200}
- {fileID: 8011782933078922766}
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: 3094330708855449807, guid: c163a36c98396ee4488ff914e337cf3c, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: f2edbb32292840240b9ba89a593dcd3b
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 9100000
userData:
assetBundleName:
assetBundleVariant:

20
Game/BossSchedule.asset Normal file
View File

@@ -0,0 +1,20 @@
%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: 2e2ad306ddab577d19b1e0e6bbb6fea9, type: 3}
m_Name: BossSchedule
m_EditorClassIdentifier: Assembly-CSharp::Game.Scripts.Runtime.Data.BossSchedule
events:
- TimeSinceStart: 30
Boss: {fileID: 11400000, guid: 931549bcc3a079d30b302ebd17d6ebd4, type: 2}
Count: 1
useSpawnRadiusOverride: 0
spawnRadiusOverride: 0

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 319a0c9985048d82a988921e699fc6c6
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

8
Game/Editor.meta Normal file
View File

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

View File

@@ -0,0 +1,387 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using UnityEditor;
using UnityEditor.Animations;
using UnityEngine;
namespace MegaKoop.Game.EditorExtensions
{
public class AutoAnimatorControllerBuilder : EditorWindow
{
private const string ANIM_BASE_PATH = "Assets/Kevin Iglesias/Human Animations/Animations/Male";
private string controllerSavePath = "Assets/Game/ThirdPersonController.controller";
private bool assignToSelected = true;
private AnimationClip idleClip;
private AnimationClip walkForward, walkBackward, walkLeft, walkRight;
private AnimationClip walkForwardLeft, walkForwardRight, walkBackwardLeft, walkBackwardRight;
private AnimationClip crouchIdle;
private AnimationClip jumpBegin, jumpFall, jumpLand;
private AnimationClip deathClip;
[MenuItem("MegaKoop/Animator/Auto Build Controller")]
public static void ShowWindow()
{
var window = GetWindow<AutoAnimatorControllerBuilder>(true, "Auto Animator Builder");
window.minSize = new Vector2(500, 650);
window.Show();
}
private void OnEnable()
{
AutoDiscoverAnimations();
}
private void OnGUI()
{
EditorGUILayout.LabelField("Automatický Animator Controller Builder", EditorStyles.boldLabel);
EditorGUILayout.Space(6);
EditorGUILayout.HelpBox(
"Tento nástroj automaticky najde animace ve složce Kevin Iglesias a vytvoří kompletní Animator Controller.\n" +
"Stiskněte 'Najít Animace' pro aktualizaci nebo 'Vytvořit Controller' pro vygenerování.",
MessageType.Info);
EditorGUILayout.Space(8);
if (GUILayout.Button("Najít Animace", GUILayout.Height(30)))
{
AutoDiscoverAnimations();
}
EditorGUILayout.Space(8);
EditorGUILayout.LabelField("Nalezené Animace:", EditorStyles.boldLabel);
DrawClipField("Idle", idleClip);
DrawClipField("Walk Forward", walkForward);
DrawClipField("Walk Backward", walkBackward);
DrawClipField("Walk Left", walkLeft);
DrawClipField("Walk Right", walkRight);
DrawClipField("Walk Forward Left", walkForwardLeft);
DrawClipField("Walk Forward Right", walkForwardRight);
DrawClipField("Walk Backward Left", walkBackwardLeft);
DrawClipField("Walk Backward Right", walkBackwardRight);
DrawClipField("Crouch Idle", crouchIdle);
DrawClipField("Jump Begin", jumpBegin);
DrawClipField("Jump Fall", jumpFall);
DrawClipField("Jump Land", jumpLand);
DrawClipField("Death", deathClip);
EditorGUILayout.Space(10);
EditorGUILayout.LabelField("Nastavení:", EditorStyles.boldLabel);
assignToSelected = EditorGUILayout.Toggle("Přiřadit na vybraný objekt", assignToSelected);
EditorGUILayout.BeginHorizontal();
controllerSavePath = EditorGUILayout.TextField("Cesta uložení", controllerSavePath);
if (GUILayout.Button("...", GUILayout.Width(32)))
{
string path = EditorUtility.SaveFilePanelInProject(
"Uložit Animator Controller",
"ThirdPersonController",
"controller",
"Vyberte umístění pro Animator Controller");
if (!string.IsNullOrEmpty(path)) controllerSavePath = path;
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.Space(12);
using (new EditorGUI.DisabledScope(!CanBuild()))
{
if (GUILayout.Button("Vytvořit Animator Controller", GUILayout.Height(40)))
{
BuildController();
}
}
if (!CanBuild())
{
EditorGUILayout.HelpBox("Pro vytvoření controlleru musí být nalezeny minimálně: Idle, Walk Forward/Backward/Left/Right, Jump Begin/Fall/Land.", MessageType.Warning);
}
}
private void DrawClipField(string label, AnimationClip clip)
{
EditorGUILayout.BeginHorizontal();
EditorGUILayout.LabelField(label, GUILayout.Width(150));
GUI.enabled = false;
EditorGUILayout.ObjectField(clip, typeof(AnimationClip), false);
GUI.enabled = true;
EditorGUILayout.EndHorizontal();
}
private void AutoDiscoverAnimations()
{
Debug.Log("Hledám animace v Kevin Iglesias složce...");
idleClip = LoadAnimationClip("Idles/HumanM@Idle01.fbx");
walkForward = LoadAnimationClip("Movement/Walk/HumanM@Walk01_Forward.fbx");
walkBackward = LoadAnimationClip("Movement/Walk/HumanM@Walk01_Backward.fbx");
walkLeft = LoadAnimationClip("Movement/Walk/HumanM@Walk01_Left.fbx");
walkRight = LoadAnimationClip("Movement/Walk/HumanM@Walk01_Right.fbx");
walkForwardLeft = LoadAnimationClip("Movement/Walk/HumanM@Walk01_ForwardLeft.fbx");
walkForwardRight = LoadAnimationClip("Movement/Walk/HumanM@Walk01_ForwardRight.fbx");
walkBackwardLeft = LoadAnimationClip("Movement/Walk/HumanM@Walk01_BackwardLeft.fbx");
walkBackwardRight = LoadAnimationClip("Movement/Walk/HumanM@Walk01_BackwardRight.fbx");
crouchIdle = LoadAnimationClip("Movement/Crouch/HumanM@Crouch01_Idle.fbx");
jumpBegin = LoadAnimationClip("Movement/Jump/HumanM@Jump01 - Begin.fbx");
jumpFall = LoadAnimationClip("Movement/Jump/HumanM@Fall01.fbx");
jumpLand = LoadAnimationClip("Movement/Jump/HumanM@Jump01 - Land.fbx");
deathClip = LoadAnimationClip("Combat/HumanM@Death01.fbx");
Debug.Log("Hledání dokončeno.");
Repaint();
}
private AnimationClip LoadAnimationClip(string relativePath)
{
string fullPath = Path.Combine(ANIM_BASE_PATH, relativePath).Replace("\\", "/");
// Load all assets from the FBX file
var assets = AssetDatabase.LoadAllAssetsAtPath(fullPath);
if (assets == null || assets.Length == 0)
{
Debug.LogWarning($"Nelze najít assets v: {fullPath}");
return null;
}
// Find animation clips (excluding preview clips)
var clips = new List<AnimationClip>();
foreach (var asset in assets)
{
if (asset is AnimationClip clip && !clip.name.Contains("__preview__"))
{
clips.Add(clip);
}
}
if (clips.Count == 0)
{
Debug.LogWarning($"Žádné AnimationClip v: {fullPath}");
return null;
}
// Return the first valid clip
var result = clips[0];
Debug.Log($"Načteno: {result.name} z {fullPath}");
return result;
}
private bool CanBuild()
{
return idleClip != null &&
walkForward != null && walkBackward != null && walkLeft != null && walkRight != null &&
jumpBegin != null && jumpFall != null && jumpLand != null &&
!string.IsNullOrEmpty(controllerSavePath);
}
private void BuildController()
{
Debug.Log("=== Vytváření Animator Controller ===");
Debug.Log($"Idle: {(idleClip != null ? idleClip.name : "CHYBÍ")}");
Debug.Log($"Walk Forward: {(walkForward != null ? walkForward.name : "CHYBÍ")}");
Debug.Log($"Walk Backward: {(walkBackward != null ? walkBackward.name : "CHYBÍ")}");
Debug.Log($"Walk Left: {(walkLeft != null ? walkLeft.name : "CHYBÍ")}");
Debug.Log($"Walk Right: {(walkRight != null ? walkRight.name : "CHYBÍ")}");
Debug.Log($"Jump Begin: {(jumpBegin != null ? jumpBegin.name : "CHYBÍ")}");
Debug.Log($"Jump Fall: {(jumpFall != null ? jumpFall.name : "CHYBÍ")}");
Debug.Log($"Jump Land: {(jumpLand != null ? jumpLand.name : "CHYBÍ")}");
var controller = AnimatorController.CreateAnimatorControllerAtPath(controllerSavePath);
AddParameters(controller);
var root = controller.layers[0].stateMachine;
// States
var idle = root.AddState("Idle", new Vector3(250, 50, 0));
idle.motion = idleClip;
root.defaultState = idle;
var move = root.AddState("Move", new Vector3(250, 150, 0));
move.motion = CreateMoveBlendTree(controller);
move.speedParameterActive = true;
move.speedParameter = "MoveSpeedNormalized";
AnimatorState crouch = null;
if (crouchIdle != null)
{
crouch = root.AddState("Crouch", new Vector3(250, 250, 0));
crouch.motion = crouchIdle;
}
var jumpBeginState = root.AddState("Jump Begin", new Vector3(500, 50, 0));
jumpBeginState.motion = jumpBegin;
var jumpFallState = root.AddState("Jump Fall", new Vector3(500, 150, 0));
jumpFallState.motion = jumpFall;
var jumpLandState = root.AddState("Jump Land", new Vector3(500, 250, 0));
jumpLandState.motion = jumpLand;
AnimatorState death = null;
if (deathClip != null)
{
death = root.AddState("Death", new Vector3(250, 350, 0));
death.motion = deathClip;
}
// Transitions: Idle <-> Move
var idleToMove = idle.AddTransition(move);
idleToMove.hasExitTime = false;
idleToMove.duration = 0.1f;
idleToMove.AddCondition(AnimatorConditionMode.Greater, 0.1f, "Speed");
var moveToIdle = move.AddTransition(idle);
moveToIdle.hasExitTime = false;
moveToIdle.duration = 0.1f;
moveToIdle.AddCondition(AnimatorConditionMode.Less, 0.1f, "Speed");
// Crouch transitions
if (crouch != null)
{
var anyToCrouch = root.AddAnyStateTransition(crouch);
anyToCrouch.hasExitTime = false;
anyToCrouch.duration = 0.1f;
anyToCrouch.AddCondition(AnimatorConditionMode.If, 0f, "IsCrouching");
var crouchToIdle = crouch.AddTransition(idle);
crouchToIdle.hasExitTime = false;
crouchToIdle.duration = 0.1f;
crouchToIdle.AddCondition(AnimatorConditionMode.IfNot, 0f, "IsCrouching");
crouchToIdle.AddCondition(AnimatorConditionMode.Less, 0.1f, "Speed");
var crouchToMove = crouch.AddTransition(move);
crouchToMove.hasExitTime = false;
crouchToMove.duration = 0.1f;
crouchToMove.AddCondition(AnimatorConditionMode.IfNot, 0f, "IsCrouching");
crouchToMove.AddCondition(AnimatorConditionMode.Greater, 0.1f, "Speed");
}
// Jump transitions: AnyState -> Jump Begin
// Jump transitions from grounded states
var idleToJump = idle.AddTransition(jumpBeginState);
idleToJump.hasExitTime = false;
idleToJump.duration = 0.05f;
idleToJump.AddCondition(AnimatorConditionMode.If, 0f, "IsJumping");
idleToJump.AddCondition(AnimatorConditionMode.IfNot, 0f, "IsGrounded");
var moveToJump = move.AddTransition(jumpBeginState);
moveToJump.hasExitTime = false;
moveToJump.duration = 0.05f;
moveToJump.AddCondition(AnimatorConditionMode.If, 0f, "IsJumping");
moveToJump.AddCondition(AnimatorConditionMode.IfNot, 0f, "IsGrounded");
if (crouch != null)
{
var crouchToJump = crouch.AddTransition(jumpBeginState);
crouchToJump.hasExitTime = false;
crouchToJump.duration = 0.05f;
crouchToJump.AddCondition(AnimatorConditionMode.If, 0f, "IsJumping");
crouchToJump.AddCondition(AnimatorConditionMode.IfNot, 0f, "IsGrounded");
}
// Jump Begin -> Jump Fall (automatic after animation)
var jumpBeginToFall = jumpBeginState.AddTransition(jumpFallState);
jumpBeginToFall.hasExitTime = true;
jumpBeginToFall.exitTime = 0.8f;
jumpBeginToFall.duration = 0.05f;
jumpBeginToFall.hasFixedDuration = true;
// Jump Fall -> Jump Land (when grounded)
var jumpFallToLand = jumpFallState.AddTransition(jumpLandState);
jumpFallToLand.hasExitTime = false;
jumpFallToLand.duration = 0.05f;
jumpFallToLand.hasFixedDuration = true;
jumpFallToLand.AddCondition(AnimatorConditionMode.If, 0f, "IsGrounded");
// Jump Land -> Idle (exit time)
var jumpLandToIdle = jumpLandState.AddTransition(idle);
jumpLandToIdle.hasExitTime = true;
jumpLandToIdle.exitTime = 0.7f;
jumpLandToIdle.duration = 0.1f;
jumpLandToIdle.hasFixedDuration = true;
jumpLandToIdle.AddCondition(AnimatorConditionMode.Less, 0.1f, "Speed");
// Jump Land -> Move (exit time)
var jumpLandToMove = jumpLandState.AddTransition(move);
jumpLandToMove.hasExitTime = true;
jumpLandToMove.exitTime = 0.7f;
jumpLandToMove.duration = 0.1f;
jumpLandToMove.hasFixedDuration = true;
jumpLandToMove.AddCondition(AnimatorConditionMode.Greater, 0.1f, "Speed");
// Death
if (death != null)
{
var anyToDeath = root.AddAnyStateTransition(death);
anyToDeath.hasExitTime = false;
anyToDeath.duration = 0.2f;
anyToDeath.AddCondition(AnimatorConditionMode.If, 0f, "IsDead");
}
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
Debug.Log($"Animator Controller vytvořen: {controllerSavePath}");
if (assignToSelected && Selection.activeGameObject != null)
{
var go = Selection.activeGameObject;
var anim = go.GetComponent<Animator>();
if (anim == null) anim = go.AddComponent<Animator>();
anim.runtimeAnimatorController = controller;
Debug.Log($"Controller přiřazen na: {go.name}");
}
EditorGUIUtility.PingObject(controller);
}
private void AddParameters(AnimatorController controller)
{
controller.AddParameter("MoveX", AnimatorControllerParameterType.Float);
controller.AddParameter("MoveZ", AnimatorControllerParameterType.Float);
controller.AddParameter("Speed", AnimatorControllerParameterType.Float);
controller.AddParameter("MoveSpeedNormalized", AnimatorControllerParameterType.Float);
controller.AddParameter("IsGrounded", AnimatorControllerParameterType.Bool);
controller.AddParameter("IsCrouching", AnimatorControllerParameterType.Bool);
controller.AddParameter("IsDead", AnimatorControllerParameterType.Bool);
controller.AddParameter("IsJumping", AnimatorControllerParameterType.Bool);
}
private Motion CreateMoveBlendTree(AnimatorController controller)
{
var tree = new BlendTree
{
name = "MoveTree",
blendType = BlendTreeType.FreeformCartesian2D,
useAutomaticThresholds = false,
blendParameter = "MoveX",
blendParameterY = "MoveZ"
};
AssetDatabase.AddObjectToAsset(tree, controller);
var children = new List<ChildMotion>();
if (walkForward != null) children.Add(new ChildMotion { motion = walkForward, position = new Vector2(0f, 1f), timeScale = 1f });
if (walkBackward != null) children.Add(new ChildMotion { motion = walkBackward, position = new Vector2(0f, -1f), timeScale = 1f });
if (walkLeft != null) children.Add(new ChildMotion { motion = walkLeft, position = new Vector2(-1f, 0f), timeScale = 1f });
if (walkRight != null) children.Add(new ChildMotion { motion = walkRight, position = new Vector2(1f, 0f), timeScale = 1f });
if (walkForwardLeft != null) children.Add(new ChildMotion { motion = walkForwardLeft, position = new Vector2(-0.707f, 0.707f), timeScale = 1f });
if (walkForwardRight != null) children.Add(new ChildMotion { motion = walkForwardRight, position = new Vector2(0.707f, 0.707f), timeScale = 1f });
if (walkBackwardLeft != null) children.Add(new ChildMotion { motion = walkBackwardLeft, position = new Vector2(-0.707f, -0.707f), timeScale = 1f });
if (walkBackwardRight != null) children.Add(new ChildMotion { motion = walkBackwardRight, position = new Vector2(0.707f, -0.707f), timeScale = 1f });
tree.children = children.ToArray();
return tree;
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 1b37cd72d6f4eda48b10c9637d641c6f

8
Game/Enemy/Butcher.meta Normal file
View File

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

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: d086cbb30c7bb4ba3a58cb2024fa0b31
timeCreated: 1526423972
licenseType: Store
NativeFormatImporter:
mainObjectFileID: 100100000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,22 @@
%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: 6b0e84710d3119d60af5d5373005e029, type: 3}
m_Name: ButcherDefinition
m_EditorClassIdentifier: Assembly-CSharp::Game.Scripts.Runtime.Data.EnemyDefinition
id: enemy_golem
Prefab: {fileID: 1170732337855516, guid: d086cbb30c7bb4ba3a58cb2024fa0b31, type: 3}
IsBoss: 1
BaseHP: 300
MoveSpeed: 6
Damage: 10
PrefabPivotOffset: {x: 0, y: 0, z: 0}
Tags: []

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 931549bcc3a079d30b302ebd17d6ebd4
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -56,7 +56,7 @@ Transform:
m_GameObject: {fileID: 1070748433161756} m_GameObject: {fileID: 1070748433161756}
serializedVersion: 2 serializedVersion: 2
m_LocalRotation: {x: 0.05427486, y: 0.395974, z: 0.124479234, w: 0.9081651} m_LocalRotation: {x: 0.05427486, y: 0.395974, z: 0.124479234, w: 0.9081651}
m_LocalPosition: {x: -0.3286817, y: -5.684342e-16, z: 1.4654943e-16} m_LocalPosition: {x: -0.3286817, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
m_Children: m_Children:
@@ -475,6 +475,17 @@ GameObject:
- component: {fileID: 95902137545226380} - component: {fileID: 95902137545226380}
- component: {fileID: 6003919833639142508} - component: {fileID: 6003919833639142508}
- component: {fileID: 2197706699938650528} - component: {fileID: 2197706699938650528}
- component: {fileID: 6042376723608263729}
- component: {fileID: -1978034200425575233}
- component: {fileID: 5386150419490112215}
- component: {fileID: -2049111374676499537}
- component: {fileID: 1868764211993700903}
- component: {fileID: -8655886036466571170}
- component: {fileID: 4325330991877430748}
- component: {fileID: 8191023303709792670}
- component: {fileID: -3415813308782895168}
- component: {fileID: -5739904894815735660}
- component: {fileID: -5727812561544685987}
m_Layer: 8 m_Layer: 8
m_Name: Golem m_Name: Golem
m_TagString: Untagged m_TagString: Untagged
@@ -507,6 +518,7 @@ Transform:
- {fileID: 4435288916602084} - {fileID: 4435288916602084}
- {fileID: 4622407164390344} - {fileID: 4622407164390344}
- {fileID: 4810071759811394} - {fileID: 4810071759811394}
- {fileID: 8960331849695004692}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!95 &95902137545226380 --- !u!95 &95902137545226380
@@ -546,7 +558,7 @@ MonoBehaviour:
maxHealth: 100 maxHealth: 100
team: 2 team: 2
ignoreFriendlyFire: 1 ignoreFriendlyFire: 1
destroyOnDeath: 1 destroyOnDeath: 0
onHealthChanged: onHealthChanged:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
@@ -576,6 +588,264 @@ CapsuleCollider:
m_Height: 1.8835256 m_Height: 1.8835256
m_Direction: 1 m_Direction: 1
m_Center: {x: -0.033632576, y: 0.82399094, z: 0} m_Center: {x: -0.033632576, y: 0.82399094, z: 0}
--- !u!114 &6042376723608263729
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1170732337855516}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3}
m_Name:
m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.NetworkObject
GlobalObjectIdHash: 2899175104
InScenePlacedSourceGlobalObjectIdHash: 0
DeferredDespawnTick: 0
Ownership: 1
AlwaysReplicateAsRoot: 0
SynchronizeTransform: 1
ActiveSceneSynchronization: 0
SceneMigrationSynchronization: 1
SpawnWithObservers: 1
DontDestroyWithOwner: 0
AutoObjectParentSync: 1
SyncOwnerTransformWhenParented: 1
AllowOwnerToParent: 0
--- !u!114 &-1978034200425575233
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1170732337855516}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3}
m_Name:
m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.Components.NetworkTransform
ShowTopMostFoldoutHeaderGroup: 1
NetworkTransformExpanded: 0
AutoOwnerAuthorityTickOffset: 1
PositionInterpolationType: 0
RotationInterpolationType: 0
ScaleInterpolationType: 0
PositionLerpSmoothing: 1
PositionMaxInterpolationTime: 0.1
RotationLerpSmoothing: 1
RotationMaxInterpolationTime: 0.1
ScaleLerpSmoothing: 1
ScaleMaxInterpolationTime: 0.1
AuthorityMode: 0
TickSyncChildren: 0
UseUnreliableDeltas: 0
SyncPositionX: 1
SyncPositionY: 1
SyncPositionZ: 1
SyncRotAngleX: 1
SyncRotAngleY: 1
SyncRotAngleZ: 1
SyncScaleX: 1
SyncScaleY: 1
SyncScaleZ: 1
PositionThreshold: 0.001
RotAngleThreshold: 0.01
ScaleThreshold: 0.01
UseQuaternionSynchronization: 0
UseQuaternionCompression: 0
UseHalfFloatPrecision: 0
InLocalSpace: 0
SwitchTransformSpaceWhenParented: 0
Interpolate: 1
SlerpPosition: 0
--- !u!114 &5386150419490112215
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1170732337855516}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1e6f99ca4475ead269829ba672213d5c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::MegaKoop.Game.Networking.NetworkIdentity
networkId: 0
assignOnAwake: 1
--- !u!114 &-2049111374676499537
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1170732337855516}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 88efaaed4187a0ee8ad63b619f65e970, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::MegaKoop.Game.Networking.SteamNetworkTransform
targetTransform: {fileID: 4526463827110206}
identity: {fileID: 5386150419490112215}
trackedRigidbody: {fileID: 0}
trackedNavMeshAgent: {fileID: -3415813308782895168}
authorityIsHost: 1
simulateWhenDisconnected: 1
broadcastInterval: 0.05
remoteLerpSpeed: 12
teleportThreshold: 4
--- !u!114 &1868764211993700903
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1170732337855516}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e6e77e83dcc282364afb3428637c723c, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::MegaKoop.Game.WeaponSystem.WeaponController
ownerTeam: 2
weaponSocket: {fileID: 4114918029122462}
acquisitionRadius: 30
retargetInterval: 0.25
targetMask:
serializedVersion: 2
m_Bits: 499
lineOfSightMask:
serializedVersion: 2
m_Bits: 499
requireLineOfSight: 1
startingWeapons:
- {fileID: 11400000, guid: 912de7c15ecf9d38d9be364bc0ac0f70, type: 2}
autoFire: 1
--- !u!114 &-8655886036466571170
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1170732337855516}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 44c91a3744d2af1e4b9ee0f82451691a, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::MegaKoop.Game.Enemy.SteamEnemyController
moveSpeed: 3.5
turnSpeed: 6
stoppingDistance: 4
detectionRadius: 30
leashDistance: 60
retargetInterval: 0.4
repathThreshold: 1.5
returnToSpawnWhenIdle: 1
navMeshAgent: {fileID: -3415813308782895168}
weaponController: {fileID: 1868764211993700903}
health: {fileID: 6003919833639142508}
identity: {fileID: 5386150419490112215}
networkTransform: {fileID: -2049111374676499537}
fallbackDefinition: {fileID: 11400000, guid: 1bc4888fa172eb99f94756653be6c1ed, type: 2}
applyDefinitionStats: 1
healthMultiplier: 1
moveSpeedMultiplier: 1
damageMultiplier: 1
deathDespawnDelay: 0
--- !u!114 &4325330991877430748
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1170732337855516}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: dad61aa7b24bddb6b9add5a461263779, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::MegaKoop.Game.Networking.SteamWeaponNetworkBridge
weaponController: {fileID: 1868764211993700903}
identity: {fileID: 5386150419490112215}
disableLocalFiringWhenClient: 1
--- !u!114 &8191023303709792670
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1170732337855516}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a55005e32d7c7fdd89d4c15872d0466d, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::MegaKoop.Game.Networking.SteamHealthNetworkBridge
health: {fileID: 6003919833639142508}
identity: {fileID: 5386150419490112215}
--- !u!195 &-3415813308782895168
NavMeshAgent:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1170732337855516}
m_Enabled: 1
m_AgentTypeID: 0
m_Radius: 0.5
m_Speed: 3.5
m_Acceleration: 8
avoidancePriority: 50
m_AngularSpeed: 120
m_StoppingDistance: 0
m_AutoTraverseOffMeshLink: 1
m_AutoBraking: 1
m_AutoRepath: 1
m_Height: 2
m_BaseOffset: 0
m_WalkableMask: 4294967295
m_ObstacleAvoidanceType: 4
--- !u!54 &-5739904894815735660
Rigidbody:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1170732337855516}
serializedVersion: 5
m_Mass: 1
m_LinearDamping: 0
m_AngularDamping: 0.05
m_CenterOfMass: {x: 0, y: 0, z: 0}
m_InertiaTensor: {x: 1, y: 1, z: 1}
m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_ImplicitCom: 1
m_ImplicitTensor: 1
m_UseGravity: 1
m_IsKinematic: 0
m_Interpolate: 0
m_Constraints: 0
m_CollisionDetection: 0
--- !u!114 &-5727812561544685987
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1170732337855516}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f6c0be61502bb534f922ebb746851216, type: 3}
m_Name:
m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.Components.NetworkRigidbody
ShowTopMostFoldoutHeaderGroup: 1
NetworkRigidbodyBaseExpanded: 0
UseRigidBodyForMotion: 0
AutoUpdateKinematicState: 1
AutoSetKinematicOnDespawn: 1
--- !u!1 &1186076032050976 --- !u!1 &1186076032050976
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -3218,3 +3488,34 @@ Transform:
- {fileID: 4359018392181336} - {fileID: 4359018392181336}
m_Father: {fileID: 4923149105459994} m_Father: {fileID: 4923149105459994}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &5677012161785445265
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8960331849695004692}
m_Layer: 0
m_Name: weaponSocket
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &8960331849695004692
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5677012161785445265}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0.37696, y: 0, z: -17.87976}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4526463827110206}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}

View File

@@ -0,0 +1,22 @@
%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: 6b0e84710d3119d60af5d5373005e029, type: 3}
m_Name: GolemDefinition
m_EditorClassIdentifier: Assembly-CSharp::Game.Scripts.Runtime.Data.EnemyDefinition
id: enemy_golem
Prefab: {fileID: 1170732337855516, guid: b5051c49d05768c73a8c42e1967fe4b2, type: 3}
IsBoss: 0
BaseHP: 100
MoveSpeed: 3.5
Damage: 10
PrefabPivotOffset: {x: 0, y: 0, z: 0}
Tags: []

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 1bc4888fa172eb99f94756653be6c1ed
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,29 @@
%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: 1db1d1943f6165546b7a8aa42068f69b, type: 3}
m_Name: Champion_00
m_EditorClassIdentifier: Assembly-CSharp::MegaKoop.Champions.ChampionData
championName: Champion 1
championId: 0
description: Popis pro Champion 1
portrait: {fileID: 0}
championPrefab: {fileID: 7059514996416789454, guid: fe75fe22781f92b369675fdfc9657f7d, type: 3}
primaryGunName: Primary Weapon
primaryGunDescription: Primary gun description
secondaryGunName: Secondary Weapon
secondaryGunDescription: Secondary gun description
passiveName: Passive Ability
passiveDescription: Passive ability description
primaryGunIcon: {fileID: 0}
secondaryGunIcon: {fileID: 0}
passiveIcon: {fileID: 0}
themeColor: {r: 1, g: 1, b: 1, a: 1}

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: e91e178970c9ce94fa1aae63627dd287
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,29 @@
%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: 1db1d1943f6165546b7a8aa42068f69b, type: 3}
m_Name: Champion_01
m_EditorClassIdentifier: Assembly-CSharp::MegaKoop.Champions.ChampionData
championName: Champion 2
championId: 1
description: Popis pro Champion 2
portrait: {fileID: 0}
championPrefab: {fileID: 2809934685114486836, guid: ae082cf2d3a36684fb23d8ec0e643150, type: 3}
primaryGunName: Primary Weapon
primaryGunDescription: Primary gun description
secondaryGunName: Secondary Weapon
secondaryGunDescription: Secondary gun description
passiveName: Passive Ability
passiveDescription: Passive ability description
primaryGunIcon: {fileID: 0}
secondaryGunIcon: {fileID: 0}
passiveIcon: {fileID: 0}
themeColor: {r: 1, g: 1, b: 1, a: 1}

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 3063583c11830974380a240794f2a205
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -15,12 +15,12 @@ MonoBehaviour:
displayName: Weapon displayName: Weapon
viewPrefab: {fileID: 6595277065068154610, guid: 7eba33411273ad195adc8a8253711e93, type: 3} viewPrefab: {fileID: 6595277065068154610, guid: 7eba33411273ad195adc8a8253711e93, type: 3}
projectilePrefab: {fileID: -6920969466594260193, guid: 6703b124cb13a577c8aae6a4851d0274, type: 3} projectilePrefab: {fileID: -6920969466594260193, guid: 6703b124cb13a577c8aae6a4851d0274, type: 3}
projectileSpeed: 10 projectileSpeed: 15
projectileLifetime: 5 projectileLifetime: 5
shotsPerSecond: 1 shotsPerSecond: 1
baseDamage: 10 baseDamage: 5
range: 25 range: 25
projectilesPerShot: 1 projectilesPerShot: 2
spreadAngle: 0 spreadAngle: 0
hitMask: hitMask:
serializedVersion: 2 serializedVersion: 2

2629
Game/Hero/Wizard 2.0.prefab Normal file

File diff suppressed because it is too large Load Diff

View File

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

519
Game/Hero/Wizard.controller Normal file
View File

@@ -0,0 +1,519 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1102 &-5005458363344763551
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Die
m_Speed: 1
m_CycleOffset: 0
m_Transitions: []
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 1
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 3094330708855449807, guid: 7760eb562ddb5444b8d0e43f7c2192df, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1101 &-4631355371241270487
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 3
m_ConditionEvent: Speed
m_EventTreshold: 0.1
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 3548663125465516573}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.1
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &-1429160152013153923
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: IsGrounded
m_EventTreshold: 0
- m_ConditionMode: 3
m_ConditionEvent: Speed
m_EventTreshold: 0.1
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 3548663125465516573}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.05
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!91 &9100000
AnimatorController:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Wizard
serializedVersion: 5
m_AnimatorParameters:
- m_Name: MoveX
m_Type: 1
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: MoveY
m_Type: 1
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: Speed
m_Type: 1
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: Crouch
m_Type: 4
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: IsGrounded
m_Type: 4
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: Jump
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: Die
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: VelocityX
m_Type: 1
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: VelocityZ
m_Type: 1
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
m_AnimatorLayers:
- serializedVersion: 5
m_Name: Base Layer
m_StateMachine: {fileID: 8242670736330881267}
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!1101 &116473636664755690
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: Crouch
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 4317488930648554223}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.1
m_TransitionOffset: 0
m_ExitTime: 0.75
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &1082025487737620517
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: IsGrounded
m_EventTreshold: 0
- m_ConditionMode: 4
m_ConditionEvent: Speed
m_EventTreshold: 0.1
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 2647644253287696677}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.05
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!206 &1416250122200667625
BlendTree:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Locomotion1D
m_Childs:
- serializedVersion: 2
m_Motion: {fileID: 3094330708855449807, guid: c163a36c98396ee4488ff914e337cf3c, type: 3}
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: 3094330708855449807, guid: 0f2c87ca7a855df43a8828ca45b4ac7a, type: 3}
m_Threshold: 1
m_Position: {x: 0, y: 0}
m_TimeScale: 1
m_CycleOffset: 0
m_DirectBlendParameter: Blend
m_Mirror: 0
m_BlendParameter: Speed
m_BlendParameterY: Blend
m_MinThreshold: 0
m_MaxThreshold: 1
m_UseAutomaticThresholds: 0
m_NormalizedBlendValues: 0
m_BlendType: 0
--- !u!1101 &2139043373077119958
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: Die
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -5005458363344763551}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.05
m_TransitionOffset: 0
m_ExitTime: 0.75
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1102 &2647644253287696677
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Idle
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: -4631355371241270487}
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: 3094330708855449807, guid: c163a36c98396ee4488ff914e337cf3c, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &2678168681401043168
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Jump
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: 1082025487737620517}
- {fileID: -1429160152013153923}
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: 3094330708855449807, guid: abfd5440ec4350b46bdc9de604553b7a, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1101 &3415526489745367715
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: Crouch
m_EventTreshold: 0
- m_ConditionMode: 3
m_ConditionEvent: Speed
m_EventTreshold: 0.1
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 3548663125465516573}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.1
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1102 &3548663125465516573
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Locomotion
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: 6894626867432249349}
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: 1416250122200667625}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1101 &3662821069391527842
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: Crouch
m_EventTreshold: 0
- m_ConditionMode: 4
m_ConditionEvent: Speed
m_EventTreshold: 0.1
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 2647644253287696677}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.1
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1102 &4317488930648554223
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Crouch
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: 3662821069391527842}
- {fileID: 3415526489745367715}
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: 5615237629708574395, guid: e39f1f951d4bf1b4192e2b9843ddeac0, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1101 &6894626867432249349
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 4
m_ConditionEvent: Speed
m_EventTreshold: 0.1
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 2647644253287696677}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.1
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &7734956140975118551
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: Jump
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 2678168681401043168}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.05
m_TransitionOffset: 0
m_ExitTime: 0.75
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1107 &8242670736330881267
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: 2647644253287696677}
m_Position: {x: 150, y: 0, z: 0}
- serializedVersion: 1
m_State: {fileID: 3548663125465516573}
m_Position: {x: 160, y: 190, z: 0}
- serializedVersion: 1
m_State: {fileID: 4317488930648554223}
m_Position: {x: 530, y: 110, z: 0}
- serializedVersion: 1
m_State: {fileID: 2678168681401043168}
m_Position: {x: -90, y: 100, z: 0}
- serializedVersion: 1
m_State: {fileID: -5005458363344763551}
m_Position: {x: 580, y: 260, z: 0}
m_ChildStateMachines: []
m_AnyStateTransitions:
- {fileID: 7734956140975118551}
- {fileID: 116473636664755690}
- {fileID: 2139043373077119958}
m_EntryTransitions: []
m_StateMachineTransitions: {}
m_StateMachineBehaviours: []
m_AnyStatePosition: {x: 150, y: 320, z: 0}
m_EntryPosition: {x: -80, y: -10, z: 0}
m_ExitPosition: {x: 800, y: 120, z: 0}
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
m_DefaultState: {fileID: 2647644253287696677}

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: d9d32685621ce2d44afc1490f6452d8f
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 9100000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -965,7 +965,7 @@ Transform:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4051574964924464450} m_GameObject: {fileID: 4051574964924464450}
serializedVersion: 2 serializedVersion: 2
m_LocalRotation: {x: -0.57854766, y: 0.6324858, z: -0.3525135, w: -0.37547135} m_LocalRotation: {x: -0.57854766, y: 0.63248575, z: -0.3525135, w: -0.3754713}
m_LocalPosition: {x: -5.8011727, y: -4.1914477, z: -7.447154} m_LocalPosition: {x: -5.8011727, y: -4.1914477, z: -7.447154}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
@@ -1857,6 +1857,9 @@ GameObject:
- component: {fileID: -6761485100369211516} - component: {fileID: -6761485100369211516}
- component: {fileID: -2990689074187600234} - component: {fileID: -2990689074187600234}
- component: {fileID: 7618815643042096284} - component: {fileID: 7618815643042096284}
- component: {fileID: 2662658783078050447}
- component: {fileID: 2417536914360261273}
- component: {fileID: 2931281317230154068}
m_Layer: 0 m_Layer: 0
m_Name: Wizard m_Name: Wizard
m_TagString: Untagged m_TagString: Untagged
@@ -1892,10 +1895,10 @@ Animator:
m_GameObject: {fileID: 7059514996416789454} m_GameObject: {fileID: 7059514996416789454}
m_Enabled: 1 m_Enabled: 1
m_Avatar: {fileID: 9000000, guid: e2958561779b1a748a4246b9d0c0b309, type: 3} m_Avatar: {fileID: 9000000, guid: e2958561779b1a748a4246b9d0c0b309, type: 3}
m_Controller: {fileID: 0} m_Controller: {fileID: 9100000, guid: 1261fb92576292f47b316fe17df7bf95, type: 2}
m_CullingMode: 1 m_CullingMode: 1
m_UpdateMode: 0 m_UpdateMode: 0
m_ApplyRootMotion: 1 m_ApplyRootMotion: 0
m_LinearVelocityBlending: 0 m_LinearVelocityBlending: 0
m_StabilizeFeet: 0 m_StabilizeFeet: 0
m_AnimatePhysics: 0 m_AnimatePhysics: 0
@@ -1945,9 +1948,16 @@ MonoBehaviour:
rotationSharpness: 15 rotationSharpness: 15
airControlResponsiveness: 60 airControlResponsiveness: 60
jumpHeight: 1.6 jumpHeight: 1.6
gravity: -20 gravity: -10
groundedGravity: -5 groundedGravity: -0.01
jumpBufferTime: 0.1
coyoteTime: 0.1
upwardGravityMultiplier: 1
fallGravityMultiplier: 10
cameraTransform: {fileID: 266386425542752718} cameraTransform: {fileID: 266386425542752718}
animator: {fileID: 3962868364137827229}
animationDamping: 0.075
crouchKey: 306
--- !u!114 &-6761485100369211516 --- !u!114 &-6761485100369211516
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -2019,6 +2029,94 @@ CapsuleCollider:
m_Height: 2.0070767 m_Height: 2.0070767
m_Direction: 1 m_Direction: 1
m_Center: {x: 0, y: 0.9898484, z: 0} m_Center: {x: 0, y: 0.9898484, z: 0}
--- !u!114 &2662658783078050447
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7059514996416789454}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3}
m_Name:
m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.NetworkObject
GlobalObjectIdHash: 913186323
InScenePlacedSourceGlobalObjectIdHash: 0
DeferredDespawnTick: 0
Ownership: 1
AlwaysReplicateAsRoot: 0
SynchronizeTransform: 1
ActiveSceneSynchronization: 0
SceneMigrationSynchronization: 1
SpawnWithObservers: 1
DontDestroyWithOwner: 0
AutoObjectParentSync: 1
SyncOwnerTransformWhenParented: 1
AllowOwnerToParent: 0
--- !u!114 &2417536914360261273
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7059514996416789454}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3}
m_Name:
m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.Components.NetworkTransform
ShowTopMostFoldoutHeaderGroup: 1
NetworkTransformExpanded: 0
AutoOwnerAuthorityTickOffset: 1
PositionInterpolationType: 0
RotationInterpolationType: 0
ScaleInterpolationType: 0
PositionLerpSmoothing: 1
PositionMaxInterpolationTime: 0.1
RotationLerpSmoothing: 1
RotationMaxInterpolationTime: 0.1
ScaleLerpSmoothing: 1
ScaleMaxInterpolationTime: 0.1
AuthorityMode: 1
TickSyncChildren: 0
UseUnreliableDeltas: 0
SyncPositionX: 1
SyncPositionY: 1
SyncPositionZ: 1
SyncRotAngleX: 1
SyncRotAngleY: 1
SyncRotAngleZ: 1
SyncScaleX: 1
SyncScaleY: 1
SyncScaleZ: 1
PositionThreshold: 0.001
RotAngleThreshold: 0.01
ScaleThreshold: 0.01
UseQuaternionSynchronization: 0
UseQuaternionCompression: 0
UseHalfFloatPrecision: 0
InLocalSpace: 0
SwitchTransformSpaceWhenParented: 0
Interpolate: 1
SlerpPosition: 0
--- !u!114 &2931281317230154068
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7059514996416789454}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 79fb1fbc20d80f546ba695c751860930, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::MegaKoop.Game.UI.SteamNameTag
followHead: {fileID: 7928616218613849049}
worldOffset: {x: 0, y: 1.2, z: 0}
billboardToCamera: 1
hideForLocal: 1
visibleDistance: 60
--- !u!1 &7094911519708027617 --- !u!1 &7094911519708027617
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -2278,7 +2376,7 @@ Transform:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7267033616394110034} m_GameObject: {fileID: 7267033616394110034}
serializedVersion: 2 serializedVersion: 2
m_LocalRotation: {x: 0.6324858, y: 0.57854766, z: 0.37547132, w: -0.3525135} m_LocalRotation: {x: 0.63248575, y: 0.57854766, z: 0.37547126, w: -0.3525135}
m_LocalPosition: {x: -5.801534, y: -4.191418, z: 7.44715} m_LocalPosition: {x: -5.801534, y: -4.191418, z: 7.44715}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0

8
Game/Particles.meta Normal file
View File

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

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 976974e4d3018034e87caeb9f51f20f6

View File

@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: b18b93d4b5d00384ba417df18aeac5a3
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 109565
packageName: Cartoon FX Remaster Free
packageVersion: R 1.5.0
assetPath: Assets/JMO Assets/Cartoon FX FREE (old legacy effects).unitypackage
uploadId: 756876

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,14 @@
{
"name": "CFXREditor",
"references": [],
"optionalUnityReferences": [],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": []
}

View File

@@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: eb5cb7c323a395242a81960087292f3c
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 109565
packageName: Cartoon FX Remaster Free
packageVersion: R 1.5.0
assetPath: Assets/JMO Assets/Cartoon FX Remaster/CFXR Assets/Editor/CFXR Editor.asmdef
uploadId: 756876

View File

@@ -0,0 +1,275 @@
//--------------------------------------------------------------------------------------------------------------------------------
// Cartoon FX
// (c) 2012-2025 Jean Moreno
//--------------------------------------------------------------------------------------------------------------------------------
using System.Collections.Generic;
using System.IO;
// Parse conditional expressions from CFXR_MaterialInspector to show/hide some parts of the UI easily
namespace CartoonFX
{
public static class ExpressionParser
{
public delegate bool EvaluateFunction(string content);
//--------------------------------------------------------------------------------------------------------------------------------
// Main Function to use
static public bool EvaluateExpression(string expression, EvaluateFunction evalFunction)
{
//Remove white spaces and double && ||
string cleanExpr = "";
for(int i = 0; i < expression.Length; i++)
{
switch(expression[i])
{
case ' ': break;
case '&': cleanExpr += expression[i]; i++; break;
case '|': cleanExpr += expression[i]; i++; break;
default: cleanExpr += expression[i]; break;
}
}
List<Token> tokens = new List<Token>();
StringReader reader = new StringReader(cleanExpr);
Token t = null;
do
{
t = new Token(reader);
tokens.Add(t);
} while(t.type != Token.TokenType.EXPR_END);
List<Token> polishNotation = Token.TransformToPolishNotation(tokens);
var enumerator = polishNotation.GetEnumerator();
enumerator.MoveNext();
Expression root = MakeExpression(ref enumerator, evalFunction);
return root.Evaluate();
}
//--------------------------------------------------------------------------------------------------------------------------------
// Expression Token
public class Token
{
static Dictionary<char, KeyValuePair<TokenType, string>> typesDict = new Dictionary<char, KeyValuePair<TokenType, string>>()
{
{'(', new KeyValuePair<TokenType, string>(TokenType.OPEN_PAREN, "(")},
{')', new KeyValuePair<TokenType, string>(TokenType.CLOSE_PAREN, ")")},
{'!', new KeyValuePair<TokenType, string>(TokenType.UNARY_OP, "NOT")},
{'&', new KeyValuePair<TokenType, string>(TokenType.BINARY_OP, "AND")},
{'|', new KeyValuePair<TokenType, string>(TokenType.BINARY_OP, "OR")}
};
public enum TokenType
{
OPEN_PAREN,
CLOSE_PAREN,
UNARY_OP,
BINARY_OP,
LITERAL,
EXPR_END
}
public TokenType type;
public string value;
public Token(StringReader s)
{
int c = s.Read();
if(c == -1)
{
type = TokenType.EXPR_END;
value = "";
return;
}
char ch = (char)c;
//Special case: solve bug where !COND_FALSE_1 && COND_FALSE_2 would return True
bool embeddedNot = (ch == '!' && s.Peek() != '(');
if(typesDict.ContainsKey(ch) && !embeddedNot)
{
type = typesDict[ch].Key;
value = typesDict[ch].Value;
}
else
{
string str = "";
str += ch;
while(s.Peek() != -1 && !typesDict.ContainsKey((char)s.Peek()))
{
str += (char)s.Read();
}
type = TokenType.LITERAL;
value = str;
}
}
static public List<Token> TransformToPolishNotation(List<Token> infixTokenList)
{
Queue<Token> outputQueue = new Queue<Token>();
Stack<Token> stack = new Stack<Token>();
int index = 0;
while(infixTokenList.Count > index)
{
Token t = infixTokenList[index];
switch(t.type)
{
case Token.TokenType.LITERAL:
outputQueue.Enqueue(t);
break;
case Token.TokenType.BINARY_OP:
case Token.TokenType.UNARY_OP:
case Token.TokenType.OPEN_PAREN:
stack.Push(t);
break;
case Token.TokenType.CLOSE_PAREN:
while(stack.Peek().type != Token.TokenType.OPEN_PAREN)
{
outputQueue.Enqueue(stack.Pop());
}
stack.Pop();
if(stack.Count > 0 && stack.Peek().type == Token.TokenType.UNARY_OP)
{
outputQueue.Enqueue(stack.Pop());
}
break;
default:
break;
}
index++;
}
while(stack.Count > 0)
{
outputQueue.Enqueue(stack.Pop());
}
var list = new List<Token>(outputQueue);
list.Reverse();
return list;
}
}
//--------------------------------------------------------------------------------------------------------------------------------
// Boolean Expression Classes
public abstract class Expression
{
public abstract bool Evaluate();
}
public class ExpressionLeaf : Expression
{
private string content;
private EvaluateFunction evalFunction;
public ExpressionLeaf(EvaluateFunction _evalFunction, string _content)
{
this.evalFunction = _evalFunction;
this.content = _content;
}
override public bool Evaluate()
{
//embedded not, see special case in Token declaration
if(content.StartsWith("!"))
{
return !this.evalFunction(content.Substring(1));
}
return this.evalFunction(content);
}
}
public class ExpressionAnd : Expression
{
private Expression left;
private Expression right;
public ExpressionAnd(Expression _left, Expression _right)
{
this.left = _left;
this.right = _right;
}
override public bool Evaluate()
{
return left.Evaluate() && right.Evaluate();
}
}
public class ExpressionOr : Expression
{
private Expression left;
private Expression right;
public ExpressionOr(Expression _left, Expression _right)
{
this.left = _left;
this.right = _right;
}
override public bool Evaluate()
{
return left.Evaluate() || right.Evaluate();
}
}
public class ExpressionNot : Expression
{
private Expression expr;
public ExpressionNot(Expression _expr)
{
this.expr = _expr;
}
override public bool Evaluate()
{
return !expr.Evaluate();
}
}
static public Expression MakeExpression(ref List<Token>.Enumerator polishNotationTokensEnumerator, EvaluateFunction _evalFunction)
{
if(polishNotationTokensEnumerator.Current.type == Token.TokenType.LITERAL)
{
Expression lit = new ExpressionLeaf(_evalFunction, polishNotationTokensEnumerator.Current.value);
polishNotationTokensEnumerator.MoveNext();
return lit;
}
else
{
if(polishNotationTokensEnumerator.Current.value == "NOT")
{
polishNotationTokensEnumerator.MoveNext();
Expression operand = MakeExpression(ref polishNotationTokensEnumerator, _evalFunction);
return new ExpressionNot(operand);
}
else if(polishNotationTokensEnumerator.Current.value == "AND")
{
polishNotationTokensEnumerator.MoveNext();
Expression left = MakeExpression(ref polishNotationTokensEnumerator, _evalFunction);
Expression right = MakeExpression(ref polishNotationTokensEnumerator, _evalFunction);
return new ExpressionAnd(left, right);
}
else if(polishNotationTokensEnumerator.Current.value == "OR")
{
polishNotationTokensEnumerator.MoveNext();
Expression left = MakeExpression(ref polishNotationTokensEnumerator, _evalFunction);
Expression right = MakeExpression(ref polishNotationTokensEnumerator, _evalFunction);
return new ExpressionOr(left, right);
}
}
return null;
}
}
}

View File

@@ -0,0 +1,17 @@
fileFormatVersion: 2
guid: ce7d96d3a4d4f3b4681ab437a9710d60
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 109565
packageName: Cartoon FX Remaster Free
packageVersion: R 1.5.0
assetPath: Assets/JMO Assets/Cartoon FX Remaster/CFXR Assets/Editor/CFXR_ExpressionParser.cs
uploadId: 756876

View File

@@ -0,0 +1,592 @@
//--------------------------------------------------------------------------------------------------------------------------------
// Cartoon FX
// (c) 2012-2025 Jean Moreno
//--------------------------------------------------------------------------------------------------------------------------------
using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;
// Custom material inspector for Stylized FX shaders
// - organize UI using comments in the shader code
// - more flexibility than the material property drawers
// version 2 (dec 2017)
namespace CartoonFX
{
public class MaterialInspector : ShaderGUI
{
//Set by PropertyDrawers to defined if the next properties should be visible
static private Stack<bool> ShowStack = new Stack<bool>();
static public bool ShowNextProperty { get; private set; }
static public void PushShowProperty(bool value)
{
ShowStack.Push(ShowNextProperty);
ShowNextProperty &= value;
}
static public void PopShowProperty()
{
ShowNextProperty = ShowStack.Pop();
}
//--------------------------------------------------------------------------------------------------
const string kGuiCommandPrefix = "//#";
const string kGC_IfKeyword = "IF_KEYWORD";
const string kGC_IfProperty = "IF_PROPERTY";
const string kGC_EndIf = "END_IF";
const string kGC_HelpBox = "HELP_BOX";
const string kGC_Label = "LABEL";
Dictionary<int, List<GUICommand>> guiCommands = new Dictionary<int, List<GUICommand>>();
bool initialized = false;
AssetImporter shaderImporter;
ulong lastTimestamp;
void Initialize(MaterialEditor editor, bool force)
{
if((!initialized || force) && editor != null)
{
initialized = true;
guiCommands.Clear();
//Find the shader and parse the source to find special comments that will organize the GUI
//It's hackish, but at least it allows any character to be used (unlike material property drawers/decorators) and can be used along with property drawers
var materials = new List<Material>();
foreach(var o in editor.targets)
{
var m = o as Material;
if(m != null)
materials.Add(m);
}
if(materials.Count > 0 && materials[0].shader != null)
{
var path = AssetDatabase.GetAssetPath(materials[0].shader);
//get asset importer
shaderImporter = AssetImporter.GetAtPath(path);
if(shaderImporter != null)
{
lastTimestamp = shaderImporter.assetTimeStamp;
}
//remove 'Assets' and replace with OS path
path = Application.dataPath + path.Substring(6);
//convert to cross-platform path
path = path.Replace('/', Path.DirectorySeparatorChar);
//open file for reading
var lines = File.ReadAllLines(path);
bool insideProperties = false;
//regex pattern to find properties, as they need to be counted so that
//special commands can be inserted at the right position when enumerating them
var regex = new Regex(@"[a-zA-Z0-9_]+\s*\([^\)]*\)");
int propertyCount = 0;
bool insideCommentBlock = false;
foreach(var l in lines)
{
var line = l.TrimStart();
if(insideProperties)
{
bool isComment = line.StartsWith("//");
if(line.Contains("/*"))
insideCommentBlock = true;
if(line.Contains("*/"))
insideCommentBlock = false;
//finished properties block?
if(line.StartsWith("}"))
break;
//comment
if(line.StartsWith(kGuiCommandPrefix))
{
string command = line.Substring(kGuiCommandPrefix.Length).TrimStart();
//space
if(string.IsNullOrEmpty(command))
AddGUICommand(propertyCount, new GC_Space());
//separator
else if(command.StartsWith("---"))
AddGUICommand(propertyCount, new GC_Separator());
//separator
else if(command.StartsWith("==="))
AddGUICommand(propertyCount, new GC_SeparatorDouble());
//if keyword
else if(command.StartsWith(kGC_IfKeyword))
{
var expr = command.Substring(command.LastIndexOf(kGC_IfKeyword) + kGC_IfKeyword.Length + 1);
AddGUICommand(propertyCount, new GC_IfKeyword() { expression = expr, materials = materials.ToArray() });
}
//if property
else if(command.StartsWith(kGC_IfProperty))
{
var expr = command.Substring(command.LastIndexOf(kGC_IfProperty) + kGC_IfProperty.Length + 1);
AddGUICommand(propertyCount, new GC_IfProperty() { expression = expr, materials = materials.ToArray() });
}
//end if
else if(command.StartsWith(kGC_EndIf))
{
AddGUICommand(propertyCount, new GC_EndIf());
}
//help box
else if(command.StartsWith(kGC_HelpBox))
{
var messageType = MessageType.Error;
var message = "Invalid format for HELP_BOX:\n" + command;
var cmd = command.Substring(command.LastIndexOf(kGC_HelpBox) + kGC_HelpBox.Length + 1).Split(new string[] { "::" }, System.StringSplitOptions.RemoveEmptyEntries);
if(cmd.Length == 1)
{
message = cmd[0];
messageType = MessageType.None;
}
else if(cmd.Length == 2)
{
try
{
var msgType = (MessageType)System.Enum.Parse(typeof(MessageType), cmd[0], true);
message = cmd[1].Replace(" ", "\n");
messageType = msgType;
}
catch { }
}
AddGUICommand(propertyCount, new GC_HelpBox()
{
message = message,
messageType = messageType
});
}
//label
else if(command.StartsWith(kGC_Label))
{
var label = command.Substring(command.LastIndexOf(kGC_Label) + kGC_Label.Length + 1);
AddGUICommand(propertyCount, new GC_Label() { label = label });
}
//header: plain text after command
else
{
AddGUICommand(propertyCount, new GC_Header() { label = command });
}
}
else
//property
{
if(regex.IsMatch(line) && !insideCommentBlock && !isComment)
propertyCount++;
}
}
//start properties block?
if(line.StartsWith("Properties"))
{
insideProperties = true;
}
}
}
}
}
void AddGUICommand(int propertyIndex, GUICommand command)
{
if(!guiCommands.ContainsKey(propertyIndex))
guiCommands.Add(propertyIndex, new List<GUICommand>());
guiCommands[propertyIndex].Add(command);
}
public override void AssignNewShaderToMaterial(Material material, Shader oldShader, Shader newShader)
{
initialized = false;
base.AssignNewShaderToMaterial(material, oldShader, newShader);
}
public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] properties)
{
//init:
//- read metadata in properties comment to generate ui layout
//- force update if timestamp doesn't match last (= file externally updated)
bool force = (shaderImporter != null && shaderImporter.assetTimeStamp != lastTimestamp);
Initialize(materialEditor, force);
var shader = (materialEditor.target as Material).shader;
materialEditor.SetDefaultGUIWidths();
//show all properties by default
ShowNextProperty = true;
ShowStack.Clear();
for(int i = 0; i < properties.Length; i++)
{
if(guiCommands.ContainsKey(i))
{
for(int j = 0; j < guiCommands[i].Count; j++)
{
guiCommands[i][j].OnGUI();
}
}
//Use custom properties to enable/disable groups based on keywords
if(ShowNextProperty)
{
if((properties[i].propertyFlags & (UnityEngine.Rendering.ShaderPropertyFlags.HideInInspector | UnityEngine.Rendering.ShaderPropertyFlags.PerRendererData)) == UnityEngine.Rendering.ShaderPropertyFlags.None)
{
DisplayProperty(properties[i], materialEditor);
}
}
}
//make sure to show gui commands that are after properties
int index = properties.Length;
if(guiCommands.ContainsKey(index))
{
for(int j = 0; j < guiCommands[index].Count; j++)
{
guiCommands[index][j].OnGUI();
}
}
//Special fields
Styles.MaterialDrawSeparatorDouble();
materialEditor.RenderQueueField();
materialEditor.EnableInstancingField();
}
virtual protected void DisplayProperty(MaterialProperty property, MaterialEditor materialEditor)
{
float propertyHeight = materialEditor.GetPropertyHeight(property, property.displayName);
Rect controlRect = EditorGUILayout.GetControlRect(true, propertyHeight, EditorStyles.layerMaskField, new GUILayoutOption[0]);
materialEditor.ShaderProperty(controlRect, property, property.displayName);
}
}
// Same as Toggle drawer, but doesn't set any keyword
// This will avoid adding unnecessary shader keyword to the project
internal class MaterialToggleNoKeywordDrawer : MaterialPropertyDrawer
{
private static bool IsPropertyTypeSuitable(MaterialProperty prop)
{
return prop.propertyType == UnityEngine.Rendering.ShaderPropertyType.Float || prop.propertyType == UnityEngine.Rendering.ShaderPropertyType.Range;
}
public override float GetPropertyHeight(MaterialProperty prop, string label, MaterialEditor editor)
{
float height;
if (!MaterialToggleNoKeywordDrawer.IsPropertyTypeSuitable(prop))
{
height = 40f;
}
else
{
height = base.GetPropertyHeight(prop, label, editor);
}
return height;
}
public override void OnGUI(Rect position, MaterialProperty prop, GUIContent label, MaterialEditor editor)
{
if (!MaterialToggleNoKeywordDrawer.IsPropertyTypeSuitable(prop))
{
EditorGUI.HelpBox(position, "Toggle used on a non-float property: " + prop.name, MessageType.Warning);
}
else
{
EditorGUI.BeginChangeCheck();
bool flag = Mathf.Abs(prop.floatValue) > 0.001f;
EditorGUI.showMixedValue = prop.hasMixedValue;
flag = EditorGUI.Toggle(position, label, flag);
EditorGUI.showMixedValue = false;
if (EditorGUI.EndChangeCheck())
{
prop.floatValue = ((!flag) ? 0f : 1f);
}
}
}
}
// Same as KeywordEnum drawer, but uses the keyword supplied as is rather than adding a prefix to them
internal class MaterialKeywordEnumNoPrefixDrawer : MaterialPropertyDrawer
{
private readonly GUIContent[] labels;
private readonly string[] keywords;
public MaterialKeywordEnumNoPrefixDrawer(string lbl1, string kw1) : this(new[] { lbl1 }, new[] { kw1 }) { }
public MaterialKeywordEnumNoPrefixDrawer(string lbl1, string kw1, string lbl2, string kw2) : this(new[] { lbl1, lbl2 }, new[] { kw1, kw2 }) { }
public MaterialKeywordEnumNoPrefixDrawer(string lbl1, string kw1, string lbl2, string kw2, string lbl3, string kw3) : this(new[] { lbl1, lbl2, lbl3 }, new[] { kw1, kw2, kw3 }) { }
public MaterialKeywordEnumNoPrefixDrawer(string lbl1, string kw1, string lbl2, string kw2, string lbl3, string kw3, string lbl4, string kw4) : this(new[] { lbl1, lbl2, lbl3, lbl4 }, new[] { kw1, kw2, kw3, kw4 }) { }
public MaterialKeywordEnumNoPrefixDrawer(string lbl1, string kw1, string lbl2, string kw2, string lbl3, string kw3, string lbl4, string kw4, string lbl5, string kw5) : this(new[] { lbl1, lbl2, lbl3, lbl4, lbl5 }, new[] { kw1, kw2, kw3, kw4, kw5 }) { }
public MaterialKeywordEnumNoPrefixDrawer(string lbl1, string kw1, string lbl2, string kw2, string lbl3, string kw3, string lbl4, string kw4, string lbl5, string kw5, string lbl6, string kw6) : this(new[] { lbl1, lbl2, lbl3, lbl4, lbl5, lbl6 }, new[] { kw1, kw2, kw3, kw4, kw5, kw6 }) { }
public MaterialKeywordEnumNoPrefixDrawer(string[] labels, string[] keywords)
{
this.labels= new GUIContent[keywords.Length];
this.keywords = new string[keywords.Length];
for (int i = 0; i < keywords.Length; ++i)
{
this.labels[i] = new GUIContent(labels[i]);
this.keywords[i] = keywords[i];
}
}
static bool IsPropertyTypeSuitable(MaterialProperty prop)
{
return prop.propertyType == UnityEngine.Rendering.ShaderPropertyType.Float || prop.propertyType == UnityEngine.Rendering.ShaderPropertyType.Range;
}
void SetKeyword(MaterialProperty prop, int index)
{
for (int i = 0; i < keywords.Length; ++i)
{
string keyword = GetKeywordName(prop.name, keywords[i]);
foreach (Material material in prop.targets)
{
if (index == i)
material.EnableKeyword(keyword);
else
material.DisableKeyword(keyword);
}
}
}
public override float GetPropertyHeight(MaterialProperty prop, string label, MaterialEditor editor)
{
if (!IsPropertyTypeSuitable(prop))
{
return EditorGUIUtility.singleLineHeight * 2.5f;
}
return base.GetPropertyHeight(prop, label, editor);
}
public override void OnGUI(Rect position, MaterialProperty prop, GUIContent label, MaterialEditor editor)
{
if (!IsPropertyTypeSuitable(prop))
{
EditorGUI.HelpBox(position, "Toggle used on a non-float property: " + prop.name, MessageType.Warning);
return;
}
EditorGUI.BeginChangeCheck();
EditorGUI.showMixedValue = prop.hasMixedValue;
var value = (int)prop.floatValue;
value = EditorGUI.Popup(position, label, value, labels);
EditorGUI.showMixedValue = false;
if (EditorGUI.EndChangeCheck())
{
prop.floatValue = value;
SetKeyword(prop, value);
}
}
public override void Apply(MaterialProperty prop)
{
base.Apply(prop);
if (!IsPropertyTypeSuitable(prop))
return;
if (prop.hasMixedValue)
return;
SetKeyword(prop, (int)prop.floatValue);
}
// Final keyword name: property name + "_" + display name. Uppercased,
// and spaces replaced with underscores.
private static string GetKeywordName(string propName, string name)
{
// Just return the supplied name
return name;
// Original code:
/*
string n = propName + "_" + name;
return n.Replace(' ', '_').ToUpperInvariant();
*/
}
}
//================================================================================================================================================================================================
// GUI Commands System
//
// Workaround to Material Property Drawers limitations:
// - uses shader comments to organize the GUI, and show/hide properties based on conditions
// - can use any character (unlike property drawers)
// - parsed once at material editor initialization
internal class GUICommand
{
public virtual bool Visible() { return true; }
public virtual void OnGUI() { }
}
internal class GC_Separator : GUICommand { public override void OnGUI() { if(MaterialInspector.ShowNextProperty) Styles.MaterialDrawSeparator(); } }
internal class GC_SeparatorDouble : GUICommand { public override void OnGUI() { if(MaterialInspector.ShowNextProperty) Styles.MaterialDrawSeparatorDouble(); } }
internal class GC_Space : GUICommand { public override void OnGUI() { if(MaterialInspector.ShowNextProperty) GUILayout.Space(8); } }
internal class GC_HelpBox : GUICommand
{
public string message { get; set; }
public MessageType messageType { get; set; }
public override void OnGUI()
{
if(MaterialInspector.ShowNextProperty)
Styles.HelpBoxRichText(message, messageType);
}
}
internal class GC_Header : GUICommand
{
public string label { get; set; }
GUIContent guiContent;
public override void OnGUI()
{
if(guiContent == null)
guiContent = new GUIContent(label);
if(MaterialInspector.ShowNextProperty)
Styles.MaterialDrawHeader(guiContent);
}
}
internal class GC_Label : GUICommand
{
public string label { get; set; }
GUIContent guiContent;
public override void OnGUI()
{
if(guiContent == null)
guiContent = new GUIContent(label);
if(MaterialInspector.ShowNextProperty)
GUILayout.Label(guiContent);
}
}
internal class GC_IfKeyword : GUICommand
{
public string expression { get; set; }
public Material[] materials { get; set; }
public override void OnGUI()
{
bool show = ExpressionParser.EvaluateExpression(expression, (string s) =>
{
foreach(var m in materials)
{
if(m.IsKeywordEnabled(s))
return true;
}
return false;
});
MaterialInspector.PushShowProperty(show);
}
}
internal class GC_EndIf : GUICommand { public override void OnGUI() { MaterialInspector.PopShowProperty(); } }
internal class GC_IfProperty : GUICommand
{
string _expression;
public string expression
{
get { return _expression; }
set { _expression = value.Replace("!=", "<>"); }
}
public Material[] materials { get; set; }
public override void OnGUI()
{
bool show = ExpressionParser.EvaluateExpression(expression, EvaluatePropertyExpression);
MaterialInspector.PushShowProperty(show);
}
bool EvaluatePropertyExpression(string expr)
{
//expression is expected to be in the form of: property operator value
var reader = new StringReader(expr);
string property = "";
string op = "";
float value = 0f;
int overflow = 0;
while(true)
{
char c = (char)reader.Read();
//operator
if(c == '=' || c == '>' || c == '<' || c == '!')
{
op += c;
//second operator character, if any
char c2 = (char)reader.Peek();
if(c2 == '=' || c2 == '>')
{
reader.Read();
op += c2;
}
//end of string is the value
var end = reader.ReadToEnd();
if(!float.TryParse(end, out value))
{
Debug.LogError("Couldn't parse float from property expression:\n" + end);
return false;
}
break;
}
//property name
property += c;
overflow++;
if(overflow >= 9999)
{
Debug.LogError("Expression parsing overflow!\n");
return false;
}
}
//evaluate property
bool conditionMet = false;
foreach(var m in materials)
{
float propValue = 0f;
if(property.Contains(".x") || property.Contains(".y") || property.Contains(".z") || property.Contains(".w"))
{
string[] split = property.Split('.');
string component = split[1];
switch(component)
{
case "x": propValue = m.GetVector(split[0]).x; break;
case "y": propValue = m.GetVector(split[0]).y; break;
case "z": propValue = m.GetVector(split[0]).z; break;
case "w": propValue = m.GetVector(split[0]).w; break;
default: Debug.LogError("Invalid component for vector property: '" + property + "'"); break;
}
}
else
propValue = m.GetFloat(property);
switch(op)
{
case ">=": conditionMet = propValue >= value; break;
case "<=": conditionMet = propValue <= value; break;
case ">": conditionMet = propValue > value; break;
case "<": conditionMet = propValue < value; break;
case "<>": conditionMet = propValue != value; break; //not equal, "!=" is replaced by "<>" to prevent bug with leading ! ("not" operator)
case "==": conditionMet = propValue == value; break;
default:
Debug.LogError("Invalid property expression:\n" + expr);
break;
}
if(conditionMet)
return true;
}
return false;
}
}
}

View File

@@ -0,0 +1,19 @@
fileFormatVersion: 2
guid: 4fb4c15e772a1cc4baecc7a958bf9cc7
timeCreated: 1486392341
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 109565
packageName: Cartoon FX Remaster Free
packageVersion: R 1.5.0
assetPath: Assets/JMO Assets/Cartoon FX Remaster/CFXR Assets/Editor/CFXR_MaterialInspector.cs
uploadId: 756876

View File

@@ -0,0 +1,423 @@
// #define SHOW_EXPORT_BUTTON
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Reflection;
using UnityEditor;
using UnityEditor.Rendering;
using UnityEngine;
#if UNITY_2020_2_OR_NEWER
using UnityEditor.AssetImporters;
#else
using UnityEditor.Experimental.AssetImporters;
#endif
using UnityEngine.Rendering;
namespace CartoonFX
{
namespace CustomShaderImporter
{
static class Utils
{
public static bool IsUsingURP()
{
#if UNITY_2019_3_OR_NEWER
var renderPipeline = GraphicsSettings.currentRenderPipeline;
#else
var renderPipeline = GraphicsSettings.renderPipelineAsset;
#endif
return renderPipeline != null && renderPipeline.GetType().Name.Contains("Universal");
}
}
[ScriptedImporter(0, FILE_EXTENSION)]
public class CFXR_ShaderImporter : ScriptedImporter
{
public enum RenderPipeline
{
Auto,
ForceBuiltInRenderPipeline,
ForceUniversalRenderPipeline
}
public const string FILE_EXTENSION = "cfxrshader";
[Tooltip("In case of errors when building the project or with addressables, you can try forcing a specific render pipeline")]
public RenderPipeline renderPipelineDetection = RenderPipeline.Auto;
public string detectedRenderPipeline = "Built-In Render Pipeline";
public int strippedLinesCount = 0;
public string shaderSourceCode;
public string shaderName;
public string[] shaderErrors;
public ulong variantCount;
public ulong variantCountUsed;
enum ComparisonOperator
{
Equal,
Greater,
GreaterOrEqual,
Less,
LessOrEqual
}
#if UNITY_2022_2_OR_NEWER
const int URP_VERSION = 14;
#elif UNITY_2021_2_OR_NEWER
const int URP_VERSION = 12;
#elif UNITY_2021_1_OR_NEWER
const int URP_VERSION = 11;
#elif UNITY_2020_3_OR_NEWER
const int URP_VERSION = 10;
#else
const int URP_VERSION = 7;
#endif
static ComparisonOperator ParseComparisonOperator(string symbols)
{
switch (symbols)
{
case "==": return ComparisonOperator.Equal;
case "<=": return ComparisonOperator.LessOrEqual;
case "<": return ComparisonOperator.Less;
case ">": return ComparisonOperator.Greater;
case ">=": return ComparisonOperator.GreaterOrEqual;
default: throw new Exception("Invalid comparison operator: " + symbols);
}
}
static bool CompareWithOperator(int value1, int value2, ComparisonOperator comparisonOperator)
{
switch (comparisonOperator)
{
case ComparisonOperator.Equal: return value1 == value2;
case ComparisonOperator.Greater: return value1 > value2;
case ComparisonOperator.GreaterOrEqual: return value1 >= value2;
case ComparisonOperator.Less: return value1 < value2;
case ComparisonOperator.LessOrEqual: return value1 <= value2;
default: throw new Exception("Invalid comparison operator value: " + comparisonOperator);
}
}
bool StartsOrEndWithSpecialTag(string line)
{
bool startsWithTag = (line.Length > 4 && line[0] == '/' && line[1] == '*' && line[2] == '*' && line[3] == '*');
if (startsWithTag) return true;
int l = line.Length-1;
bool endsWithTag = (line.Length > 4 && line[l] == '/' && line[l-1] == '*' && line[l-2] == '*' && line[l-3] == '*');
return endsWithTag;
}
public override void OnImportAsset(AssetImportContext context)
{
bool isUsingURP;
switch (renderPipelineDetection)
{
default:
case RenderPipeline.Auto:
{
isUsingURP = Utils.IsUsingURP();
detectedRenderPipeline = isUsingURP ? "Universal Render Pipeline" : "Built-In Render Pipeline";
break;
}
case RenderPipeline.ForceBuiltInRenderPipeline:
{
detectedRenderPipeline = "Built-In Render Pipeline";
isUsingURP = false;
break;
}
case RenderPipeline.ForceUniversalRenderPipeline:
{
detectedRenderPipeline = "Universal Render Pipeline";
isUsingURP = true;
break;
}
}
StringWriter shaderSource = new StringWriter();
string[] sourceLines = File.ReadAllLines(context.assetPath);
Stack<bool> excludeCurrentLines = new Stack<bool>();
strippedLinesCount = 0;
for (int i = 0; i < sourceLines.Length; i++)
{
bool excludeThisLine = excludeCurrentLines.Count > 0 && excludeCurrentLines.Peek();
string line = sourceLines[i];
if (StartsOrEndWithSpecialTag(line))
{
if (line.StartsWith("/*** BIRP ***/"))
{
excludeCurrentLines.Push(excludeThisLine || isUsingURP);
}
else if (line.StartsWith("/*** URP ***/"))
{
excludeCurrentLines.Push(excludeThisLine || !isUsingURP);
}
else if (line.StartsWith("/*** URP_VERSION "))
{
string subline = line.Substring("/*** URP_VERSION ".Length);
int spaceIndex = subline.IndexOf(' ');
string version = subline.Substring(spaceIndex, subline.LastIndexOf(' ') - spaceIndex);
string op = subline.Substring(0, spaceIndex);
var compOp = ParseComparisonOperator(op);
int compVersion = int.Parse(version);
bool isCorrectURP = CompareWithOperator(URP_VERSION, compVersion, compOp);
excludeCurrentLines.Push(excludeThisLine || !isCorrectURP);
}
else if (excludeThisLine && line.StartsWith("/*** END"))
{
excludeCurrentLines.Pop();
}
else if (!excludeThisLine && line.StartsWith("/*** #define URP_VERSION ***/"))
{
shaderSource.WriteLine("\t\t\t#define URP_VERSION " + URP_VERSION);
}
}
else
{
if (excludeThisLine)
{
strippedLinesCount++;
continue;
}
shaderSource.WriteLine(line);
}
}
// Get source code and extract name
shaderSourceCode = shaderSource.ToString();
int idx = shaderSourceCode.IndexOf("Shader \"", StringComparison.InvariantCulture) + 8;
int idx2 = shaderSourceCode.IndexOf('"', idx);
shaderName = shaderSourceCode.Substring(idx, idx2 - idx);
shaderErrors = null;
Shader shader = ShaderUtil.CreateShaderAsset(context, shaderSourceCode, true);
if (ShaderUtil.ShaderHasError(shader))
{
string[] shaderSourceLines = shaderSourceCode.Split(new [] {'\n'}, StringSplitOptions.None);
var errors = ShaderUtil.GetShaderMessages(shader);
shaderErrors = Array.ConvertAll(errors, err => $"{err.message} (line {err.line})");
foreach (ShaderMessage error in errors)
{
string message = error.line <= 0 ?
string.Format("Shader Error in '{0}' (in file '{2}')\nError: {1}\n", shaderName, error.message, error.file) :
string.Format("Shader Error in '{0}' (line {2} in file '{3}')\nError: {1}\nLine: {4}\n", shaderName, error.message, error.line, error.file, shaderSourceLines[error.line-1]);
if (error.severity == ShaderCompilerMessageSeverity.Warning)
{
Debug.LogWarning(message);
}
else
{
Debug.LogError(message);
}
}
}
else
{
ShaderUtil.ClearShaderMessages(shader);
}
context.AddObjectToAsset("MainAsset", shader);
context.SetMainObject(shader);
// Try to count variant using reflection:
// internal static extern ulong GetVariantCount(Shader s, bool usedBySceneOnly);
variantCount = 0;
variantCountUsed = 0;
MethodInfo getVariantCountReflection = typeof(ShaderUtil).GetMethod("GetVariantCount", BindingFlags.Static | BindingFlags.NonPublic);
if (getVariantCountReflection != null)
{
try
{
object result = getVariantCountReflection.Invoke(null, new object[] {shader, false});
variantCount = (ulong)result;
result = getVariantCountReflection.Invoke(null, new object[] {shader, true});
variantCountUsed = (ulong)result;
}
catch
{
// ignored
}
}
}
}
namespace Inspector
{
[CustomEditor(typeof(CFXR_ShaderImporter)), CanEditMultipleObjects]
public class TCP2ShaderImporter_Editor : Editor
{
CFXR_ShaderImporter Importer => (CFXR_ShaderImporter) this.target;
// From: UnityEditor.ShaderInspectorPlatformsPopup
static string FormatCount(ulong count)
{
bool flag = count > 1000000000uL;
string result;
if (flag)
{
result = (count / 1000000000.0).ToString("f2", CultureInfo.InvariantCulture.NumberFormat) + "B";
}
else
{
bool flag2 = count > 1000000uL;
if (flag2)
{
result = (count / 1000000.0).ToString("f2", CultureInfo.InvariantCulture.NumberFormat) + "M";
}
else
{
bool flag3 = count > 1000uL;
if (flag3)
{
result = (count / 1000.0).ToString("f2", CultureInfo.InvariantCulture.NumberFormat) + "k";
}
else
{
result = count.ToString();
}
}
}
return result;
}
static GUIStyle _HelpBoxRichTextStyle;
static GUIStyle HelpBoxRichTextStyle
{
get
{
if (_HelpBoxRichTextStyle == null)
{
_HelpBoxRichTextStyle = new GUIStyle("HelpBox");
_HelpBoxRichTextStyle.richText = true;
_HelpBoxRichTextStyle.margin = new RectOffset(4, 4, 0, 0);
_HelpBoxRichTextStyle.padding = new RectOffset(4, 4, 4, 4);
}
return _HelpBoxRichTextStyle;
}
}
public override void OnInspectorGUI()
{
bool multipleValues = serializedObject.isEditingMultipleObjects;
CFXR_ShaderImporter.RenderPipeline detection = ((CFXR_ShaderImporter)target).renderPipelineDetection;
bool isUsingURP = Utils.IsUsingURP();
serializedObject.Update();
GUILayout.Label(Importer.shaderName);
string variantsText = "";
if (Importer.variantCount > 0 && Importer.variantCountUsed > 0)
{
string variantsCount = multipleValues ? "-" : FormatCount(Importer.variantCount);
string variantsCountUsed = multipleValues ? "-" : FormatCount(Importer.variantCountUsed);
variantsText = $"\nVariants (currently used): <b>{variantsCountUsed}</b>\nVariants (including unused): <b>{variantsCount}</b>";
}
string strippedLinesCount = multipleValues ? "-" : Importer.strippedLinesCount.ToString();
string renderPipeline = Importer.detectedRenderPipeline;
if (targets is { Length: > 1 })
{
foreach (CFXR_ShaderImporter importer in targets)
{
if (importer.detectedRenderPipeline != renderPipeline)
{
renderPipeline = "-";
break;
}
}
}
GUILayout.Label($"{(detection == CFXR_ShaderImporter.RenderPipeline.Auto ? "Detected" : "Forced")} render pipeline: <b>{renderPipeline}</b>\nStripped lines: <b>{strippedLinesCount}</b>{variantsText}", HelpBoxRichTextStyle);
if (Importer.shaderErrors != null && Importer.shaderErrors.Length > 0)
{
GUILayout.Space(4);
var color = GUI.color;
GUI.color = new Color32(0xFF, 0x80, 0x80, 0xFF);
GUILayout.Label($"<b>Errors:</b>\n{string.Join("\n", Importer.shaderErrors)}", HelpBoxRichTextStyle);
GUI.color = color;
}
bool shouldReimportShader = false;
bool compiledForURP = Importer.detectedRenderPipeline.Contains("Universal");
if (detection == CFXR_ShaderImporter.RenderPipeline.Auto
&& ((isUsingURP && !compiledForURP) || (!isUsingURP && compiledForURP)))
{
GUILayout.Space(4);
Color guiColor = GUI.color;
GUI.color *= Color.yellow;
EditorGUILayout.HelpBox("The detected render pipeline doesn't match the pipeline this shader was compiled for!\nPlease reimport the shaders for them to work in the current render pipeline.", MessageType.Warning);
if (GUILayout.Button("Reimport Shader"))
{
shouldReimportShader = true;
}
GUI.color = guiColor;
}
GUILayout.Space(4);
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(serializedObject.FindProperty(nameof(CFXR_ShaderImporter.renderPipelineDetection)));
if (EditorGUI.EndChangeCheck())
{
shouldReimportShader = true;
}
if (GUILayout.Button("View Source", GUILayout.ExpandWidth(false)))
{
string path = Application.temporaryCachePath + "/" + Importer.shaderName.Replace("/", "-") + "_Source.shader";
if (File.Exists(path))
{
File.SetAttributes(path, FileAttributes.Normal);
}
File.WriteAllText(path, Importer.shaderSourceCode);
File.SetAttributes(path, FileAttributes.ReadOnly);
UnityEditorInternal.InternalEditorUtility.OpenFileAtLineExternal(path, 0);
}
#if SHOW_EXPORT_BUTTON
GUILayout.Space(8);
EditorGUI.BeginDisabledGroup(string.IsNullOrEmpty(importer.shaderSourceCode));
{
if (GUILayout.Button("Export .shader file", GUILayout.ExpandWidth(false)))
{
string savePath = EditorUtility.SaveFilePanel("Export CFXR shader", Application.dataPath, "CFXR Shader","shader");
if (!string.IsNullOrEmpty(savePath))
{
File.WriteAllText(savePath, importer.shaderSourceCode);
}
}
}
EditorGUI.EndDisabledGroup();
#endif
serializedObject.ApplyModifiedProperties();
if (shouldReimportShader)
{
ReimportShader();
}
}
void ReimportShader()
{
foreach (UnityEngine.Object t in targets)
{
string path = AssetDatabase.GetAssetPath(t);
AssetDatabase.ImportAsset(path, ImportAssetOptions.ForceSynchronousImport);
}
}
}
}
}
}

View File

@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: fe56ec25963759b49955809beeb4324b
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 109565
packageName: Cartoon FX Remaster Free
packageVersion: R 1.5.0
assetPath: Assets/JMO Assets/Cartoon FX Remaster/CFXR Assets/Editor/CFXR_ShaderImporter.cs
uploadId: 756876

View File

@@ -0,0 +1,38 @@
using System;
using UnityEditor;
using UnityEngine;
namespace CartoonFX
{
namespace CustomShaderImporter
{
public class CFXR_ShaderPostProcessor : AssetPostprocessor
{
static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
{
CleanCFXRShaders(importedAssets);
}
static void CleanCFXRShaders(string[] paths)
{
foreach (var assetPath in paths)
{
if (!assetPath.EndsWith(CFXR_ShaderImporter.FILE_EXTENSION, StringComparison.InvariantCultureIgnoreCase))
{
continue;
}
var shader = AssetDatabase.LoadMainAssetAtPath(assetPath) as Shader;
if (shader != null)
{
ShaderUtil.ClearShaderMessages(shader);
if (!ShaderUtil.ShaderHasError(shader))
{
ShaderUtil.RegisterShader(shader);
}
}
}
}
}
}
}

View File

@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 29d46695388f9a84d9ae71b5140727a3
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 109565
packageName: Cartoon FX Remaster Free
packageVersion: R 1.5.0
assetPath: Assets/JMO Assets/Cartoon FX Remaster/CFXR Assets/Editor/CFXR_ShaderPostProcessor.cs
uploadId: 756876

View File

@@ -0,0 +1,362 @@
//--------------------------------------------------------------------------------------------------------------------------------
// Cartoon FX
// (c) 2012-2025 Jean Moreno
//--------------------------------------------------------------------------------------------------------------------------------
using UnityEngine;
using UnityEditor;
// GUI Styles and UI methods
namespace CartoonFX
{
public static class Styles
{
//================================================================================================================================
// GUI Styles
//================================================================================================================================
//================================================================================================================================
// (x) close button
static GUIStyle _closeCrossButton;
public static GUIStyle CloseCrossButton
{
get
{
if(_closeCrossButton == null)
{
//Try to load GUISkin according to its GUID
//Assumes that its .meta file should always stick with it!
string guiSkinPath = AssetDatabase.GUIDToAssetPath("02d396fa782e5d7438e231ea9f8be23c");
var gs = AssetDatabase.LoadAssetAtPath<GUISkin>(guiSkinPath);
if(gs != null)
{
_closeCrossButton = System.Array.Find<GUIStyle>(gs.customStyles, x => x.name == "CloseCrossButton");
}
//Else fall back to minibutton
if(_closeCrossButton == null)
_closeCrossButton = EditorStyles.miniButton;
}
return _closeCrossButton;
}
}
//================================================================================================================================
// Shuriken Toggle with label alignment fix
static GUIStyle _shurikenToggle;
public static GUIStyle ShurikenToggle
{
get
{
if(_shurikenToggle == null)
{
_shurikenToggle = new GUIStyle("ShurikenToggle");
_shurikenToggle.fontSize = 9;
_shurikenToggle.contentOffset = new Vector2(16, -1);
if(EditorGUIUtility.isProSkin)
{
var textColor = new Color(.8f, .8f, .8f);
_shurikenToggle.normal.textColor = textColor;
_shurikenToggle.active.textColor = textColor;
_shurikenToggle.focused.textColor = textColor;
_shurikenToggle.hover.textColor = textColor;
_shurikenToggle.onNormal.textColor = textColor;
_shurikenToggle.onActive.textColor = textColor;
_shurikenToggle.onFocused.textColor = textColor;
_shurikenToggle.onHover.textColor = textColor;
}
}
return _shurikenToggle;
}
}
//================================================================================================================================
// Bold mini-label (the one from EditorStyles isn't actually "mini")
static GUIStyle _miniBoldLabel;
public static GUIStyle MiniBoldLabel
{
get
{
if(_miniBoldLabel == null)
{
_miniBoldLabel = new GUIStyle(EditorStyles.boldLabel);
_miniBoldLabel.fontSize = 10;
_miniBoldLabel.margin = new RectOffset(0, 0, 0, 0);
}
return _miniBoldLabel;
}
}
//================================================================================================================================
// Bold mini-foldout
static GUIStyle _miniBoldFoldout;
public static GUIStyle MiniBoldFoldout
{
get
{
if(_miniBoldFoldout == null)
{
_miniBoldFoldout = new GUIStyle(EditorStyles.foldout);
_miniBoldFoldout.fontSize = 10;
_miniBoldFoldout.fontStyle = FontStyle.Bold;
_miniBoldFoldout.margin = new RectOffset(0, 0, 0, 0);
}
return _miniBoldFoldout;
}
}
//================================================================================================================================
// Gray right-aligned label for Orderable List (Material Animator)
static GUIStyle _PropertyTypeLabel;
public static GUIStyle PropertyTypeLabel
{
get
{
if(_PropertyTypeLabel == null)
{
_PropertyTypeLabel = new GUIStyle(EditorStyles.label);
_PropertyTypeLabel.alignment = TextAnchor.MiddleRight;
_PropertyTypeLabel.normal.textColor = Color.gray;
_PropertyTypeLabel.fontSize = 9;
}
return _PropertyTypeLabel;
}
}
// Dark Gray right-aligned label for Orderable List (Material Animator)
static GUIStyle _PropertyTypeLabelFocused;
public static GUIStyle PropertyTypeLabelFocused
{
get
{
if(_PropertyTypeLabelFocused == null)
{
_PropertyTypeLabelFocused = new GUIStyle(EditorStyles.label);
_PropertyTypeLabelFocused.alignment = TextAnchor.MiddleRight;
_PropertyTypeLabelFocused.normal.textColor = new Color(.2f, .2f, .2f);
_PropertyTypeLabelFocused.fontSize = 9;
}
return _PropertyTypeLabelFocused;
}
}
//================================================================================================================================
// Rounded Box
static GUIStyle _roundedBox;
public static GUIStyle RoundedBox
{
get
{
if(_roundedBox == null)
{
_roundedBox = new GUIStyle(EditorStyles.helpBox);
}
return _roundedBox;
}
}
//================================================================================================================================
// Center White Label ("Editing Spline" label in Scene View)
static GUIStyle _CenteredWhiteLabel;
public static GUIStyle CenteredWhiteLabel
{
get
{
if(_CenteredWhiteLabel == null)
{
_CenteredWhiteLabel = new GUIStyle(EditorStyles.centeredGreyMiniLabel);
_CenteredWhiteLabel.fontSize = 20;
_CenteredWhiteLabel.normal.textColor = Color.white;
}
return _CenteredWhiteLabel;
}
}
//================================================================================================================================
// Used to draw lines for separators
static public GUIStyle _LineStyle;
static public GUIStyle LineStyle
{
get
{
if(_LineStyle == null)
{
_LineStyle = new GUIStyle();
_LineStyle.normal.background = EditorGUIUtility.whiteTexture;
_LineStyle.stretchWidth = true;
}
return _LineStyle;
}
}
//================================================================================================================================
// HelpBox with rich text formatting support
static GUIStyle _HelpBoxRichTextStyle;
static public GUIStyle HelpBoxRichTextStyle
{
get
{
if(_HelpBoxRichTextStyle == null)
{
_HelpBoxRichTextStyle = new GUIStyle("HelpBox");
_HelpBoxRichTextStyle.richText = true;
}
return _HelpBoxRichTextStyle;
}
}
//================================================================================================================================
// Material Blue Header
static public GUIStyle _MaterialHeaderStyle;
static public GUIStyle MaterialHeaderStyle
{
get
{
if(_MaterialHeaderStyle == null)
{
_MaterialHeaderStyle = new GUIStyle(EditorStyles.label);
_MaterialHeaderStyle.fontStyle = FontStyle.Bold;
_MaterialHeaderStyle.fontSize = 11;
_MaterialHeaderStyle.padding.top = 0;
_MaterialHeaderStyle.padding.bottom = 0;
_MaterialHeaderStyle.normal.textColor = EditorGUIUtility.isProSkin ? new Color32(75, 128, 255, 255) : new Color32(0, 50, 230, 255);
_MaterialHeaderStyle.stretchWidth = true;
}
return _MaterialHeaderStyle;
}
}
//================================================================================================================================
// Material Header emboss effect
static public GUIStyle _MaterialHeaderStyleHighlight;
static public GUIStyle MaterialHeaderStyleHighlight
{
get
{
if(_MaterialHeaderStyleHighlight == null)
{
_MaterialHeaderStyleHighlight = new GUIStyle(MaterialHeaderStyle);
_MaterialHeaderStyleHighlight.contentOffset = new Vector2(1, 1);
_MaterialHeaderStyleHighlight.normal.textColor = EditorGUIUtility.isProSkin ? new Color32(255, 255, 255, 16) : new Color32(255, 255, 255, 32);
}
return _MaterialHeaderStyleHighlight;
}
}
//================================================================================================================================
// Filled rectangle
static private GUIStyle _WhiteRectangleStyle;
static public void DrawRectangle(Rect position, Color color)
{
var col = GUI.color;
GUI.color *= color;
DrawRectangle(position);
GUI.color = col;
}
static public void DrawRectangle(Rect position)
{
if(_WhiteRectangleStyle == null)
{
_WhiteRectangleStyle = new GUIStyle();
_WhiteRectangleStyle.normal.background = EditorGUIUtility.whiteTexture;
}
if(Event.current != null && Event.current.type == EventType.Repaint)
{
_WhiteRectangleStyle.Draw(position, false, false, false, false);
}
}
//================================================================================================================================
// Methods
//================================================================================================================================
static public void DrawLine(float height = 2f)
{
DrawLine(Color.black, height);
}
static public void DrawLine(Color color, float height = 1f)
{
Rect position = GUILayoutUtility.GetRect(0f, float.MaxValue, height, height, LineStyle);
DrawLine(position, color);
}
static public void DrawLine(Rect position, Color color)
{
if(Event.current.type == EventType.Repaint)
{
Color orgColor = GUI.color;
GUI.color = orgColor * color;
LineStyle.Draw(position, false, false, false, false);
GUI.color = orgColor;
}
}
static public void MaterialDrawHeader(GUIContent guiContent)
{
var rect = GUILayoutUtility.GetRect(guiContent, MaterialHeaderStyle);
GUI.Label(rect, guiContent, MaterialHeaderStyleHighlight);
GUI.Label(rect, guiContent, MaterialHeaderStyle);
}
static public void MaterialDrawSeparator()
{
GUILayout.Space(4);
if(EditorGUIUtility.isProSkin)
DrawLine(new Color(.3f, .3f, .3f, 1f), 1);
else
DrawLine(new Color(.6f, .6f, .6f, 1f), 1);
GUILayout.Space(4);
}
static public void MaterialDrawSeparatorDouble()
{
GUILayout.Space(6);
if(EditorGUIUtility.isProSkin)
{
DrawLine(new Color(.1f, .1f, .1f, 1f), 1);
DrawLine(new Color(.4f, .4f, .4f, 1f), 1);
}
else
{
DrawLine(new Color(.3f, .3f, .3f, 1f), 1);
DrawLine(new Color(.9f, .9f, .9f, 1f), 1);
}
GUILayout.Space(6);
}
//built-in console icons, also used in help box
static Texture2D warnIcon;
static Texture2D infoIcon;
static Texture2D errorIcon;
static public void HelpBoxRichText(Rect position, string message, MessageType msgType)
{
Texture2D icon = null;
switch(msgType)
{
case MessageType.Warning: icon = warnIcon ?? (warnIcon = EditorGUIUtility.Load("console.warnicon") as Texture2D); break;
case MessageType.Info: icon = infoIcon ?? (infoIcon = EditorGUIUtility.Load("console.infoicon") as Texture2D); break;
case MessageType.Error: icon = errorIcon ?? (errorIcon = EditorGUIUtility.Load("console.erroricon") as Texture2D); break;
}
EditorGUI.LabelField(position, GUIContent.none, new GUIContent(message, icon), HelpBoxRichTextStyle);
}
static public void HelpBoxRichText(string message, MessageType msgType)
{
Texture2D icon = null;
switch(msgType)
{
case MessageType.Warning: icon = warnIcon ?? (warnIcon = EditorGUIUtility.Load("console.warnicon") as Texture2D); break;
case MessageType.Info: icon = infoIcon ?? (infoIcon = EditorGUIUtility.Load("console.infoicon") as Texture2D); break;
case MessageType.Error: icon = errorIcon ?? (errorIcon = EditorGUIUtility.Load("console.erroricon") as Texture2D); break;
}
EditorGUILayout.LabelField(GUIContent.none, new GUIContent(message, icon), HelpBoxRichTextStyle);
}
}
}

View File

@@ -0,0 +1,19 @@
fileFormatVersion: 2
guid: 26306333afc273640814fd7a7b3968e0
timeCreated: 1501149213
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 109565
packageName: Cartoon FX Remaster Free
packageVersion: R 1.5.0
assetPath: Assets/JMO Assets/Cartoon FX Remaster/CFXR Assets/Editor/CFXR_Styles.cs
uploadId: 756876

View File

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

View File

@@ -0,0 +1,113 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: cfxr aura rays hdr ab nosp
m_Shader: {fileID: -6465566751694194690, guid: 1a29b4d27eb8b04479ef89c00dea533d,
type: 3}
m_ValidKeywords:
- _ALPHABLEND_ON
- _CFXR_HDR_BOOST
- _CFXR_SINGLE_CHANNEL
m_InvalidKeywords:
- _
- _CFXR_DITHERED_SHADOWS_OFF
- _CFXR_OVERLAYBLEND_RGBA
- _CFXR_OVERLAYTEX_OFF
m_LightmapFlags: 0
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DissolveTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DistortTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DitherCustom:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 2800000, guid: 4ece64fbaa1a3d14091abf505199104e, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OverlayTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SecondColorTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _BacklightTransmittance: 1
- _BlendingType: 0
- _BumpScale: 1
- _CFXR_DITHERED_SHADOWS: 0
- _CFXR_OVERLAYBLEND: 0
- _CFXR_OVERLAYTEX: 0
- _Cutoff: 0.1
- _DirLightScreenAtten: 1
- _DirectLightingRamp: 1
- _DissolveSmooth: 0.1
- _Distort: 0.1
- _DoubleDissolve: 0
- _DstBlend: 10
- _EdgeFadePow: 1
- _FadeAlongU: 0
- _HdrBoost: 1
- _HdrMultiply: 2
- _IndirectLightingMix: 0.5
- _InvertDissolveTex: 0
- _LightingWorldPosStrength: 0.2
- _OVERLAYBLEND: 0
- _OVERLAYTEX: 0
- _SecondColorSmooth: 0.2
- _ShadowStrength: 1
- _SingleChannel: 1
- _SoftParticlesFadeDistanceFar: 1
- _SoftParticlesFadeDistanceNear: 0
- _SrcBlend: 5
- _UVDistortionAdd: 0
- _UseAlphaClip: 0
- _UseBackLighting: 0
- _UseDissolve: 0
- _UseDissolveOffsetUV: 0
- _UseEF: 0
- _UseEmission: 0
- _UseFB: 0
- _UseFontColor: 0
- _UseLighting: 0
- _UseLightingWorldPosOffset: 0
- _UseNormalMap: 0
- _UseSP: 0
- _UseSecondColor: 0
- _UseUV2Distortion: 0
- _UseUVDistortion: 0
- _ZWrite: 0
m_Colors:
- _Color: {r: 4.237095, g: 4.237095, b: 4.237095, a: 1}
- _DissolveScroll: {r: 0, g: 0, b: 0, a: 0}
- _DistortScrolling: {r: 0, g: 0, b: 1, a: 1}
- _OverlayTex_Scroll: {r: 0.1, g: 0.1, b: 1, a: 1}
- _ShadowColor: {r: 0, g: 0, b: 0, a: 1}
- _SoftParticlesFadeDistance: {r: 0, g: 1, b: 0, a: 0}
m_BuildTextureStacks: []

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: 59b66e1956031654985c136e6927a7d8
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 109565
packageName: Cartoon FX Remaster Free
packageVersion: R 1.5.0
assetPath: Assets/JMO Assets/Cartoon FX Remaster/CFXR Assets/Graphics/cfxr aura
rays hdr ab nosp.mat
uploadId: 756876

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

View File

@@ -0,0 +1,129 @@
fileFormatVersion: 2
guid: 4ece64fbaa1a3d14091abf505199104e
TextureImporter:
fileIDToRecycleName: {}
externalObjects: {}
serializedVersion: 9
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 2
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 10
textureShape: 1
singleChannelComponent: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- serializedVersion: 2
buildTarget: DefaultTexturePlatform
maxTextureSize: 256
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: Standalone
maxTextureSize: 256
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: Android
maxTextureSize: 256
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: WebGL
maxTextureSize: 64
resizeAlgorithm: 0
textureFormat: 63
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
androidETC2FallbackOverride: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
vertices: []
indices:
edges: []
weights: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 109565
packageName: Cartoon FX Remaster Free
packageVersion: R 1.5.0
assetPath: Assets/JMO Assets/Cartoon FX Remaster/CFXR Assets/Graphics/cfxr aura
rays.png
uploadId: 756876

View File

@@ -0,0 +1,113 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: cfxr aura runic hdr ab nosp
m_Shader: {fileID: -6465566751694194690, guid: 1a29b4d27eb8b04479ef89c00dea533d,
type: 3}
m_ValidKeywords:
- _ALPHABLEND_ON
- _CFXR_HDR_BOOST
- _CFXR_SINGLE_CHANNEL
m_InvalidKeywords:
- _
- _CFXR_DITHERED_SHADOWS_OFF
- _CFXR_OVERLAYBLEND_RGBA
- _CFXR_OVERLAYTEX_OFF
m_LightmapFlags: 0
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DissolveTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DistortTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DitherCustom:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 2800000, guid: ccb58def4933d4e46b7a1fc023bf6259, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OverlayTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SecondColorTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _BacklightTransmittance: 1
- _BlendingType: 0
- _BumpScale: 1
- _CFXR_DITHERED_SHADOWS: 0
- _CFXR_OVERLAYBLEND: 0
- _CFXR_OVERLAYTEX: 0
- _Cutoff: 0.1
- _DirLightScreenAtten: 1
- _DirectLightingRamp: 1
- _DissolveSmooth: 0.1
- _Distort: 0.1
- _DoubleDissolve: 0
- _DstBlend: 10
- _EdgeFadePow: 1
- _FadeAlongU: 0
- _HdrBoost: 1
- _HdrMultiply: 2
- _IndirectLightingMix: 0.5
- _InvertDissolveTex: 0
- _LightingWorldPosStrength: 0.2
- _OVERLAYBLEND: 0
- _OVERLAYTEX: 0
- _SecondColorSmooth: 0.2
- _ShadowStrength: 1
- _SingleChannel: 1
- _SoftParticlesFadeDistanceFar: 1
- _SoftParticlesFadeDistanceNear: 0
- _SrcBlend: 5
- _UVDistortionAdd: 0
- _UseAlphaClip: 0
- _UseBackLighting: 0
- _UseDissolve: 0
- _UseDissolveOffsetUV: 0
- _UseEF: 0
- _UseEmission: 0
- _UseFB: 0
- _UseFontColor: 0
- _UseLighting: 0
- _UseLightingWorldPosOffset: 0
- _UseNormalMap: 0
- _UseSP: 0
- _UseSecondColor: 0
- _UseUV2Distortion: 0
- _UseUVDistortion: 0
- _ZWrite: 0
m_Colors:
- _Color: {r: 4.237095, g: 4.237095, b: 4.237095, a: 1}
- _DissolveScroll: {r: 0, g: 0, b: 0, a: 0}
- _DistortScrolling: {r: 0, g: 0, b: 1, a: 1}
- _OverlayTex_Scroll: {r: 0.1, g: 0.1, b: 1, a: 1}
- _ShadowColor: {r: 0, g: 0, b: 0, a: 1}
- _SoftParticlesFadeDistance: {r: 0, g: 1, b: 0, a: 0}
m_BuildTextureStacks: []

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: cbb6f419bbe7c6e4d9ce7e0322aa267d
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 109565
packageName: Cartoon FX Remaster Free
packageVersion: R 1.5.0
assetPath: Assets/JMO Assets/Cartoon FX Remaster/CFXR Assets/Graphics/cfxr aura
runic hdr ab nosp.mat
uploadId: 756876

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

View File

@@ -0,0 +1,129 @@
fileFormatVersion: 2
guid: ccb58def4933d4e46b7a1fc023bf6259
TextureImporter:
fileIDToRecycleName: {}
externalObjects: {}
serializedVersion: 9
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 2
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 10
textureShape: 1
singleChannelComponent: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- serializedVersion: 2
buildTarget: DefaultTexturePlatform
maxTextureSize: 256
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: Standalone
maxTextureSize: 256
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: Android
maxTextureSize: 256
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: WebGL
maxTextureSize: 64
resizeAlgorithm: 0
textureFormat: 63
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
androidETC2FallbackOverride: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
vertices: []
indices:
edges: []
weights: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 109565
packageName: Cartoon FX Remaster Free
packageVersion: R 1.5.0
assetPath: Assets/JMO Assets/Cartoon FX Remaster/CFXR Assets/Graphics/cfxr aura
runic.png
uploadId: 756876

View File

@@ -0,0 +1,125 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: cfxr blood dissolve ab
m_Shader: {fileID: -6465566751694194690, guid: 1a29b4d27eb8b04479ef89c00dea533d,
type: 3}
m_ValidKeywords:
- _ALPHABLEND_ON
- _CFXR_DISSOLVE
- _CFXR_DITHERED_SHADOWS_ON
- _FADING_ON
m_InvalidKeywords:
- _
- _CFXR_OVERLAYBLEND_RGBA
- _CFXR_OVERLAYTEX_OFF
- _CFXR_SINGLE_CHANNEL
- _SINGLECHANNEL_ON
m_LightmapFlags: 0
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DissolveTex:
m_Texture: {fileID: 2800000, guid: 0611efd272757c345a8ded5f38dd3f88, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DistortTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DitherCustom:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _GradientMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 2800000, guid: a29f55dbea218ca4fbd94deb36027aee, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OverlayTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SecondColorTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _AmbientColor: 0.25
- _AmbientIntensity: 0.5
- _AmbientLighting: 0
- _BacklightTransmittance: 1
- _BlendingType: 0
- _BumpScale: 1
- _CFXR_DITHERED_SHADOWS: 1
- _CFXR_OVERLAYBLEND: 0
- _CFXR_OVERLAYTEX: 0
- _Cutoff: 0.1
- _DebugDissolveTime: 0
- _DirLightScreenAtten: 1
- _DirectLightingRamp: 1
- _DissolveSmooth: 0.1
- _Distort: 0.1
- _DoubleDissolve: 0
- _DstBlend: 10
- _EdgeFadePow: 1
- _FadeAlongU: 0
- _HdrBoost: 0
- _HdrMultiply: 0
- _IndirectLightingMix: 0.5
- _InvertDissolveTex: 0
- _LightingWorldPosStrength: 0.2
- _OVERLAYBLEND: 0
- _OVERLAYTEX: 0
- _ReceivedShadowsStrength: 0.5
- _SecondColorSmooth: 0.2
- _ShadowStrength: 0.5
- _SingleChannel: 1
- _SoftParticlesFadeDistanceFar: 1
- _SoftParticlesFadeDistanceNear: 0
- _SrcBlend: 5
- _UVDistortionAdd: 0
- _UseAlphaClip: 0
- _UseBackLighting: 0
- _UseDissolve: 1
- _UseDissolveOffsetUV: 0
- _UseEF: 0
- _UseEmission: 0
- _UseFB: 0
- _UseFontColor: 0
- _UseGradientMap: 0
- _UseLighting: 0
- _UseLightingWorldPosOffset: 0
- _UseNormalMap: 0
- _UseSP: 1
- _UseSecondColor: 0
- _UseUV2Distortion: 0
- _UseUVDistortion: 0
- _ZWrite: 0
m_Colors:
- _Color: {r: 2, g: 2, b: 2, a: 1}
- _DissolveScroll: {r: 0, g: 0, b: 0, a: 0}
- _DistortScrolling: {r: 0, g: 0, b: 1, a: 1}
- _OverlayTex_Scroll: {r: 0.1, g: 0.1, b: 1, a: 1}
- _ShadowColor: {r: 0, g: 0, b: 0, a: 1}
- _SoftParticlesFadeDistance: {r: 0, g: 1, b: 0, a: 0}
m_BuildTextureStacks: []

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: 28dde998c7abf234498a42d0aab38421
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 109565
packageName: Cartoon FX Remaster Free
packageVersion: R 1.5.0
assetPath: Assets/JMO Assets/Cartoon FX Remaster/CFXR Assets/Graphics/cfxr blood
dissolve ab.mat
uploadId: 756876

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 KiB

View File

@@ -0,0 +1,129 @@
fileFormatVersion: 2
guid: 0611efd272757c345a8ded5f38dd3f88
TextureImporter:
fileIDToRecycleName: {}
externalObjects: {}
serializedVersion: 9
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 10
textureShape: 1
singleChannelComponent: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- serializedVersion: 2
buildTarget: DefaultTexturePlatform
maxTextureSize: 256
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: Standalone
maxTextureSize: 256
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: Android
maxTextureSize: 256
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: WebGL
maxTextureSize: 256
resizeAlgorithm: 0
textureFormat: 63
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
androidETC2FallbackOverride: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
vertices: []
indices:
edges: []
weights: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 109565
packageName: Cartoon FX Remaster Free
packageVersion: R 1.5.0
assetPath: Assets/JMO Assets/Cartoon FX Remaster/CFXR Assets/Graphics/cfxr blood
dissolve.png
uploadId: 756876

View File

@@ -0,0 +1,127 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: cfxr blood splash dissolve ab
m_Shader: {fileID: -6465566751694194690, guid: 1a29b4d27eb8b04479ef89c00dea533d,
type: 3}
m_ValidKeywords:
- _ALPHABLEND_ON
- _CFXR_DISSOLVE
- _CFXR_DITHERED_SHADOWS_ON
- _FADING_ON
m_InvalidKeywords:
- _
- _CFXR_OVERLAYBLEND_RGBA
- _CFXR_OVERLAYTEX_OFF
- _CFXR_SINGLE_CHANNEL
- _SINGLECHANNEL_ON
m_LightmapFlags: 0
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DissolveTex:
m_Texture: {fileID: 2800000, guid: 66389432937edf24a943c3944a78bd01, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DistortTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DitherCustom:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _GradientMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 2800000, guid: b00dc0b0f4174b14aa9e3caa8d9b0859, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OverlayTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SecondColorTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _AmbientColor: 0.25
- _AmbientIntensity: 0.5
- _AmbientLighting: 0
- _BacklightTransmittance: 1
- _BlendingType: 0
- _BumpScale: 1
- _CFXR_DITHERED_SHADOWS: 1
- _CFXR_OVERLAYBLEND: 0
- _CFXR_OVERLAYTEX: 0
- _Cutoff: 0.1
- _DebugDissolveTime: 0
- _DirLightScreenAtten: 1
- _DirectLightingMix: 0.5
- _DirectLightingRamp: 1
- _DissolveSmooth: 0.1
- _Distort: 0.1
- _DoubleDissolve: 0
- _DstBlend: 10
- _EdgeFadePow: 1
- _FadeAlongU: 0
- _HdrBoost: 0
- _HdrMultiply: 0
- _IndirectLightingMix: 0.5
- _InvertDissolveTex: 0
- _LightingWorldPosStrength: 0.2
- _OVERLAYBLEND: 0
- _OVERLAYTEX: 0
- _ReceivedShadowsStrength: 0.5
- _SecondColorSmooth: 0.2
- _ShadowStrength: 0.5
- _SingleChannel: 1
- _SoftParticlesFadeDistanceFar: 1
- _SoftParticlesFadeDistanceNear: 0
- _SrcBlend: 5
- _UVDistortionAdd: 0
- _UseAlphaClip: 0
- _UseBackLighting: 0
- _UseDissolve: 1
- _UseDissolveOffsetUV: 0
- _UseEF: 0
- _UseEmission: 0
- _UseFB: 0
- _UseFontColor: 0
- _UseGradientMap: 0
- _UseLighting: 0
- _UseLightingWorldPosOffset: 0
- _UseNormalMap: 0
- _UseSP: 1
- _UseSecondColor: 0
- _UseUV2Distortion: 0
- _UseUVDistortion: 0
- _ZWrite: 0
m_Colors:
- _Color: {r: 2, g: 2, b: 2, a: 1}
- _DissolveScroll: {r: 0, g: 0, b: 0, a: 0}
- _DistortScrolling: {r: 0, g: 0, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 0}
- _OverlayTex_Scroll: {r: 0.1, g: 0.1, b: 1, a: 1}
- _ShadowColor: {r: 0, g: 0, b: 0, a: 1}
- _SoftParticlesFadeDistance: {r: 0, g: 1, b: 0, a: 0}
m_BuildTextureStacks: []

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: ccfff22ed954c6f41ade040a8a7c8f22
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 109565
packageName: Cartoon FX Remaster Free
packageVersion: R 1.5.0
assetPath: Assets/JMO Assets/Cartoon FX Remaster/CFXR Assets/Graphics/cfxr blood
splash dissolve ab.mat
uploadId: 756876

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

View File

@@ -0,0 +1,129 @@
fileFormatVersion: 2
guid: 66389432937edf24a943c3944a78bd01
TextureImporter:
fileIDToRecycleName: {}
externalObjects: {}
serializedVersion: 9
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 10
textureShape: 1
singleChannelComponent: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- serializedVersion: 2
buildTarget: DefaultTexturePlatform
maxTextureSize: 128
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: Standalone
maxTextureSize: 128
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: Android
maxTextureSize: 128
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: WebGL
maxTextureSize: 128
resizeAlgorithm: 0
textureFormat: 63
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
androidETC2FallbackOverride: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
vertices: []
indices:
edges: []
weights: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 109565
packageName: Cartoon FX Remaster Free
packageVersion: R 1.5.0
assetPath: Assets/JMO Assets/Cartoon FX Remaster/CFXR Assets/Graphics/cfxr blood
splash dissolve.png
uploadId: 756876

View File

@@ -0,0 +1,162 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!43 &4300000
Mesh:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: cfxr blood splash mesh
serializedVersion: 9
m_SubMeshes:
- serializedVersion: 2
firstByte: 0
indexCount: 201
topology: 0
baseVertex: 0
firstVertex: 0
vertexCount: 69
localAABB:
m_Center: {x: -0.001953125, y: 0.005859375, z: 0}
m_Extent: {x: 0.45117188, y: 0.48632812, z: 0}
m_Shapes:
vertices: []
shapes: []
channels: []
fullWeights: []
m_BindPose: []
m_BoneNameHashes:
m_RootBoneNameHash: 0
m_MeshCompression: 0
m_IsReadable: 1
m_KeepVertices: 1
m_KeepIndices: 1
m_IndexFormat: 0
m_IndexBuffer: 2c001d000f000f003b002c002c002b001d001d0010000f000f0003003b003b003a002c002b001e001d001d001c0010000f0004000300030002003b003a002d002c002b002a001e001c001b0010000f000e00040002003c003b003a002e002d002a001f001e001b00110010000e000d000400020041003c003a0033002e002a0024001f001b00150011000d000500040002000100410041003d003c003a003700330033002f002e002a0028002400240020001f001b00190015001500120011000d000900050001004300410041003f003d003a0039003700370035003300330031002f002800260024002400220020001900170015001500140012000d000b000900090007000500010044004300430042004100410040003f003f003e003d00390038003700370036003500350034003300330032003100310030002f002a00290028002800270026002600250024002400230022002200210020001b001a0019001900180017001700160015001400130012000d000c000b000b000a000900090008000700070006000500010000004400
m_VertexData:
serializedVersion: 2
m_VertexCount: 69
m_Channels:
- stream: 0
offset: 0
format: 0
dimension: 3
- stream: 0
offset: 12
format: 0
dimension: 3
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 24
format: 0
dimension: 2
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
m_DataSize: 2208
_typelessdata: 0000bc3e0000aebe000000000000000000000000000080bf00005e3f0000243e00008a3e000078be000000000000000000000000000080bf0000453f0000843e0000183e0000f0bd000000000000000000000000000080bf0000263f0000c43e0000043e000098bd000000000000000000000000000080bf0000213f0000da3e0000083e000080bb000000000000000000000000000080bf0000223f0000fe3e0000383e0000103d000000000000000000000000ffff7fbf00002e3f0000093f0000a23e0000a83d000000000000000000000000000080bf0000513f0000153f0000da3e0000043e000000000000000000000000000080bf00006d3f0000213f0000e63e00001c3e000000000000000000000000000080bf0000733f0000273f0000e63e0000503e000000000000000000000000000080bf0000733f0000343f0000e43e00006c3e000000000000000000000000000080bf0000723f00003b3f0000d43e00007c3e000000000000000000000000000080bf00006a3f00003f3f0000c03e00007c3e000000000000000000000000000080bf0000603f00003f3f0000a03e0000603e000000000000000000000000000080bf0000503f0000383f00004c3e0000103e000000000000000000000000000080bf0000333f0000243f0000f03d0000d03d000000000000000000000000ffff7fbf00001e3f00001a3f0000883d0000e03d000000000000000000000000000080bf0000113f00001c3f0000203d0000243e000000000000000000000000000080bf00000a3f0000293f0000e03c0000743e000000000000000000000000000080bf0000073f00003d3f0000a03c0000dc3e000000000000000000000000000080bf0000053f00006e3f0000003c0000ee3e000000000000000000000000000080bf0000023f0000773f0000a0bc0000fa3e000000000000000000000000000080bf0000f63e00007d3f0000c0bc0000fc3e000000000000000000000000000080bf0000f43e00007e3f0000a0bd0000fc3e000000000000000000000000000080bf0000d83e00007e3f0000d8bd0000e83e000000000000000000000000ffff7fbf0000ca3e0000743f0000d0bd0000c83e000000000000000000000000000080bf0000cc3e0000643f0000b8bd0000a43e000000000000000000000000000080bf0000d23e0000523f000090bd0000883e000000000000000000000000000080bf0000dc3e0000443f000070bd0000203e000000000000000000000000000080bf0000e23e0000283f000088bd0000003e000000000000000000000000000080bf0000de3e0000203f0000c8bd0000d03d000000000000000000000000000080bf0000ce3e00001a3f000014be0000d83d000000000000000000000000000080bf0000b63e00001b3f000038be0000043e000000000000000000000000000080bf0000a43e0000213f0000a6be0000703e000000000000000000000000000080bf0000343e00003c3f0000b6be0000803e000000000000000000000000000080bf0000143e0000403f0000c4be0000803e000000000000000000000000000080bf0000f03d0000403f0000d2be0000683e000000000000000000000000000080bf0000b83d00003a3f0000d6be0000543e000000000000000000000000000080bf0000a83d0000353f0000d6be0000343e000000000000000000000000000080bf0000a83d00002d3f0000cabe0000183e000000000000000000000000000080bf0000d83d0000263f0000c0be0000083e000000000000000000000000000080bf0000003e0000223f0000a2be0000d83d000000000000000000000000000080bf00003c3e00001b3f00006cbe0000a03d000000000000000000000000000080bf00008a3e0000143f000024be0000303d000000000000000000000000000080bf0000ae3e00000b3f000004be0000003c000000000000000000000000000080bf0000be3e0000023f000010be000070bd000000000000000000000000000080bf0000b83e0000e23e000030be0000c0bd000000000000000000000000000080bf0000a83e0000d03e000086be00001cbe000000000000000000000000000080bf0000743e0000b23e0000babe000058be000000000000000000000000000080bf00000c3e0000943e0000d4be00007cbe000000000000000000000000000080bf0000b03d0000823e0000e2be00008cbe000000000000000000000000000080bf0000703d0000683e0000e8be000098be000000000000000000000000000080bf0000403d0000503e0000e8be0000a6be000000000000000000000000000080bf0000403d0000343e0000e4be0000b4be000000000000000000000000ffff7fbf0000603d0000183e0000ccbe0000c6be000000000000000000000000000080bf0000d03d0000e83d0000b4be0000c4be000000000000000000000000000080bf0000183e0000f03d0000a4be0000b8be000000000000000000000000000080bf0000383e0000103e000080be000096be000000000000000000000000000080bf0000803e0000543e000008be000028be000000000000000000000000ffff7fbf0000bc3e0000ac3e000020bd0000d8bd000000000000000000000000000080bf0000ec3e0000ca3e0000a03d000020be000000000000000000000000000080bf0000143f0000b03e0000243e000094be000000000000000000000000000080bf0000293f0000583e0000643e0000cebe000000000000000000000000000080bf0000393f0000c83d00007c3e0000e2be000000000000000000000000ffff7fbf00003f3f0000703d0000963e0000f6be000000000000000000000000000080bf00004b3f0000a03c0000ae3e0000f6be000000000000000000000000000080bf0000573f0000a03c0000b83e0000f2be000000000000000000000000000080bf00005c3f0000e03c0000cc3e0000dcbe000000000000000000000000000080bf0000663f0000903d0000ca3e0000c0be000000000000000000000000000080bf0000653f0000003e
m_CompressedMesh:
m_Vertices:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_UV:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_Normals:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_Tangents:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_Weights:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_NormalSigns:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_TangentSigns:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_FloatColors:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_BoneIndices:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_Triangles:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_UVInfo: 0
m_LocalAABB:
m_Center: {x: -0.001953125, y: 0.005859375, z: 0}
m_Extent: {x: 0.45117188, y: 0.48632812, z: 0}
m_MeshUsageFlags: 0
m_BakedConvexCollisionMesh:
m_BakedTriangleCollisionMesh:
m_MeshMetrics[0]: 1
m_MeshMetrics[1]: 1
m_MeshOptimized: 0
m_StreamData:
offset: 0
size: 0
path:

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: 03b90fa8ed1d4104abc8b7431ab290e6
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 4300000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 109565
packageName: Cartoon FX Remaster Free
packageVersion: R 1.5.0
assetPath: Assets/JMO Assets/Cartoon FX Remaster/CFXR Assets/Graphics/cfxr blood
splash mesh.asset
uploadId: 756876

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

View File

@@ -0,0 +1,129 @@
fileFormatVersion: 2
guid: b00dc0b0f4174b14aa9e3caa8d9b0859
TextureImporter:
fileIDToRecycleName: {}
externalObjects: {}
serializedVersion: 9
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 10
textureShape: 1
singleChannelComponent: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- serializedVersion: 2
buildTarget: DefaultTexturePlatform
maxTextureSize: 256
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: Standalone
maxTextureSize: 256
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: Android
maxTextureSize: 256
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: WebGL
maxTextureSize: 256
resizeAlgorithm: 0
textureFormat: 63
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
androidETC2FallbackOverride: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
vertices: []
indices:
edges: []
weights: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 109565
packageName: Cartoon FX Remaster Free
packageVersion: R 1.5.0
assetPath: Assets/JMO Assets/Cartoon FX Remaster/CFXR Assets/Graphics/cfxr blood
splash.png
uploadId: 756876

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

View File

@@ -0,0 +1,128 @@
fileFormatVersion: 2
guid: a29f55dbea218ca4fbd94deb36027aee
TextureImporter:
fileIDToRecycleName: {}
externalObjects: {}
serializedVersion: 9
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 10
textureShape: 1
singleChannelComponent: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- serializedVersion: 2
buildTarget: DefaultTexturePlatform
maxTextureSize: 256
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: Standalone
maxTextureSize: 256
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: Android
maxTextureSize: 256
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: WebGL
maxTextureSize: 256
resizeAlgorithm: 0
textureFormat: 63
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
androidETC2FallbackOverride: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
vertices: []
indices:
edges: []
weights: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 109565
packageName: Cartoon FX Remaster Free
packageVersion: R 1.5.0
assetPath: Assets/JMO Assets/Cartoon FX Remaster/CFXR Assets/Graphics/cfxr blood.png
uploadId: 756876

View File

@@ -0,0 +1,113 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: cfxr bubble 2 ab
m_Shader: {fileID: -6465566751694194690, guid: 1a29b4d27eb8b04479ef89c00dea533d,
type: 3}
m_ValidKeywords:
- _ALPHABLEND_ON
- _CFXR_DITHERED_SHADOWS_ON
- _CFXR_SINGLE_CHANNEL
- _FADING_ON
m_InvalidKeywords:
- _
- _CFXR_OVERLAYBLEND_RGBA
- _CFXR_OVERLAYTEX_OFF
m_LightmapFlags: 0
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DissolveTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DistortTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DitherCustom:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 2800000, guid: e60eda0ccf5343e46b8cb114df9ba50d, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OverlayTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SecondColorTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _BacklightTransmittance: 1
- _BlendingType: 0
- _BumpScale: 1
- _CFXR_DITHERED_SHADOWS: 1
- _CFXR_OVERLAYBLEND: 0
- _CFXR_OVERLAYTEX: 0
- _Cutoff: 0.1
- _DirLightScreenAtten: 1
- _DirectLightingRamp: 1
- _DissolveSmooth: 0.1
- _Distort: 0.1
- _DoubleDissolve: 0
- _DstBlend: 10
- _EdgeFadePow: 1
- _FadeAlongU: 0
- _HdrBoost: 0
- _HdrMultiply: 0
- _IndirectLightingMix: 0.5
- _InvertDissolveTex: 0
- _LightingWorldPosStrength: 0.2
- _OVERLAYBLEND: 0
- _OVERLAYTEX: 0
- _SecondColorSmooth: 0.2
- _ShadowStrength: 0.5
- _SingleChannel: 1
- _SoftParticlesFadeDistanceFar: 1
- _SoftParticlesFadeDistanceNear: 0
- _SrcBlend: 5
- _UVDistortionAdd: 0
- _UseAlphaClip: 0
- _UseBackLighting: 0
- _UseDissolve: 0
- _UseDissolveOffsetUV: 0
- _UseEF: 0
- _UseEmission: 0
- _UseFB: 0
- _UseFontColor: 0
- _UseLighting: 0
- _UseLightingWorldPosOffset: 0
- _UseNormalMap: 0
- _UseSP: 1
- _UseSecondColor: 0
- _UseUV2Distortion: 0
- _UseUVDistortion: 0
- _ZWrite: 0
m_Colors:
- _DissolveScroll: {r: 0, g: 0, b: 0, a: 0}
- _DistortScrolling: {r: 0, g: 0, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 0}
- _OverlayTex_Scroll: {r: 0.1, g: 0.1, b: 1, a: 1}
- _ShadowColor: {r: 0, g: 0, b: 0, a: 1}
- _SoftParticlesFadeDistance: {r: 0, g: 1, b: 0, a: 0}
m_BuildTextureStacks: []

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: 21417cf5ab018164f9d28d2e35ad8cb7
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 109565
packageName: Cartoon FX Remaster Free
packageVersion: R 1.5.0
assetPath: Assets/JMO Assets/Cartoon FX Remaster/CFXR Assets/Graphics/cfxr bubble
2 ab.mat
uploadId: 756876

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

View File

@@ -0,0 +1,136 @@
fileFormatVersion: 2
guid: e60eda0ccf5343e46b8cb114df9ba50d
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: -1
wrapV: -1
wrapW: -1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 10
textureShape: 1
singleChannelComponent: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
applyGammaDecoding: 1
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 128
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 128
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 64
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 1
- serializedVersion: 3
buildTarget: WebGL
maxTextureSize: 64
resizeAlgorithm: 0
textureFormat: 63
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 109565
packageName: Cartoon FX Remaster Free
packageVersion: R 1.5.0
assetPath: Assets/JMO Assets/Cartoon FX Remaster/CFXR Assets/Graphics/cfxr bubble
2.png
uploadId: 756876

View File

@@ -0,0 +1,114 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: cfxr bubble ab
m_Shader: {fileID: -6465566751694194690, guid: 1a29b4d27eb8b04479ef89c00dea533d,
type: 3}
m_ValidKeywords:
- _ALPHABLEND_ON
- _CFXR_DITHERED_SHADOWS_ON
- _FADING_ON
m_InvalidKeywords:
- _
- _CFXR_OVERLAYBLEND_RGBA
- _CFXR_OVERLAYTEX_OFF
- _CFXR_SINGLE_CHANNEL
- _SINGLECHANNEL_ON
m_LightmapFlags: 0
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DissolveTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DistortTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DitherCustom:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 2800000, guid: c78c2071651a73d4db16ad0155af4dad, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OverlayTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SecondColorTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _BacklightTransmittance: 1
- _BlendingType: 0
- _BumpScale: 1
- _CFXR_DITHERED_SHADOWS: 1
- _CFXR_OVERLAYBLEND: 0
- _CFXR_OVERLAYTEX: 0
- _Cutoff: 0.1
- _DirLightScreenAtten: 1
- _DirectLightingRamp: 1
- _DissolveSmooth: 0.1
- _Distort: 0.1
- _DoubleDissolve: 0
- _DstBlend: 10
- _EdgeFadePow: 1
- _FadeAlongU: 0
- _HdrBoost: 0
- _HdrMultiply: 0
- _IndirectLightingMix: 0.5
- _InvertDissolveTex: 0
- _LightingWorldPosStrength: 0.2
- _OVERLAYBLEND: 0
- _OVERLAYTEX: 0
- _SecondColorSmooth: 0.2
- _ShadowStrength: 0.5
- _SingleChannel: 1
- _SoftParticlesFadeDistanceFar: 1
- _SoftParticlesFadeDistanceNear: 0
- _SrcBlend: 5
- _UVDistortionAdd: 0
- _UseAlphaClip: 0
- _UseBackLighting: 0
- _UseDissolve: 0
- _UseDissolveOffsetUV: 0
- _UseEF: 0
- _UseEmission: 0
- _UseFB: 0
- _UseFontColor: 0
- _UseLighting: 0
- _UseLightingWorldPosOffset: 0
- _UseNormalMap: 0
- _UseSP: 1
- _UseSecondColor: 0
- _UseUV2Distortion: 0
- _UseUVDistortion: 0
- _ZWrite: 0
m_Colors:
- _DissolveScroll: {r: 0, g: 0, b: 0, a: 0}
- _DistortScrolling: {r: 0, g: 0, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 0}
- _OverlayTex_Scroll: {r: 0.1, g: 0.1, b: 1, a: 1}
- _ShadowColor: {r: 0, g: 0, b: 0, a: 1}
- _SoftParticlesFadeDistance: {r: 0, g: 1, b: 0, a: 0}
m_BuildTextureStacks: []

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: b723f81f440998d42a4d4b393cac870c
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 109565
packageName: Cartoon FX Remaster Free
packageVersion: R 1.5.0
assetPath: Assets/JMO Assets/Cartoon FX Remaster/CFXR Assets/Graphics/cfxr bubble
ab.mat
uploadId: 756876

View File

@@ -0,0 +1,115 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: cfxr bubble hdr ab
m_Shader: {fileID: -6465566751694194690, guid: 1a29b4d27eb8b04479ef89c00dea533d,
type: 3}
m_ValidKeywords:
- _ALPHABLEND_ON
- _CFXR_DITHERED_SHADOWS_ON
- _FADING_ON
m_InvalidKeywords:
- _
- _CFXR_HDR_BOOST
- _CFXR_OVERLAYBLEND_RGBA
- _CFXR_OVERLAYTEX_OFF
- _CFXR_SINGLE_CHANNEL
- _SINGLECHANNEL_ON
m_LightmapFlags: 0
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DissolveTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DistortTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DitherCustom:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 2800000, guid: c78c2071651a73d4db16ad0155af4dad, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OverlayTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SecondColorTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _BacklightTransmittance: 1
- _BlendingType: 0
- _BumpScale: 1
- _CFXR_DITHERED_SHADOWS: 1
- _CFXR_OVERLAYBLEND: 0
- _CFXR_OVERLAYTEX: 0
- _Cutoff: 0.1
- _DirLightScreenAtten: 1
- _DirectLightingRamp: 1
- _DissolveSmooth: 0.1
- _Distort: 0.1
- _DoubleDissolve: 0
- _DstBlend: 10
- _EdgeFadePow: 1
- _FadeAlongU: 0
- _HdrBoost: 1
- _HdrMultiply: 10
- _IndirectLightingMix: 0.5
- _InvertDissolveTex: 0
- _LightingWorldPosStrength: 0.2
- _OVERLAYBLEND: 0
- _OVERLAYTEX: 0
- _SecondColorSmooth: 0.2
- _ShadowStrength: 0.5
- _SingleChannel: 1
- _SoftParticlesFadeDistanceFar: 1
- _SoftParticlesFadeDistanceNear: 0
- _SrcBlend: 5
- _UVDistortionAdd: 0
- _UseAlphaClip: 0
- _UseBackLighting: 0
- _UseDissolve: 0
- _UseDissolveOffsetUV: 0
- _UseEF: 0
- _UseEmission: 0
- _UseFB: 0
- _UseFontColor: 0
- _UseLighting: 0
- _UseLightingWorldPosOffset: 0
- _UseNormalMap: 0
- _UseSP: 1
- _UseSecondColor: 0
- _UseUV2Distortion: 0
- _UseUVDistortion: 0
- _ZWrite: 0
m_Colors:
- _DissolveScroll: {r: 0, g: 0, b: 0, a: 0}
- _DistortScrolling: {r: 0, g: 0, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 0}
- _OverlayTex_Scroll: {r: 0.1, g: 0.1, b: 1, a: 1}
- _ShadowColor: {r: 0, g: 0, b: 0, a: 1}
- _SoftParticlesFadeDistance: {r: 0, g: 1, b: 0, a: 0}
m_BuildTextureStacks: []

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: 92f3f05a0e6f8e840b8e4367b2c7713b
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 109565
packageName: Cartoon FX Remaster Free
packageVersion: R 1.5.0
assetPath: Assets/JMO Assets/Cartoon FX Remaster/CFXR Assets/Graphics/cfxr bubble
hdr ab.mat
uploadId: 756876

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

View File

@@ -0,0 +1,128 @@
fileFormatVersion: 2
guid: c78c2071651a73d4db16ad0155af4dad
TextureImporter:
fileIDToRecycleName: {}
externalObjects: {}
serializedVersion: 9
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: -1
wrapV: -1
wrapW: -1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 10
textureShape: 1
singleChannelComponent: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- serializedVersion: 2
buildTarget: DefaultTexturePlatform
maxTextureSize: 64
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: Standalone
maxTextureSize: 64
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: Android
maxTextureSize: 64
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: WebGL
maxTextureSize: 64
resizeAlgorithm: 0
textureFormat: 63
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
androidETC2FallbackOverride: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
vertices: []
indices:
edges: []
weights: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 109565
packageName: Cartoon FX Remaster Free
packageVersion: R 1.5.0
assetPath: Assets/JMO Assets/Cartoon FX Remaster/CFXR Assets/Graphics/cfxr bubble.png
uploadId: 756876

View File

@@ -0,0 +1,119 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: cfxr card club ab
m_Shader: {fileID: -6465566751694194690, guid: 1a29b4d27eb8b04479ef89c00dea533d,
type: 3}
m_ValidKeywords:
- _ALPHABLEND_ON
- _CFXR_DITHERED_SHADOWS_ON
- _FADING_ON
m_InvalidKeywords:
- _
- _CFXR_OVERLAYBLEND_RGBA
- _CFXR_OVERLAYTEX_OFF
- _CFXR_SINGLE_CHANNEL
- _SINGLECHANNEL_ON
m_LightmapFlags: 0
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DissolveTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DistortTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DitherCustom:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _GradientMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 2800000, guid: d92fa0efcefbc2e4db627980b9abdb4c, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OverlayTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SecondColorTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _BacklightTransmittance: 1
- _BlendingType: 0
- _BumpScale: 1
- _CFXR_DITHERED_SHADOWS: 1
- _CFXR_OVERLAYBLEND: 0
- _CFXR_OVERLAYTEX: 0
- _Cutoff: 0.1
- _DirLightScreenAtten: 1
- _DirectLightingRamp: 1
- _DissolveSmooth: 0.1
- _Distort: 0.1
- _DoubleDissolve: 0
- _DstBlend: 10
- _EdgeFadePow: 1
- _FadeAlongU: 0
- _HdrBoost: 0
- _HdrMultiply: 0
- _IndirectLightingMix: 0.5
- _InvertDissolveTex: 0
- _LightingWorldPosStrength: 0.2
- _OVERLAYBLEND: 0
- _OVERLAYTEX: 0
- _SecondColorSmooth: 0.2
- _ShadowStrength: 0.5
- _SingleChannel: 1
- _SoftParticlesFadeDistanceFar: 2
- _SoftParticlesFadeDistanceNear: 0
- _SrcBlend: 5
- _UVDistortionAdd: 0
- _UseAlphaClip: 0
- _UseBackLighting: 0
- _UseDissolve: 0
- _UseDissolveOffsetUV: 0
- _UseEF: 0
- _UseEmission: 0
- _UseFB: 0
- _UseFontColor: 0
- _UseGradientMap: 0
- _UseLighting: 0
- _UseLightingWorldPosOffset: 0
- _UseNormalMap: 0
- _UseSP: 1
- _UseSecondColor: 0
- _UseUV2Distortion: 0
- _UseUVDistortion: 0
- _ZWrite: 0
m_Colors:
- _Color: {r: 3.8792846, g: 3.8792846, b: 3.8792846, a: 0}
- _DissolveScroll: {r: 0, g: 0, b: 0, a: 0}
- _DistortScrolling: {r: 0, g: 0, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 0}
- _OverlayTex_Scroll: {r: 0.1, g: 0.1, b: 1, a: 1}
- _ShadowColor: {r: 0, g: 0, b: 0, a: 1}
m_BuildTextureStacks: []

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: 6a36ba77acbf3644f855c8700b01c682
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 109565
packageName: Cartoon FX Remaster Free
packageVersion: R 1.5.0
assetPath: Assets/JMO Assets/Cartoon FX Remaster/CFXR Assets/Graphics/cfxr card
club ab.mat
uploadId: 756876

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -0,0 +1,129 @@
fileFormatVersion: 2
guid: d92fa0efcefbc2e4db627980b9abdb4c
TextureImporter:
fileIDToRecycleName: {}
externalObjects: {}
serializedVersion: 9
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 10
textureShape: 1
singleChannelComponent: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- serializedVersion: 2
buildTarget: DefaultTexturePlatform
maxTextureSize: 128
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: Standalone
maxTextureSize: 128
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: Android
maxTextureSize: 128
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
- serializedVersion: 2
buildTarget: WebGL
maxTextureSize: 128
resizeAlgorithm: 0
textureFormat: 63
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
androidETC2FallbackOverride: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
vertices: []
indices:
edges: []
weights: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 109565
packageName: Cartoon FX Remaster Free
packageVersion: R 1.5.0
assetPath: Assets/JMO Assets/Cartoon FX Remaster/CFXR Assets/Graphics/cfxr card
club.png
uploadId: 756876

View File

@@ -0,0 +1,119 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: cfxr card diamond ab
m_Shader: {fileID: -6465566751694194690, guid: 1a29b4d27eb8b04479ef89c00dea533d,
type: 3}
m_ValidKeywords:
- _ALPHABLEND_ON
- _CFXR_DITHERED_SHADOWS_ON
- _FADING_ON
m_InvalidKeywords:
- _
- _CFXR_OVERLAYBLEND_RGBA
- _CFXR_OVERLAYTEX_OFF
- _CFXR_SINGLE_CHANNEL
- _SINGLECHANNEL_ON
m_LightmapFlags: 0
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DissolveTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DistortTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DitherCustom:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _GradientMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 2800000, guid: d8c4f60c4d65b1d40a18db39349c9439, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OverlayTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SecondColorTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _BacklightTransmittance: 1
- _BlendingType: 0
- _BumpScale: 1
- _CFXR_DITHERED_SHADOWS: 1
- _CFXR_OVERLAYBLEND: 0
- _CFXR_OVERLAYTEX: 0
- _Cutoff: 0.1
- _DirLightScreenAtten: 1
- _DirectLightingRamp: 1
- _DissolveSmooth: 0.1
- _Distort: 0.1
- _DoubleDissolve: 0
- _DstBlend: 10
- _EdgeFadePow: 1
- _FadeAlongU: 0
- _HdrBoost: 0
- _HdrMultiply: 0
- _IndirectLightingMix: 0.5
- _InvertDissolveTex: 0
- _LightingWorldPosStrength: 0.2
- _OVERLAYBLEND: 0
- _OVERLAYTEX: 0
- _SecondColorSmooth: 0.2
- _ShadowStrength: 0.5
- _SingleChannel: 1
- _SoftParticlesFadeDistanceFar: 2
- _SoftParticlesFadeDistanceNear: 0
- _SrcBlend: 5
- _UVDistortionAdd: 0
- _UseAlphaClip: 0
- _UseBackLighting: 0
- _UseDissolve: 0
- _UseDissolveOffsetUV: 0
- _UseEF: 0
- _UseEmission: 0
- _UseFB: 0
- _UseFontColor: 0
- _UseGradientMap: 0
- _UseLighting: 0
- _UseLightingWorldPosOffset: 0
- _UseNormalMap: 0
- _UseSP: 1
- _UseSecondColor: 0
- _UseUV2Distortion: 0
- _UseUVDistortion: 0
- _ZWrite: 0
m_Colors:
- _Color: {r: 3.8792846, g: 3.8792846, b: 3.8792846, a: 0}
- _DissolveScroll: {r: 0, g: 0, b: 0, a: 0}
- _DistortScrolling: {r: 0, g: 0, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 0}
- _OverlayTex_Scroll: {r: 0.1, g: 0.1, b: 1, a: 1}
- _ShadowColor: {r: 0, g: 0, b: 0, a: 1}
m_BuildTextureStacks: []

Some files were not shown because too many files have changed in this diff Show More