From cabf567390009125aa2ebad7a84552914dd86b48 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=CE=A9?= <3291875824@qq.com>
Date: Sat, 14 Jun 2025 02:59:23 +0800
Subject: [PATCH] =?UTF-8?q?=E9=98=9F=E4=BC=8D=E8=A7=92=E8=89=B2=E6=B7=BB?=
=?UTF-8?q?=E5=8A=A0=E3=80=81=E5=BF=AB=E9=80=9F=E6=9B=B4=E6=8D=A2=E6=96=B0?=
=?UTF-8?q?=E4=BD=8D=E7=BD=AE=E5=AE=8C=E5=96=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Assets/Scenes/Songs_Select.unity | 62 +++++++++++-
.../prefab/chacterCard.prefab | 60 +++++++++++-
Assets/scripts/Team/CharacterCardView.cs | 23 +++++
Assets/scripts/Team/TeamManager.cs | 95 ++++++++++++++++---
Assets/scripts/Team/teamCharacterView.cs | 13 ++-
Assets/scripts/Team/teamSettingPanel.cs | 35 ++++---
6 files changed, 261 insertions(+), 27 deletions(-)
diff --git a/Assets/Scenes/Songs_Select.unity b/Assets/Scenes/Songs_Select.unity
index 104a8428..b8b0b787 100644
--- a/Assets/Scenes/Songs_Select.unity
+++ b/Assets/Scenes/Songs_Select.unity
@@ -4176,6 +4176,18 @@ MonoBehaviour:
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
+ - m_Target: {fileID: 1221530203}
+ m_TargetAssemblyTypeName: teamCharacterView, Assembly-CSharp
+ m_MethodName: ResetTeamCharacter
+ m_Mode: 1
+ m_Arguments:
+ m_ObjectArgument: {fileID: 0}
+ m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+ m_IntArgument: 0
+ m_FloatArgument: 0
+ m_StringArgument:
+ m_BoolArgument: 0
+ m_CallState: 2
--- !u!1 &495389257
GameObject:
m_ObjectHideFlags: 0
@@ -5259,6 +5271,18 @@ MonoBehaviour:
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
+ - m_Target: {fileID: 826634049}
+ m_TargetAssemblyTypeName: teamCharacterView, Assembly-CSharp
+ m_MethodName: ResetTeamCharacter
+ m_Mode: 1
+ m_Arguments:
+ m_ObjectArgument: {fileID: 0}
+ m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+ m_IntArgument: 0
+ m_FloatArgument: 0
+ m_StringArgument:
+ m_BoolArgument: 0
+ m_CallState: 2
--- !u!1 &587893952
GameObject:
m_ObjectHideFlags: 0
@@ -12637,6 +12661,18 @@ MonoBehaviour:
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
+ - m_Target: {fileID: 973852809}
+ m_TargetAssemblyTypeName: teamCharacterView, Assembly-CSharp
+ m_MethodName: ResetTeamCharacter
+ m_Mode: 1
+ m_Arguments:
+ m_ObjectArgument: {fileID: 0}
+ m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+ m_IntArgument: 0
+ m_FloatArgument: 0
+ m_StringArgument:
+ m_BoolArgument: 0
+ m_CallState: 2
--- !u!1 &1235967462
GameObject:
m_ObjectHideFlags: 0
@@ -15193,7 +15229,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
teamSettingPanelInstance: {fileID: 16906201}
currentSelectedTeam: 0
- currentSelectedCharacter: -1
+ currentSelectedTeamCharacter: -1
--- !u!4 &1593528874
Transform:
m_ObjectHideFlags: 0
@@ -17697,6 +17733,18 @@ MonoBehaviour:
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
+ - m_Target: {fileID: 847674721}
+ m_TargetAssemblyTypeName: teamCharacterView, Assembly-CSharp
+ m_MethodName: ResetTeamCharacter
+ m_Mode: 1
+ m_Arguments:
+ m_ObjectArgument: {fileID: 0}
+ m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+ m_IntArgument: 0
+ m_FloatArgument: 0
+ m_StringArgument:
+ m_BoolArgument: 0
+ m_CallState: 2
--- !u!1 &1805718607
GameObject:
m_ObjectHideFlags: 0
@@ -19538,6 +19586,18 @@ MonoBehaviour:
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
+ - m_Target: {fileID: 1712599091}
+ m_TargetAssemblyTypeName: teamCharacterView, Assembly-CSharp
+ m_MethodName: ResetTeamCharacter
+ m_Mode: 1
+ m_Arguments:
+ m_ObjectArgument: {fileID: 0}
+ m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+ m_IntArgument: 0
+ m_FloatArgument: 0
+ m_StringArgument:
+ m_BoolArgument: 0
+ m_CallState: 2
--- !u!1 &1975772328
GameObject:
m_ObjectHideFlags: 0
diff --git a/Assets/artworks/Songs_Select/team_SettingResource/prefab/chacterCard.prefab b/Assets/artworks/Songs_Select/team_SettingResource/prefab/chacterCard.prefab
index 83a4bd6f..0a96bb41 100644
--- a/Assets/artworks/Songs_Select/team_SettingResource/prefab/chacterCard.prefab
+++ b/Assets/artworks/Songs_Select/team_SettingResource/prefab/chacterCard.prefab
@@ -11,6 +11,7 @@ GameObject:
- component: {fileID: 6315701630504864621}
- component: {fileID: 757764593157214466}
- component: {fileID: 1068789348870044308}
+ - component: {fileID: 6566757192153613853}
m_Layer: 5
m_Name: characterImage
m_TagString: Untagged
@@ -58,7 +59,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
- m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_Color: {r: 1, g: 1, b: 1, a: 0.9647059}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
@@ -75,6 +76,62 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
+--- !u!114 &6566757192153613853
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 38698292104120276}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 3
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+ m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_SelectedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_SelectedTrigger: Selected
+ m_DisabledTrigger: Disabled
+ m_Interactable: 1
+ m_TargetGraphic: {fileID: 0}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls:
+ - m_Target: {fileID: 8280925871269614134}
+ m_TargetAssemblyTypeName: CharacterCardView, Assembly-CSharp
+ m_MethodName: beSelected
+ m_Mode: 1
+ m_Arguments:
+ m_ObjectArgument: {fileID: 0}
+ m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+ m_IntArgument: 0
+ m_FloatArgument: 0
+ m_StringArgument:
+ m_BoolArgument: 0
+ m_CallState: 2
--- !u!1 &227430959558785920
GameObject:
m_ObjectHideFlags: 0
@@ -203,6 +260,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
characterID: 0
+ currentBoundaryLevel:
charactCard: {fileID: 2949374534111508497}
characterImage: {fileID: 1068789348870044308}
levelIcon: {fileID: 2921092759260112579}
diff --git a/Assets/scripts/Team/CharacterCardView.cs b/Assets/scripts/Team/CharacterCardView.cs
index fd489b33..8755e2ab 100644
--- a/Assets/scripts/Team/CharacterCardView.cs
+++ b/Assets/scripts/Team/CharacterCardView.cs
@@ -6,15 +6,38 @@ using UnityEngine.UI;
public class CharacterCardView : MonoBehaviour
{
public int characterID;
+ public string currentBoundaryLevel;
public GameObject charactCard;
public Image characterImage;
public Image levelIcon;
public Image occupationIcon;
+ public bool isSelected=false;
void Start()
{
charactCard=gameObject;
}
+ ///
+ /// 未在队中的卡点击后进入被操纵状态。若在队伍中默认进入已经入队状态
+ ///
+ public void beSelected()
+ {
+ if (!isSelected)
+ {
+ isSelected = true;
+ TeamManager.Instance.currentSelectedCharacterCard = new CharacterView(characterID, currentBoundaryLevel);
+ characterImage.color = new Color(0.5f, 0.5f, 0.5f,1);
+ }
+ else beUnSelected();
+ }
+
+ public void beUnSelected()
+ {
+ //还需要走TeamManager去掉此角色的队列信息
+ isSelected = false;
+ TeamManager.Instance.removeTeamCharacter(characterID);
+ characterImage.color = new Color(1f, 1f, 1f,1);
+ }
}
diff --git a/Assets/scripts/Team/TeamManager.cs b/Assets/scripts/Team/TeamManager.cs
index e8b075b7..aa3ed013 100644
--- a/Assets/scripts/Team/TeamManager.cs
+++ b/Assets/scripts/Team/TeamManager.cs
@@ -3,6 +3,7 @@ using System.Collections;
using System.Collections.Generic;
using Unity.Collections;
using UnityEngine;
+using UnityEngine.Serialization;
public class TeamManager : MonoBehaviour
{
@@ -24,7 +25,11 @@ public class TeamManager : MonoBehaviour
///
/// 记录被选中的编队中角色的索引,用于处理队列位置交换的逻辑。-1表示无角色被选中
///
- public int currentSelectedCharacter = -1;
+ public int currentSelectedTeamCharacter = -1;
+ ///
+ /// 标记要被放入编队的角色
+ ///
+ public CharacterView currentSelectedCharacterCard = null;
///
/// 在修改被选中的编队中角色的索引时触发
///
@@ -50,8 +55,6 @@ public class TeamManager : MonoBehaviour
{
SelectableCharacterList.Add(new CharacterView(1001001,"C"));
SelectableCharacterList.Add(new CharacterView(1001002,"S"));
- SelectableCharacterList.Add(new CharacterView(1001001,"C"));
- SelectableCharacterList.Add(new CharacterView(1001002,"C"));
//手动向currentTeamSettings和SelectableCharacterList添加测试数据
currentTeamSettings.Add(0,new TeamSetting(new List(),1001001));
@@ -59,7 +62,7 @@ public class TeamManager : MonoBehaviour
currentTeamSettings[0].teamIdList.Add(new CharacterView(1001002,"S"));
currentTeamSettings[0].teamIdList.Add(new CharacterView(1001001,"C"));
currentTeamSettings[0].teamIdList.Add( new CharacterView(1001002,"C"));
- currentTeamSettings[0].teamIdList.Add(new CharacterView(-1,null));
+ currentTeamSettings[0].teamIdList.Add(new CharacterView(0,null));
currentTeamSettings.Add(1,new TeamSetting(new List(),1001002));
currentTeamSettings[1].teamIdList.Add(new CharacterView(1001001,"C"));
@@ -67,9 +70,20 @@ public class TeamManager : MonoBehaviour
currentTeamSettings[1].teamIdList.Add(new CharacterView(1001001,"C"));
currentTeamSettings[1].teamIdList.Add( new CharacterView(1001002,"A"));
currentTeamSettings[1].teamIdList.Add(new CharacterView(1001002,"A"));
-
+ //在当前版本中,就算是空队伍也要用如下填满,请等待数据结构的重构
currentTeamSettings.Add(2,new TeamSetting(new List(),-1));
+ currentTeamSettings[2].teamIdList.Add(new CharacterView(0,null));
+ currentTeamSettings[2].teamIdList.Add(new CharacterView(0,null));
+ currentTeamSettings[2].teamIdList.Add(new CharacterView(0,null));
+ currentTeamSettings[2].teamIdList.Add( new CharacterView(0,null));
+ currentTeamSettings[2].teamIdList.Add(new CharacterView(0,null));
+
currentTeamSettings.Add(3,new TeamSetting(new List(),-1));
+ currentTeamSettings[3].teamIdList.Add(new CharacterView(0,null));
+ currentTeamSettings[3].teamIdList.Add(new CharacterView(0,null));
+ currentTeamSettings[3].teamIdList.Add(new CharacterView(0,null));
+ currentTeamSettings[3].teamIdList.Add( new CharacterView(0,null));
+ currentTeamSettings[3].teamIdList.Add(new CharacterView(0,null));
Debug.Log("testTeamSetting ready");
@@ -94,6 +108,10 @@ public class TeamManager : MonoBehaviour
// }
testTeamSetting();//接入玩家存档后请注释掉此行
}
+ void saveTeamSetting()
+ {
+ //todo:我想,在接存档系统的时候这个会有用。
+ }
///
/// 读取玩家存档信息后可直接在此写入编队信息
///
@@ -117,10 +135,10 @@ public class TeamManager : MonoBehaviour
}
public void setCurrentSelectedCharacterInTeam(int characterIndex)
{
- if (characterIndex != currentSelectedCharacter)
+ if (characterIndex != currentSelectedTeamCharacter)
{
- Debug.Log($"修改选中对象从{currentSelectedCharacter}到{characterIndex}");
- currentSelectedCharacter = characterIndex;
+ Debug.Log($"修改选中对象从{currentSelectedTeamCharacter}到{characterIndex}");
+ currentSelectedTeamCharacter = characterIndex;
OnSelectedCharacterChanged?.Invoke(); // 触发事件
}
}
@@ -148,13 +166,68 @@ public class TeamManager : MonoBehaviour
currentTeamSettings[currentSelectedTeam].teamIdList = newCurrentTeam;
teamSettingPanelInstance.updateTeamSettingElements();
setCurrentSelectedCharacterInTeam(secondIndex);
- Debug.Log($"swapTeamElements done,当前选中的为{getCurrentSelectedTeam().teamIdList[currentSelectedCharacter].characterId},开始位置是{firstIndex},目标位置是{secondIndex},现在{currentSelectedCharacter}");
}
- public void setTeamLeader(int characterIndex)
+ public void setTeamLeader(int characterID)
{
- getCurrentSelectedTeam().LeaderId = SelectableCharacterList[characterIndex].characterId;
+ Debug.Log($"{characterID},{SelectableCharacterList.Count}");
+ currentTeamSettings[currentSelectedTeam].LeaderId=characterID;
teamSettingPanelInstance.updateTeamSettingElements();
}
+ ///
+ /// 填入或者覆盖队伍指定位置的信息
+ ///
+ ///
+ public void ResetTeamCharacter (int aimListIndex)
+ {
+ //如果在队伍中已有角色的情况下再次触发此方法,首先要去掉旧信息,再放新信息
+ CharacterView newCharacter = currentSelectedCharacterCard;
+ List newCurrentTeam = getCurrentSelectedTeam().teamIdList;
+
+ if (aimListIndex > 0 || aimListIndex < newCurrentTeam.Count)
+ {
+ for(int i=0;i
+ /// 移除队伍中的指定角色
+ ///
+ ///
+ public void removeTeamCharacter(int characterId)
+ {
+ currentSelectedCharacterCard = null;
+ List newCurrentTeam = getCurrentSelectedTeam().teamIdList;
+ foreach (CharacterView character in newCurrentTeam)
+ {
+ if (character.characterId == characterId)
+ {
+ character.characterId = 0;
+ character.currentBoundaryLevel = null;
+ }
+ }
+ currentTeamSettings[currentSelectedTeam].teamIdList = newCurrentTeam;
+ teamSettingPanelInstance.updateTeamSettingElements();
+ }
+
}
diff --git a/Assets/scripts/Team/teamCharacterView.cs b/Assets/scripts/Team/teamCharacterView.cs
index b268fee9..93157451 100644
--- a/Assets/scripts/Team/teamCharacterView.cs
+++ b/Assets/scripts/Team/teamCharacterView.cs
@@ -43,7 +43,7 @@ public class teamCharacterView : MonoBehaviour
{
isSelected = false;
controlButton.SetActive(false);
- if(TeamManager.Instance.currentSelectedCharacter==this.listIndex)
+ if(TeamManager.Instance.currentSelectedTeamCharacter==this.listIndex)
TeamManager.Instance.setCurrentSelectedCharacterInTeam(-1);
}
///
@@ -67,9 +67,18 @@ public class teamCharacterView : MonoBehaviour
}
public void setLeader()
{
- TeamManager.Instance.setTeamLeader(this.listIndex);
+ if(characterID==0){return;}
+ TeamManager.Instance.setTeamLeader(this.characterID);
isLeader.SetActive(true);
notLeader.SetActive(false);
}
+
+ public void ResetTeamCharacter()
+ {
+ if (TeamManager.Instance.currentSelectedCharacterCard != null)
+ {
+ TeamManager.Instance.ResetTeamCharacter(this.listIndex);
+ }
+ }
}
diff --git a/Assets/scripts/Team/teamSettingPanel.cs b/Assets/scripts/Team/teamSettingPanel.cs
index 79dbfb54..46cfdacb 100644
--- a/Assets/scripts/Team/teamSettingPanel.cs
+++ b/Assets/scripts/Team/teamSettingPanel.cs
@@ -65,6 +65,7 @@ public class teamSettingPanel : MonoBehaviour
teamManager.OnSelectedTeamChanged += updateTeamSettingSelectedStatus;
teamManager.OnSelectedTeamChanged += updateTeamSettingElements;
+ teamManager.OnSelectedTeamChanged += updateSelectableCharacterViewList;
}
updateTeamSettingElements();
updateSelectableCharacterViewList();
@@ -79,6 +80,7 @@ public class teamSettingPanel : MonoBehaviour
teamManager.OnSelectedTeamChanged -= updateTeamSettingSelectedStatus;
teamManager.OnSelectedTeamChanged -= updateTeamSettingElements;
+ teamManager.OnSelectedTeamChanged -= updateSelectableCharacterViewList;
}
}
///
@@ -156,11 +158,6 @@ public class teamSettingPanel : MonoBehaviour
{
TeamSetting currentSelectedTeam = teamManager.getCurrentSelectedTeam();
List currentTeam = currentSelectedTeam.teamIdList;
- // if(currentTeam==null||currentTeam.Count==0)
- // {
- // clearTeamSettingElements();
- // return;
- // }
clearTeamSettingElements();
for (int i = 0; i < teamElementsObj.Length && i < currentTeam.Count; i++)
{
@@ -192,7 +189,6 @@ public class teamSettingPanel : MonoBehaviour
if(currentSelectedTeam.LeaderId==currentTeam[i].characterId)
{
- Debug.Log($"当前队长为{currentTeam[i].characterId} {currentTeam[i].currentBoundaryLevel},存档信息为{currentSelectedTeam.LeaderId}");
t.isLeader.SetActive(true);
t.notLeader.SetActive(false);
}
@@ -214,6 +210,9 @@ public class teamSettingPanel : MonoBehaviour
{
Destroy(child.gameObject);
}
+
+ teamManager.currentSelectedCharacterCard = null;
+ List currentTeam = teamManager.getCurrentSelectedTeam().teamIdList;
List selectAbleCharacters = teamManager.SelectableCharacterList;
foreach (CharacterView c in selectAbleCharacters) //id and level
{
@@ -223,19 +222,34 @@ public class teamSettingPanel : MonoBehaviour
if (ccv != null&& tcdi!=null)
{
ccv.characterID = tcdi.CharacterID;
+ ccv.currentBoundaryLevel= c.currentBoundaryLevel;
ccv.characterImage.sprite =tcdi.CharacterCardSprite;
ccv.levelIcon.sprite = getLevelSprite(c.currentBoundaryLevel);
ccv.occupationIcon.sprite = tcdi.CharacterRoleSprite;
}
+
+ if (checkExistenceStatus(currentTeam, ccv.characterID))
+ {
+ ccv.isSelected = true;
+ ccv.characterImage.color = new Color(0.5f, 0.5f, 0.5f,1);
+ }
}
}
+ private bool checkExistenceStatus(List currentTeam,int characterID)
+ {
+ foreach (CharacterView c in currentTeam)
+ {
+ if (c.characterId == characterID)
+ return true;
+ }
+ return false;
+ }
///
/// 用于保证team内对象的选中状态一致
///
public void updateTeamCharacterSelectedStatus()
{
- int currentSelectedCharacter = teamManager.currentSelectedCharacter;
- Debug.Log($"当前选择为{currentSelectedCharacter}");
+ int currentSelectedCharacter = teamManager.currentSelectedTeamCharacter;
for (int i = 0; i < teamElementsObj.Length; i++)
{
if (i != currentSelectedCharacter)
@@ -291,10 +305,7 @@ public class teamSettingPanel : MonoBehaviour
}
}
- ///
- /// 若玩家更换了team成员或调整了team成员顺序,则使用此方法更新view
- ///
- public void updateTeamStatus()
+ public void updateCharacter()
{
}