UGUI架构的应用案例——选择英雄界面
效果展示
描述
通过右边的英雄选择列表,将对应的英雄置于镜头前面,并更新英雄介绍。
步骤
- 每个英雄有两个模型,一个位于尽头远点,默认显示并播放Idle动画,一个位于镜头前方,默认隐藏显示时播放hit动画
- 选择英雄界面为三个单选按钮,每个单选按钮与两个英雄模型关联,在点击时间中进行处理,对应模型的隐藏和显示
- UIInfo初始化时调用PhotoManager从后台取英雄介绍数据并缓存
- UIInfo注册UISenceWidget的PointerClick事件,每当按钮进行点击更新对应英雄的介绍面板
目录结构
组件情况
UI_CharacterSelection->UIInfo
UIScene_Bottom->UIScene
UIScene_SelectHero->UIScene
UIScene_HeroInfo->UIScene
togHero1->UISceneWidget
togHero2->UISceneWidget
togHero3->UISceneWidget
实现
1.创建英雄近点和远点(目前只有两个英雄),并挂上对应角色模型
2.单选按钮与角色模型对应,并实现按钮选中后对应模型的显示和隐藏
[RequireComponent(typeof(Toggle))]
public class UIToggleObject : MonoBehaviour {
public GameObject Show;
public GameObject Hide;
void Awake()
{
GetComponent<Toggle>().onValueChanged.AddListener(OnSelectChanged);
}
private void OnSelectChanged(bool isChecked)
{
Show.SetActive(isChecked);
Hide.SetActive(!isChecked);
}
}
3.英雄信息的读取和缓存
表结构
两个字段一个ID一个描述
服务端修改
ALI.ARPG.Operations
构造Entity
[Serializable]
public class HeroEntity : IEntityIntKey
{
public virtual int ID { get; set; }
public virtual string Desc { get; set; }
}
由于后面代码需要,对服务端架构做了调整,对Entity做了接口约束,这里把IntKey单独抽取出来是为了扩展以后主键不是int类型的实体,如GUID
public interface IEntity
{
}
public interface IEntityIntKey : IEntity
{
int ID { get; set; }
}
增加一个OperationCode
public enum OperationCode : byte
{
Register,
Login,
GetHeroInfo
}
ALI.ARPG.Data
设置Entity与数据库的映射及构造Hero对应的Repository
public class HeroMap: ClassMap<HeroEntity>
{
public HeroMap()
{
Table("heroinfo");
Id(x => x.ID).Column("id");
Map(x =