当前位置: 首页 > news >正文

做旅行义工网站蚁沪尚茗居全包价格

做旅行义工网站蚁,沪尚茗居全包价格,app定制开发公司选择,wap手机网站 作用精确获取碰撞点 核心是获取武器碰撞盒最顶点#xff0c;然后获取敌人碰撞盒距离该点最近的点 /// summary/// 获取获取武器前端位置 碰撞盒最左或最右顶点/// /summary/// param namecollider/param/// param name…精确获取碰撞点 核心是获取武器碰撞盒最顶点然后获取敌人碰撞盒距离该点最近的点 /// summary/// 获取获取武器前端位置 碰撞盒最左或最右顶点/// /summary/// param namecollider/param/// param namefacingRight/param/// returns/returnspublic static Vector3 GetCollider2DEdgePoint(Transform deployer, bool facingRight){var collider deployer.GetChild(0).GetComponentInChildrenCapsuleCollider2D();// 获取碰撞器的包围盒Bounds bounds collider.bounds;// 计算面向的方向向量右或左Vector2 attackDirection facingRight ? Vector2.right : Vector2.left;// 根据面向方向和碰撞器的边界来获取边缘点Vector3 edgePoint bounds.center (Vector3)(attackDirection * bounds.extents.x);// 如果需要在局部空间中获取边缘点需要将世界坐标转换为局部坐标// edgePoint deployer.InverseTransformPoint(edgePoint);return edgePoint;}//使用public void CreateHit(Collider2D other, CharacterStats target, bool isCrit false)Vector3 edgePoint Tool.GetCollider2DEdgePoint(transform, Entity.facingRight);var hitPosition other.ClosestPoint(edgePoint);1. 给攻击帧添加碰撞盒 优点配置直观无需事件触发 缺点无法定制效率低 检测放在子物体可以控制旋转 添加触发器事件 注意OnTriggerEnter2D只会在挂载了collider的组件上触发 protected virtual void OnTriggerEnter2D(Collider2D other){Debug.Log(this.name 命中 other);entity.AttackTrigger(other);} 在角色脚本执行攻击检测 public override void AttackTrigger(Collider2D other){if (other.gameObject.layer LayerMask.NameToLayer(Enemy)){base.AttackTrigger(other);AttackColliderCheckEnemy(other, (enemy) enemy.BeDamage(stats));}}2. 为每个攻击动画状态使用射线检测 优点效率高于碰撞盒可以定制比如增加攻击范围 缺点配置麻烦不直观 部分代码仅供参考 定义每个动画的检测范围 [Header(攻击状态对应的碰撞盒)]public DictionaryEntity.States, AttackRanges attackRangeDict new();//索引是攻击的状态 连击数获取对应攻击的范围 [System.Serializable] public class AttackRanges {/// summary/// 对应的连击次数 作为索引/// /summarypublic AttackRange[] ranges new AttackRange[1];//索引器public AttackRange this[int index]{get{// return ranges.FirstOrDefault(x x.combo index);//如果没有默认用第一个if (index ranges.Length)return ranges[0];return ranges[index];}} }[System.Serializable] public class AttackRange {public SerializableVector2 offset new();public SerializableVector2 size new();public float rotation 0;public UnityEngine.Vector2 Offset offset.ToVector2();public UnityEngine.Vector2 Size size.ToVector2(); }添加帧事件 private void AttackTrigger(){entity.AttackTrigger();}执行检测与绘制范围 /// summary/// 攻击检测/// /summary/// typeparam nameT/typeparam/// param nameaction/paramprotected void AttackColliderCheckT(ActionT action) where T : Entity{AttackRange attackRange stats.attackRangeDict[States.PrimaryAttack][ComboCounter];var offset facingRight ? attackRange.offset.ToVector2() : new Vector2(-attackRange.offset.x, attackRange.offset.y);var rotation facingRight ? attackRange.rotation : -attackRange.rotation;Collider2D[] colliders Physics2D.OverlapBoxAll(offset, attackRange.size.ToVector2(), rotation);foreach (Collider2D hit in colliders){if (hit.TryGetComponentT(out T entity)){action?.Invoke(entity);}}}// 默认情况下就会在编辑模式下运行protected virtual void OnDrawGizmos(){// Vector3 boxCenter groundCheck.position Vector3.down * groundCheckDistance / 2;// Gizmos.DrawCube(boxCenter, new Vector3(groundCheckWidth, groundCheckDistance, 0));Gizmos.DrawLine(groundCheck.position, new Vector3(groundCheck.position.x, groundCheck.position.y - groundCheckDistance));//绘制一条从 from(前面的) 开始到 to后面的 的线。Gizmos.DrawLine(wallCheck.position, new Vector3(wallCheck.position.x wallCheckDistance, wallCheck.position.y));//绘制一条从 from(前面的) 开始到 to后面的 的线。if (stats null) return;Gizmos.color Color.red;var attackRange stats.attackRangeDict.ContainsKey(States.PrimaryAttack) ? stats.attackRangeDict?[States.PrimaryAttack]?[ComboCounter] : new AttackRange();Vector3 center (Vector3)attackRange.Offset;// 设置 Gizmos 的变换矩阵Matrix4x4 oldMatrix Gizmos.matrix;Gizmos.matrix Matrix4x4.TRS(center, Quaternion.Euler(0, 0, attackRange.rotation), Vector3.one);Gizmos.DrawWireCube(transform.position (Vector3)attackRange.Offset, (Vector3)attackRange.Size);// 恢复原来的矩阵Gizmos.matrix oldMatrix;}3. 所有动画共用一个射线检测 优点简单 缺点不精确 在帧事件触发调用检测方法即可 /// summary/// 攻击检测/// /summary/// typeparam nameT/typeparam/// param nameaction/paramprotected void AttackColliderCheckT(ActionT action) where T : Entity{Collider2D[] colliders Physics2D.OverlapCircleAll(attackCheck.position, attckCheckRadius);foreach (Collider2D hit in colliders){if (hit.TryGetComponentT(out T entity)){action?.Invoke(entity);}}}
http://www.hkea.cn/news/14486872/

相关文章:

  • 哪些网站做推广好高端品牌优势
  • 自己做的网站跳转到购彩大厅做网站时的尺寸
  • 防护网施工方案湖南网站搜索排名优化公司
  • 手机网站设计公司立找亿企邦池州有哪些做网站的
  • 自己做网站需要几个软件龙岗区住房和建设局官方网站
  • p2p网站如何做推广响应式所长网址导航网页模板下载
  • 网站怎么建立视频陕西网站建设排名
  • 艾瑞网的网站架构中国龙岩网
  • 叫外包公司做网站不肯给源代码的专业企业网站设计服务公司
  • 苏州网站建设需要多少钱网站建设优化服务信息
  • 网站建设实训总结300wordpress app 登录
  • 网站内链是什么 怎么做河南省工程建设协会网站
  • 手机网站开发服务商西安网站开发公司有哪家
  • 购物网站开发的意义和目的手机软件怎么做
  • vr全景网站怎么做建网站如何添加会员模式
  • 响应式网站和自适应一次性筷子网站建设
  • 陕西华伟建设有限公司网站wordpress 插件 定时
  • 建设网站宽度最好是多少钱广州口碑好的网站建设设计
  • 网站收录查询平台抖音代运营退款成功案例
  • 小说网站建设方案书ppt学广告设计要学什么软件
  • 邯郸做网站服务商公司网站建设有哪些公司可以做
  • 商城网站方案wordpress会员多语言
  • 上海网站建设最好的公司北京手机软件开发公司
  • 学术会议网站建设自己做的网站怎么上网
  • 网站的原理知名市场调研公司
  • 四川省住房和城乡建设厅网站电话网站如何做京东联盟
  • 杭州职称评审系统网站深圳教育科技网站建设
  • php 网站建设 教学用jsp做的汽车网站
  • 聊城企业网站建设魔兽做宏网站
  • 站群cms网站系统10个著名摄影网站