using UnityEngine; using UnityEditor; using System.IO; /// /// OGG → Setup → Create Bunny Hop Boots /// Creates the ItemDefinition and a world pickup for the bhop boots. /// public static class BhopBootsSetup { private const string ITEM_DEF_PATH = "Assets/Items/BhopBoots_Item.asset"; private const string PICKUP_PREFAB = "Assets/Prefabs/Pickups/BhopBoots_Pickup.prefab"; [MenuItem("OGG/Setup/Create Bunny Hop Boots")] public static void Create() { EnsureFolder("Assets/Items"); EnsureFolder("Assets/Prefabs/Pickups"); // ── ItemDefinition ──────────────────────────────────────────── ItemDefinition item = AssetDatabase.LoadAssetAtPath(ITEM_DEF_PATH); bool isNew = item == null; if (isNew) item = ScriptableObject.CreateInstance(); item.itemName = "Bunny Hop Boots"; item.type = ItemDefinition.ItemType.Misc; item.isEquippable = true; item.description = "Illegal footwear. Gives 200 stamina while worn. Do not wear near cliffs."; if (isNew) AssetDatabase.CreateAsset(item, ITEM_DEF_PATH); else EditorUtility.SetDirty(item); AssetDatabase.SaveAssets(); // ── Pickup prefab — procedural boot shape ───────────────────── GameObject root = new GameObject("BhopBoots_Pickup"); // Simple visual: a squashed cube (boot-ish) GameObject body = GameObject.CreatePrimitive(PrimitiveType.Cube); body.name = "Visual"; body.transform.SetParent(root.transform, false); body.transform.localPosition = new Vector3(0f, 0f, 0f); body.transform.localScale = new Vector3(0.4f, 0.2f, 0.7f); Object.DestroyImmediate(body.GetComponent()); // Bright accent colour so it stands out var rend = body.GetComponent(); if (rend != null) { rend.material = new Material(Shader.Find("Universal Render Pipeline/Lit")); rend.material.color = new Color(0.1f, 0.9f, 0.4f); } PickupItem pickup = root.AddComponent(); pickup.definition = item; pickup.spinSpeed = 140f; pickup.bobHeight = 0.2f; pickup.bobSpeed = 2.8f; pickup.pickupRadius = 2.2f; pickup.pickupKey = KeyCode.E; StaminaBoostPickup boost = root.AddComponent(); boost.newMaxStamina = 200f; if (File.Exists(Application.dataPath + "/../" + PICKUP_PREFAB)) AssetDatabase.DeleteAsset(PICKUP_PREFAB); GameObject saved = PrefabUtility.SaveAsPrefabAsset(root, PICKUP_PREFAB); Object.DestroyImmediate(root); AssetDatabase.Refresh(); EditorUtility.DisplayDialog( "Bunny Hop Boots ✓", $"Created:\n• {ITEM_DEF_PATH}\n• {PICKUP_PREFAB}\n\n" + "Drag BhopBoots_Pickup into the scene.\n" + "Pick it up with [E] to unlock bunny hopping.\n\n" + "Hold SPACE while landing to chain hops and build speed.\n" + "Strafe left/right mid-air to steer.", "Let's go"); EditorGUIUtility.PingObject(saved); Selection.activeObject = saved; } static void EnsureFolder(string path) { string[] parts = path.Split('/'); string current = parts[0]; for (int i = 1; i < parts.Length; i++) { string next = current + "/" + parts[i]; if (!AssetDatabase.IsValidFolder(next)) AssetDatabase.CreateFolder(current, parts[i]); current = next; } } }