HonorLee 1 年之前
父节点
当前提交
7c4815a958
共有 3 个文件被更改,包括 176 次插入25 次删除
  1. 8 2
      CGTool/Anime.cs
  2. 29 1
      CGTool/AnimePlayer.cs
  3. 139 22
      README.md

+ 8 - 2
CGTool/Anime.cs

@@ -89,9 +89,10 @@ namespace CGTool
             {DirectionType.NorthWest,DirectionType.NULL,DirectionType.SouthEast},
             {DirectionType.NorthWest,DirectionType.NULL,DirectionType.SouthEast},
             {DirectionType.West,DirectionType.SouthWest,DirectionType.South}
             {DirectionType.West,DirectionType.SouthWest,DirectionType.South}
         };
         };
-        //动作(未补全)
+        //动作
         public enum ActionType
         public enum ActionType
         {
         {
+            NULL=-1,
             Stand=0,
             Stand=0,
             Walk=1,
             Walk=1,
             BeforeRun=2,
             BeforeRun=2,
@@ -108,7 +109,12 @@ namespace CGTool
             Happy=13,
             Happy=13,
             Angry=14,
             Angry=14,
             Sad=15,
             Sad=15,
-            Shock=16,
+            Shake=16,
+            Rock=17,
+            Scissors=18,
+            Paper=19,
+            Fishing=20,
+            
         }
         }
         //动效
         //动效
         public enum EffectType
         public enum EffectType

+ 29 - 1
CGTool/AnimePlayer.cs

@@ -9,6 +9,7 @@
  */
  */
 
 
 using System.Collections.Generic;
 using System.Collections.Generic;
+using FT;
 using UnityEngine;
 using UnityEngine;
 using UnityEngine.UI;
 using UnityEngine.UI;
 
 
@@ -128,6 +129,11 @@ namespace CGTool
             //碰撞盒,仅当需要添加鼠标事件时使用
             //碰撞盒,仅当需要添加鼠标事件时使用
             _boxCollider2D = GetComponent<BoxCollider2D>();
             _boxCollider2D = GetComponent<BoxCollider2D>();
             
             
+            if(_imageRenderer == null) _imageRenderer = gameObject.AddComponent<Image>();
+            if(_spriteRenderer == null) _spriteRenderer = gameObject.AddComponent<SpriteRenderer>();
+            if(_rectTransform == null) _rectTransform = gameObject.AddComponent<RectTransform>();
+            // if(_boxCollider2D == null) _boxCollider2D = gameObject.AddComponent<BoxCollider2D>();
+            
         }
         }
 
 
         private void Start()
         private void Start()
@@ -207,7 +213,7 @@ namespace CGTool
          * @param Serial 动画序列号
          * @param Serial 动画序列号
          * @param Direction 动画方向
          * @param Direction 动画方向
          * @param ActionType 动画动作
          * @param ActionType 动画动作
-         * @param Infinity 是否循环
+         * @param PlayType 播放类型
          * @param Speed 播放速度,以 1s 为基准,根据动画帧率计算实际播放周期时长
          * @param Speed 播放速度,以 1s 为基准,根据动画帧率计算实际播放周期时长
          * @param onFinishCallback 动画结束回调
          * @param onFinishCallback 动画结束回调
          * @return AnimePlayer
          * @return AnimePlayer
@@ -267,6 +273,17 @@ namespace CGTool
                 _currentAnime.playType, _currentAnime.Speed, _currentAnime.onFinishCallback);
                 _currentAnime.playType, _currentAnime.Speed, _currentAnime.onFinishCallback);
             _play(_currentAnime);
             _play(_currentAnime);
         }
         }
+        public Anime.DirectionType DirectionType
+        {
+            get => _currentAnime?.Direction ?? Anime.DirectionType.NULL;
+            set
+            {
+                if (_currentAnime != null)
+                {
+                    changeDirection(value);
+                }
+            }
+        }
         
         
         //调整动画动作类型
         //调整动画动作类型
         public void changeActionType(Anime.ActionType actionType)
         public void changeActionType(Anime.ActionType actionType)
@@ -276,6 +293,17 @@ namespace CGTool
                 _currentAnime.playType, _currentAnime.Speed, _currentAnime.onFinishCallback);
                 _currentAnime.playType, _currentAnime.Speed, _currentAnime.onFinishCallback);
             _play(_currentAnime);
             _play(_currentAnime);
         }
         }
+        public Anime.ActionType ActionType
+        {
+            get => _currentAnime?.actionType ?? Anime.ActionType.NULL;
+            set
+            {
+                if (_currentAnime != null)
+                {
+                    changeActionType(value);
+                }
+            }
+        }
 
 
         //播放
         //播放
         private void _play(AnimeOption animeOption)
         private void _play(AnimeOption animeOption)

+ 139 - 22
README.md

@@ -18,65 +18,174 @@
 
 
 克隆当前仓库或下载zip包解压,将CGTool文件夹放置于Unity项目文件夹内引用
 克隆当前仓库或下载zip包解压,将CGTool文件夹放置于Unity项目文件夹内引用
 
 
+
+下文示例中,所涉及到的版本号均对应:
+
+```0``` 龙之沙漏前版本
+
+```1``` 龙之沙漏
+
+所涉及的所有index、serial均指代图档或动画的具体编号而非索引档中序号
+
+其他相关部分会逐渐更新完善
+
 ### 框架初始化
 ### 框架初始化
 在入口或初始化脚本头部引入CGTool初始化文件
 在入口或初始化脚本头部引入CGTool初始化文件
 ```csharp
 ```csharp
 using CGTool;
 using CGTool;
 ```
 ```
-并在关键位置对CGTool进行初始化
+并在相关初始化位置对CGTool进行初始化
 ```csharp
 ```csharp
 CGTool.CGTool.Init();
 CGTool.CGTool.Init();
 ```
 ```
 CGTool初始化时,会自动对相关索引Info文件进行解析,请根据实际所采用版本情况,对脚本代码中解析相关的文件名称进行修改调整
 CGTool初始化时,会自动对相关索引Info文件进行解析,请根据实际所采用版本情况,对脚本代码中解析相关的文件名称进行修改调整
 
 
-### 获取图档索引数据
+
+### 获取图档索引数据(图档基本索引数据属性信息)
 ```csharp
 ```csharp
-//通过地面编号获取GraphicInfo数据
+// 通过编号获取图档,无需版本号(推荐方法)
+GraphicInfo.GetGraphicInfoDataBySerial(uint Serial);
+
+// 通过编号获取图档,带版本号
+GraphicInfo.GetGraphicInfoDataBySerial(int version, uint Serial);
+
+// 通过地面编号获取GraphicInfo数据
 GraphicInfo.GetGraphicInfoDataByMapSerial(int Version, uint MapSerial);
 GraphicInfo.GetGraphicInfoDataByMapSerial(int Version, uint MapSerial);
-//通过索引获取GraphicInfo数据
+
+// 通过索引获取GraphicInfo数据
 GraphicInfo.GetGraphicInfoDataByIndex(int Version, uint Index);
 GraphicInfo.GetGraphicInfoDataByIndex(int Version, uint Index);
 ```
 ```
 
 
-### 获取指定索引图档数据
+### 获取指定索引图档数据(图档实际数据,包含图像Sprite资源)
 ```csharp
 ```csharp
-//通过图档索引编号获取GraphicData数据
+// 通过图档索引编号获取GraphicData数据
 Graphic.GetGraphicData(GraphicInfoData graphicInfoData,int PaletIndex=0);
 Graphic.GetGraphicData(GraphicInfoData graphicInfoData,int PaletIndex=0);
+
+/**
+ * 使用说明:
+ * 所有通过Graphic获取的图档Sprite均已做偏移处理,可直接使用
+ * 需自行判断图档是否存在,并处理图档不存在的情况
+ * 1.获取指定编号的图档索引信息
+ * 2.根据获取到的索引取得图档数据
+ * 3.使用图档数据中的Sprite资源进行绘制
+ */
+
+GraphicInfoData graphicInfoData = GraphicInfo.GetGraphicInfoDataBySerial(Serial);
+GraphicData graphicData = Graphic.GetGraphicData(graphicInfoData);
+SpriteRenderer(Image).sprite = graphicData.Sprite;
+```
+
+### 获取地图地面图档合批图档数据
+```csharp
+/**
+ * 针对地面数据将地面图档自动进行拼合成一个或多个2048*2048尺寸Texture2D
+ * 并将拼合后的Texture2D数据拆分为对应的Sprite资源
+ * 这样可以大幅降低地面图档的内存占用和Drawcall数量,提高渲染的动态合批性能
+ * 另:
+ * 代码中暂时禁用了已合并地面Texture2D的缓存功能,如需使用请取消相关代码注释或自行修改
+ * 由于4.0后地图模式变动,所以这个方法可能不适用于4.0后的地图
+ */
+Dictionary<int, GraphicData> MapGroundSerialDic =
+    Graphic.PrepareMapGroundTexture(
+        int MapID,
+        int PaletIndex,
+        List<GraphicInfoData> graphicInfoDataList
+    ); 
 ```
 ```
 
 
 ### 获取并播放动画数据
 ### 获取并播放动画数据
 ```csharp
 ```csharp
 /**
 /**
 * 动画播放器,用于播放CG动画,支持多动画队列播放
 * 动画播放器,用于播放CG动画,支持多动画队列播放
-* 脚本需绑定至挂载了SpriteRenderer和RectTransform的对象上
-* 除此之外,还需绑定BoxCollider2D(可选),用于监听鼠标的移入移出事件
+* 1.4更新后已无需手动挂载SpriteRenderer、Image组件,程序会自动处理
+* 只需将AnimePlayer挂载到任意GameObject上即可,可手动指定渲染方式是否以Image组件渲染
+*
+* 动画解析Anime类中包含以下多个枚举预设:
+* DirectionType 方向类型,含8个不同方向
+* ActionType    动作类型,含20个不同动作
+* EffectType    动作效果,含Hit和HitOver两种判定
+* PlayType      播放类型,含Loop、Once、OnceAndDestory三种类型
 *
 *
 * 当动画播放完成后会自动调用onFinishCallback回调函数
 * 当动画播放完成后会自动调用onFinishCallback回调函数
-* 另外可指定onActionListener和onAudioListener监听动画动作帧和音频帧
+* 另外可指定onActionListener和onAudioListener监听动画动作帧和音频帧相关判定
 * 目前已知的动作帧有:
 * 目前已知的动作帧有:
-* 击中 20000
-* 伤害结算 10000
+* 击中 Hit (未结束攻击动作,如小石像、黄蜂、绿螳螂等单次攻击动作中有多次击中效果)
+* 伤害结算 HitOver
 */
 */
 
 
+AnimePlayer player = GetComponent<AnimePlayer>();
+
 /**
 /**
 * 播放动画,调用此方法将会清空当前播放队列,调用完成可通过链式调用nextPlay方法添加动画到播放队列
 * 播放动画,调用此方法将会清空当前播放队列,调用完成可通过链式调用nextPlay方法添加动画到播放队列
-* @param Serial 动画序列号
-* @param Direction 动画方向
+* @param Serial     动画序列号
+* @param Direction  动画方向
 * @param ActionType 动画动作
 * @param ActionType 动画动作
-* @param Infinity 是否循环
-* @param Speed 播放速度,以 1s 为基准,根据动画帧率计算实际播放周期时长
+* @param PlayType   播放类型
+* @param Speed      播放速度倍率,以 1s 为单位基准,根据动画帧率计算实际播放周期时长
 * @param onFinishCallback 动画结束回调
 * @param onFinishCallback 动画结束回调
 * @return AnimePlayer
 * @return AnimePlayer
 */
 */
-AnimePlayer player.play(uint AnimeSerial, Anime.DirectionType.North, Anime.ActionType.Stand, true,0.1f,AnimeCallback onFinishCallback=null);
 
 
-//设置帧动效反馈监听
-AnimePlayer player.onEffectListener = effect => { };
+player.play(
+    uint Serial,
+    Anime.DirectionType Direction = Anime.DirectionType.North,
+    Anime.ActionType actionType = Anime.ActionType.Stand,
+    Anime.PlayType playType = Anime.PlayType.Once,
+    float Speed = 1f,
+    AnimeCallback onFinishCallback = null
+);
+
+// 简化方式: 此方法大多数情况下用以播放特效动画,没有方向和动作类型
+player.play(
+    uint Serial,
+    Anime.PlayType playType,
+    float speed = 1f,
+    AnimeCallback onFinishCallback = null
+);
+
+// 播放一次
+player.playOnce(Anime.DirectionType directionType,Anime.ActionType actionType,float Speed=1f,AnimeCallback onFinishCallback=null);
+
+// 循环播放
+player.playLoop(Anime.DirectionType directionType,Anime.ActionType actionType,float Speed=1f,AnimeCallback onFinishCallback=null);
+
+/**
+ * 可通过setter方法设置动画
+ * 通过setter方法设置的动画将使用以下默认配置
+ * DirectionType = DirectionType.North
+ * ActionType = ActionType.Stand
+ * PlayType = PlayType.Loop
+ * Speed = 1f
+ */
+player.Serial = uint AnimeSerial;
+
+// 设置帧动效反馈监听
+player.onEffectListener = effect => {...};
+
+// 设置帧音效反馈监听
+player.onAudioListener = audioIndex => {...};
+
+// 链式调用添加动作队列
+player.play(...params).nextPlay(...params);
+
+// 动态修改动画所用的调色板索引
+player.PaletIndex = int PaletIndex;
 
 
-//设置帧音效反馈监听
-AnimePlayer player.onAudioListener = audioIndex => { };
+// 动态修改动画播放类型
+player.PlayType = Anime.PlayType;
+
+// 动态调整当前动画方向
+player.DirectionType = Anime.DirectionType;
+
+// 动态调整当前动画动作
+player.ActionType = Anime.ActionType;
+
+// 动画帧延时,动态修改当前动画,延长每帧之间的时间间隔(此方法定义有歧义,后续更新调整)
+player.DelayPlay(float delayTime)
+
+// 停止动画
+player.Stop();
 
 
-//链式调用添加动作队列
-AnimePlayer player.play(...params).nextPlay(...params);
 ```
 ```
 
 
 ### 其他
 ### 其他
@@ -99,6 +208,14 @@ AnimePlayer player.play(...params).nextPlay(...params);
 
 
 
 
 ## 4、更新日志
 ## 4、更新日志
+### v 1.3
+> `UPD` 优化AnimePlayer组件的挂载和使用方式
+> 
+> `UPD` 优化AnimePlayer动画播放器,增加动画相关处理方法
+>
+> `UPD` 更新README说明文档,增加、调整使用说明
+> 
+
 ### v 1.2
 ### v 1.2
 
 
 > `FIX` 修正文件加载时判断为正则,避免因使用不同版本bin导致加载报错问题
 > `FIX` 修正文件加载时判断为正则,避免因使用不同版本bin导致加载报错问题