(client) feat:添加设置类,子弹添加敌我识别; chore:修改了右键菜单的初始化方式为独立创建,加载定义报错提供更多信息,动画加载出错也返回默认序列。

This commit is contained in:
m0_75251201
2025-08-19 14:36:22 +08:00
parent f67aca0804
commit f4cd5f4a86
57 changed files with 1000 additions and 788 deletions

View File

@ -26,7 +26,14 @@ namespace Managers
{
return _affiliations[defName].defName;
}
public Relation GetRelation(AffiliationDef affiliation1, AffiliationDef affiliation2)
{
if (affiliation1 == null || affiliation2 == null)
{
return Relation.Neutral; // 如果任一阵营不存在,返回中立关系
}
return GetRelation(affiliation1.defName, affiliation2.defName);
}
public Relation GetRelation(string factionName1, string factionName2)
{
// 如果查询的是同一个派系,默认是友好关系

View File

@ -158,20 +158,20 @@ namespace Managers
{
if (defRef.Item1 == null)
{
Debug.LogError("defRef.Item1 为 null");
Debug.LogError("被引用定义为 null");
continue;
}
if (defRef.Item2 == null)
{
Debug.LogError("defRef.Item2 为 null");
Debug.LogError("被引用定义的字段引用为 null");
continue;
}
var value = FindDefine(defRef.Item3.description, defRef.Item3.defName);
if (value == null)
{
Debug.LogError($"FindDefine 返回 null: description={defRef.Item3.description}, defName={defRef.Item3.defName}");
Debug.LogError($"未找到引用,出错的定义:定义类型:{defRef.Item1.GetType().Name}, 定义名:{defRef.Item1.defName} ; 类型:{defRef.Item3.description}, 定义名:{defRef.Item3.defName}");
continue;
}

View File

@ -2,23 +2,25 @@ using System;
using System.Collections.Generic;
using System.Linq;
using Base;
using Entity;
using Prefab;
using UnityEngine;
using UnityEngine.Serialization;
namespace Managers
{
public class EntityManage : Utils.MonoSingleton<EntityManage>, ITick
{
public Dictionary<string, LinkedList<EntityPrefab>> factionEntities = new();
public EntityPrefab entityPrefab;
public EntityPrefab characterPrefab;
public EntityPrefab buildingPrefab;
public EntityPrefab bulletPrefab;
public EntityPrefab defaultEntityPrefab;
private Dictionary<string, Transform> layerCache = new Dictionary<string, Transform>();
private List<Tuple<string, EntityPrefab>> pendingAdditions;
private List<Tuple<string, EntityPrefab>> pendingAdditions = new();
public LinkedList<EntityPrefab> FindEntitiesByFaction(string factionKey)
{
@ -158,7 +160,7 @@ namespace Managers
public void GenerateEntity(Data.EntityDef entityDef, Vector3 pos)
{
// 验证关键参数
if (!entityPrefab)
if (!characterPrefab)
{
Debug.LogError("entityPrefab is null! Assign a valid prefab.");
GenerateDefaultEntity(pos);
@ -177,7 +179,7 @@ namespace Managers
// 调用通用生成逻辑
var result = GenerateEntityInternal(
entityPrefab.gameObject,
characterPrefab.gameObject,
entityLevelTransform,
pos,
entityDef
@ -224,7 +226,8 @@ namespace Managers
/// <summary>
/// 生成子弹实体(含方向设置)
/// </summary>
public void GenerateBulletEntity(Data.BulletDef bulletDef, Vector3 pos, Vector3 dir)
public void GenerateBulletEntity(Data.BulletDef bulletDef, Vector3 pos, Vector3 dir,
Entity.Entity source = null)
{
// 修正:检查正确的预制体 (bulletPrefab)
if (!bulletPrefab)
@ -252,6 +255,11 @@ namespace Managers
// 子弹特有的方向设置
entityComponent => entityComponent.entity.SetTarget(pos + dir)
);
if (result.entity is Bullet bullet)
{
bullet.bulletSource = source;
if (source) bullet.affiliation = source.affiliation;
}
if (!result) GenerateDefaultEntity(pos);
}

View File

@ -346,14 +346,14 @@ namespace Managers
if (!bodyTexture.TryGetValue(packageName, out var packageDict))
{
Debug.LogWarning($"Package '{packageName}' not found.");
return Array.Empty<Sprite>();
return new[] { defaultSprite };
}
// 检查文件路径是否存在
if (!packageDict.TryGetValue(filePath, out var pathDict))
{
Debug.LogWarning($"File path '{filePath}' not found in package '{packageName}'.");
return Array.Empty<Sprite>();
return new[] { defaultSprite };
}
// 收集所有匹配的Sprite

View File

@ -0,0 +1,63 @@
using System.Collections.Generic;
using Prefab;
using UnityEngine;
using UnityEngine.Events;
namespace Managers
{
public class RightMenuManager:Utils.MonoSingleton<RightMenuManager>
{
[SerializeField]
private GameObject _canvas;
[SerializeField]
private RightMenuPrefab _rightMenuPrefab;
public GameObject Canvas
{
get
{
if (_canvas == null)
{
_canvas = GameObject.Find("Canvas"); // 根据你的实际场景修改查找条件
if (_canvas == null)
{
Debug.LogError("RightMenu Canvas not found in scene!");
}
}
return _canvas;
}
}
public RightMenuPrefab RightMenuPrefab
{
get
{
if (_rightMenuPrefab == null)
{
_rightMenuPrefab = Resources.Load<RightMenuPrefab>("Prefab/RightMenu");
if (_rightMenuPrefab == null)
{
Debug.LogError("RightMenuPrefab not found in Resources!");
}
}
return _rightMenuPrefab;
}
}
public static void GenerateRightMenu(List<(string name, UnityAction callback)> buttons,Vector3 position)
{
var rightMenuObj = Instantiate(RightMenuManager.Instance.RightMenuPrefab.gameObject,
RightMenuManager.Instance.Canvas.transform);
var rightMenu=rightMenuObj.GetComponent<RightMenuPrefab>();
rightMenu.Init(buttons);
rightMenu.transform.position = position;
rightMenu.Show();
}
protected override void OnStart()
{
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 409b8017bbd6443eb2dde17ea6fd5e29
timeCreated: 1755526878