灵灯系统v0.1

This commit is contained in:
2026-06-30 22:21:55 +08:00
parent bc0c85771c
commit 3c2f797f66
4 changed files with 310 additions and 1 deletions
@@ -0,0 +1,60 @@
using UnityEngine;
using UnityEditor;
using IndianOceanAssets.Engine2_5D;
/// <summary>
/// 编辑器工具:一键创建灵灯 Prefab。
/// 菜单路径:Assets > 创建灵灯 Prefab
/// </summary>
public static class SpiritLanternPrefabCreator
{
[MenuItem("Assets/创建灵灯 Prefab")]
public static void Create()
{
// 创建根物体
GameObject root = new GameObject("SpiritLantern");
// SpriteRenderer — 灵灯外观(使用默认 Sprite,后续可替换为美术资源)
SpriteRenderer sr = root.AddComponent<SpriteRenderer>();
sr.color = new Color(1f, 0.85f, 0.3f, 0.9f); // 暖黄色灯光
sr.sortingOrder = 100; // 在遮罩之上渲染
// LightSource — 光照组件(复用现有光照系统,与主角遮罩效果一致)
LightSource lightSource = root.AddComponent<LightSource>();
SerializedObject so = new SerializedObject(lightSource);
so.FindProperty("radius").floatValue = 4f;
so.FindProperty("intensity").floatValue = 1f;
so.FindProperty("registerOnStart").boolValue = true;
so.ApplyModifiedProperties();
// SpiritLantern — 灵灯行为脚本
root.AddComponent<SpiritLantern>();
// CircleCollider2D — 触发器,检测怪物接触
// 【碰撞检测说明】
// 灵灯是主动检测方:灵灯的 Trigger 检测进入的怪物 Collider2D
// 需确保 Edit > Project Settings > Physics 2D 碰撞矩阵中,
// 灵灯所在 Layer 与怪物 Layer 的交叉项已勾选
CircleCollider2D collider = root.AddComponent<CircleCollider2D>();
collider.isTrigger = true;
collider.radius = 0.5f;
// Rigidbody2D — 物理碰撞需要(Trigger 需要至少一方有 Rigidbody
Rigidbody2D rb = root.AddComponent<Rigidbody2D>();
rb.isKinematic = true;
rb.bodyType = RigidbodyType2D.Kinematic;
// 设置 Layer 为 Default
root.layer = LayerMask.NameToLayer("Default");
// 保存为 Prefab
string prefabPath = "Assets/eco/Prefabs/SpiritLantern.prefab";
PrefabUtility.SaveAsPrefabAsset(root, prefabPath);
// 清理场景中的临时物体
Object.DestroyImmediate(root);
Debug.Log($"[SpiritLantern] Prefab 已创建: {prefabPath}");
EditorUtility.PingAsset(AssetDatabase.LoadMainAssetAtPath(prefabPath));
}
}