Unity实现杀戮尖塔出牌效果(一.扇形开牌)
创始人
2024-12-16 07:07:00
0

最终效果展示

主要步骤

一. 扇形开牌

二. 鼠标指向卡牌时,卡牌强调动画

①卡牌高度提升
②卡牌旋转归零
③卡牌层级高于其他手牌

三. 卡牌使用效果

1. 攻击类型卡牌

①拖拽超过一定高度之后卡牌会移动到手牌中心位置
②出现攻击引导箭头
③成功指向目标怪物后打出

2. 技能能力类型卡牌

①可自由拖动
②脱离手牌高度后打出

四. 卡牌使用结束效果

1. 播放攻击特效

2. 播放卡牌收尾特效

①卡牌从当前位置移动到中心位置
②卡牌居中悬停展示几毫秒
③播放回归弃牌堆动画

代码详解

一. 扇形开牌

在这里插入图片描述

核心代码

public class CardItem : MonoBehaviour   {       ///        /// 卡牌扇形展开中心点       ///        public Vector3 root;       ///        /// 展开角度       ///        public float rot;       ///        /// 展开半径       ///        public float size;       ///        /// 动画速度       ///        public float animSpeed = 10;       ///        /// 高度值(决定卡牌层级)       ///        public float zPos=0;             public  void RefreshData(Vector3 root,float rot, float size,float zPos)       {                 this.root = root;           this.rot = rot;           this.size = size;           this.zPos = -zPos*0.02f;       }       // Update is called once per frame       void Update()       {                 SetPos();       }       public void SetPos()       {                 //设置卡牌位置           float x = root.x + Mathf.Cos(rot) * size;           float y = root.y + Mathf.Sin(rot) * size;           transform.position = Vector3.Lerp(transform.position, new Vector3(x, y, root.z+this.zPos), Time.deltaTime * animSpeed);           //设置卡牌角度           float rotZ = GetAngleInDegrees(root, transform.position);           Vector3 localEulerAngles = transform.localEulerAngles;           Quaternion rotationQuaternion = Quaternion.Euler(new Vector3(0, 0, rotZ));           transform.rotation = Quaternion.RotateTowards(transform.rotation, rotationQuaternion, Time.deltaTime * animSpeed * 30);       }         ///        /// 获取两个向量之间的弧度值0-2π       ///     /// 点A坐标       /// 点B坐标       ///          public static float GetAngleInDegrees(Vector3 positionA, Vector3 positionB)       {                 // 计算从A指向B的向量           Vector3 direction = positionB - positionA;           // 将向量标准化           Vector3 normalizedDirection = direction.normalized;           // 计算夹角的弧度值           float dotProduct = Vector3.Dot(normalizedDirection, Vector3.up);           float angleInRadians = Mathf.Acos(dotProduct);              //判断夹角的方向:通过计算一个参考向量与两个物体之间的叉乘,可以确定夹角是顺时针还是逆时针方向。这将帮助我们将夹角的范围扩展到0到360度。           Vector3 cross = Vector3.Cross(normalizedDirection, Vector3.up);           if (cross.z > 0)           {                        angleInRadians = 2 * Mathf.PI - angleInRadians;           }           // 将弧度值转换为角度值           float angleInDegrees = angleInRadians * Mathf.Rad2Deg;           return angleInDegrees;       }} 
public class CardManager : MonoBehaviour   {       ///        /// 卡牌起始位置       ///        public Vector3 rootPos=new Vector3(0,-33.5f,20);       ///        /// 卡牌对象       ///        public GameObject cardItem;       ///        /// 扇形半径       ///        public float size =30f;       ///        /// 卡牌出现最大位置       ///        private float minPos = 1.415f;       ///        /// 卡牌出现最小位置       ///        private float maxPos = 1.73f;       ///        /// 手牌列表       ///        private List cardList;       ///        /// 手牌位置       ///        private List rotPos;       ///        /// 最大手牌数量       ///        private int CardMaxCount=8;          void Start()       {        InitCard();       }    ///        /// 数据初始化       ///        public  void InitCard()       {             rotPos=InitRotPos(CardMaxCount);       }         ///        /// 初始化位置       ///        ///          ///          ///          public List InitRotPos(int count)       {                 List rotPos=new List();           float interval = (maxPos - minPos)/count;           for (int i = 0; i < count; i++)           {                         float nowPos = maxPos - interval * i;               rotPos.Add(nowPos);           }                 return rotPos;       }       // Update is called once per frame       void Update()       {                 TaskItemDetection();           RefereshCard();       }        ///        /// 添加卡牌       ///        public  void AddCard()       {                 if (cardList==null)           {                         cardList=new List();           }           if (cardList.Count>=CardMaxCount)           {                         Debug.Log("手牌数量上限");               return;           }                 GameObject item = Instantiate(cardItem,this.transform);           CardItem text=item.GetComponent();           text.RefreshData(rootPos,0,0,0);           cardList.Add(text);       }         ///        /// 手牌状态刷新       ///        public void RefereshCard()       {                 if (cardList==null)           {                        return;           }           for (int i = 0; i < cardList.Count; i++)           {             cardList[i].RefreshData(rootPos,rotPos[i],size,i);            }       }         ///        /// 销毁卡牌       ///        public  void RemoveCard()       {                 if (cardList==null)           {             return;           }           CardItem item = cardList[cardList.Count - 1];           cardList.Remove(item);           Destroy(item.gameObject);       }     	///        /// 销毁卡牌       ///        ///          public  void RemoveCard(CardItem item)       {                 if (cardList==null)           { 	        return;           }         cardList.Remove(item);           Destroy(item.gameObject);       }       private Vector3 oldmousePosition;                  ///        /// 玩家操作检测       ///        public void TaskItemDetection()       {               if (Input.GetKeyDown(KeyCode.A))           {                     AddCard();           }                }   } 

相关内容

热门资讯

绝活儿辅助!广东雀神智能插件是... 绝活儿辅助!广东雀神智能插件是真的(辅助挂)其实是有辅助软件(存在有挂)1、广东雀神智能插件是真的公...
绝活辅助!天天爱消除自动消除辅... 绝活辅助!天天爱消除自动消除辅助(辅助挂)一贯是有辅助工具(有挂透明挂);运天天爱消除自动消除辅助辅...
模块辅助!凑一桌关春天怎么才能... 模块辅助!凑一桌关春天怎么才能开挂(辅助挂)果然真的有辅助挂(有挂技术)1、凑一桌关春天怎么才能开挂...
模块辅助!聚友联盟辅助器(辅助... 模块辅助!聚友联盟辅助器(辅助挂)一直真的是有辅助器(证实有挂)1、起透看视 聚友联盟辅助器辅助软件...
指引辅助!途游小程序辅助器(辅... 指引辅助!途游小程序辅助器(辅助挂)果然确实有辅助神器(新版有挂)1、在途游小程序辅助器插件功能辅助...
阶段辅助!手机卡五星辅助软件(... 阶段辅助!手机卡五星辅助软件(辅助挂)确实是真的有辅助方法(确实有挂)1、手机卡五星辅助软件免费辅助...
手段辅助!芒果辅助器安卓版(辅... 手段辅助!芒果辅助器安卓版(辅助挂)原来真的有辅助脚本(有挂解惑)1、这是跨平台的芒果辅助器安卓版轻...
诀窍辅助!免费宝宝浙江游戏安装... 诀窍辅助!免费宝宝浙江游戏安装(辅助挂)竟然真的是有辅助攻略(有挂实锤)1、免费宝宝浙江游戏安装脚本...
办法辅助!透视盒子(辅助挂)一... 办法辅助!透视盒子(辅助挂)一贯是真的有辅助教程(有挂总结)透视盒子辅助器是一种具有地方特色的麻将游...
策略辅助!凑一桌游戏辅助(辅助... 策略辅助!凑一桌游戏辅助(辅助挂)本来真的有辅助插件(有挂技巧)1、点击下载安装,凑一桌游戏辅助脚本...