当前位置:网站首页>unity实战之lol技能释放范围
unity实战之lol技能释放范围
2022-06-24 18:58:00 【华为云】
前言
最近英雄联盟手游开启不删档测试,对于忠实的lol玩家来说,又激起了我对手游的兴趣。赶紧趁着开服,果断删掉所有手游,清理一波内存,开启我的手游版lol体验。(没办法手机内存太小了)。果断跳过新手教程开始匹配赛,终于到达10级了,又赶紧体验了几把排位赛,虽然体验后觉得端游更胜一筹,但是就凭手游方便的特点,我依然把它保留在了手机了。
激烈的混战中,出现如下画面:
本队小姐姐一个接一个的送人头,这时候暴躁哥出现了,开始一顿狂bibi。
小姐姐也很无奈:她的手太长了,为什么我就打不到他~。
攻击范围定义
作为一个lol忠实粉丝and游戏开发者来,我必须来为大家分析一下攻击范围:顾名思义,攻击范围就是释放技能后,会对进入这个范围的敌方单位造成伤害一定英雄,包括伤害,眩晕等。
那么我方释放了一个技能,该技能存在一个攻击范围,如何判断敌方是否在该范围内受到影响?
矩形攻击范围

向正前方释放一个技能,当攻击范围为一个矩形(a,b)时,判断敌方是否受到伤害,需满足三个条件
(1)敌方位于我放方正前方
(2)敌方位于a长度内
(3)敌方位于b宽度内
游戏中场景转换成如下示意图:
翻译成数学语言:
(1)两向量点积>0
(2)在a上的投影<a
(3)在b上的投影<b
(1)点积判断
Vector3 forward = hero_a.forward;Vector3 direction = hero_b.position - hero_a.position;float dot = Vector3.Dot(forward,direction);if (dot >0){}(2)水平方向投影判断
float horizontal = Vector3.Project(direction, hero_a.right).magnitude;//水平方向投影if (horizontal <= length/2){}(3)垂直方向投影判断
float vertical = Vector3.Project(direction, hero_a.forward).magnitude;//垂直方向投影if (vertical <= width){}(4)绘制攻击范围
private void OnDrawGizmos() { Handles.color = isShow ? Color.cyan : Color.red; Vector3 cornerA = hero_a.position + Vector3.left * width * .5f; Vector3 cornerB = hero_a.position + Vector3.right * width * .5f; Vector3 cornerC = cornerB + Vector3.forward * length; Vector3 cornerD = cornerA + Vector3.forward * length; Handles.DrawLine(cornerA, cornerB); Handles.DrawLine(cornerB, cornerC); Handles.DrawLine(cornerC, cornerD); Handles.DrawLine(cornerD, cornerA); }
完整脚本:
using UnityEngine;using UnityEditor;public class SkillRang : MonoBehaviour{ public float length = 1f;//矩形长 public float width = 1f;//矩形宽 private bool isShow = false;//是否处于攻击范围 private Transform hero_a;//我方英雄 private Transform hero_b;//敌方英雄 // Start is called before the first frame update void Start() { hero_a = GameObject.Find("hero_a").transform; hero_b = GameObject.Find("hero_b").transform; } // Update is called once per frame void Update() { RectRang(); } private void RectRang() { //方形区域 Vector3 forward = hero_a.forward; Vector3 direction = hero_b.position - hero_a.position; float dot = Vector3.Dot(forward,direction); if (dot >0) { //在前方 float vertical = Vector3.Project(direction, hero_a.forward).magnitude;//垂直方向投影 float horizontal = Vector3.Project(direction, hero_a.right).magnitude;//水平方向投影 if (vertical <= width && horizontal <= length/2) { isShow = true; return; } } isShow = false; } private void OnDrawGizmos() { Handles.color = isShow ? Color.cyan : Color.red; Vector3 cornerA = hero_a.position + Vector3.left * length * .5f; Vector3 cornerB = hero_a.position + Vector3.right * length * .5f; Vector3 cornerC = cornerB + Vector3.forward * width; Vector3 cornerD = cornerA + Vector3.forward * width; Handles.DrawLine(cornerA, cornerB); Handles.DrawLine(cornerB, cornerC); Handles.DrawLine(cornerC, cornerD); Handles.DrawLine(cornerD, cornerA); }}圆形攻击范围

释放一个技能,当攻击范围为一个矩形(半径为r)时,判断敌方是否受到伤害,需满足一个条件:
(1)敌人处在一个圆内或者圆上。该圆是以释放技能处未圆心,r为半径的圆。
游戏中场景转换成如下示意图:
翻译成数学语言:
(1)
假设攻击范围半径为radius
(1)距离计算
Vector3 pos_a = hero_a.position;Vector3 pos_b = hero_b.position;float distence = Mathf.Sqrt((pos_a.x-pos_b.x)*(pos_a.x-pos_b.x)+(pos_a.y-pos_b.y)*(pos_a.y-pos_b.y));(2)距离判断
if (distence <= radius){}(3)绘制攻击范围
private void OnDrawGizmos(){ Handles.color = isShow ? Color.cyan : Color.red; Handles.CircleHandleCap(0,hero_a.position,hero_a.rotation * Quaternion.LookRotation(Vector3.up),radius,EventType.Repaint); }
完整脚本:
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEditor;public class SkillRang : MonoBehaviour{ public float radius = 1f;//圆形半径 private bool isShow = false;//是否处于攻击范围 private Transform hero_a;//我方英雄 private Transform hero_b;//敌方英雄 // Start is called before the first frame update void Start() { hero_a = GameObject.Find("hero_a").transform; hero_b = GameObject.Find("hero_b").transform; } // Update is called once per frame void Update() { CricleRang(); } private void CricleRang() { // 圆形区域 Vector3 pos_a = hero_a.position; Vector3 pos_b = hero_b.position; float distence = Mathf.Sqrt((pos_a.x-pos_b.x)*(pos_a.x-pos_b.x)+(pos_a.y-pos_b.y)*(pos_a.y-pos_b.y)); if (distence <= radius) { isShow = true; } else { isShow = false; } } private void OnDrawGizmos() { Handles.color = isShow ? Color.cyan : Color.red; Handles.CircleHandleCap(0,hero_a.position,hero_a.rotation * Quaternion.LookRotation(Vector3.up),radius,EventType.Repaint); }}工程源码:https://gitee.com/shirln/skill-rang
注意:本文参考自https://blog.csdn.net/qq_42139931/article/details/120712908
边栏推荐
- Power supply noise analysis
- JVM tuning
- What about the Golden Angel of thunder one? Golden Angel mission details
- Oracle create tablespaces and tables
- The efficiency of okcc call center data operation
- Unity mobile game performance optimization spectrum CPU time-consuming optimization divided by engine modules
- IBPS开源表单设计器有什么功能?
- three. Basic framework created by JS
- Starring develops httpjson access point + Database
- Generate the last login user account report of the computer through SCCM SQL
猜你喜欢

Power supply noise analysis

LCD12864 (ST7565P) Chinese character display (STM32F103)

物联网?快来看 Arduino 上云啦

Volcano becomes spark default batch scheduler
![[video tutorial] functions that need to be turned off in win10 system. How to turn off the privacy option in win10 computer](/img/14/0313857adc178ecee4c866a05e54aa.jpg)
[video tutorial] functions that need to be turned off in win10 system. How to turn off the privacy option in win10 computer

Zadig + cave Iast: let safety dissolve in continuous delivery

Mq-2 smoke concentration sensor (STM32F103)

Two solutions to the problem of 0xv0000225 unable to start the computer

技术实现 | Apache Doris 冷热数据存储(一)

Download steps of STM32 firmware library
随机推荐
Huawei machine learning service speech recognition function enables applications to paint "sound" and color
R for Data Science (notes) -- data transformation (used by filter)
Network security review office starts network security review on HowNet
The cdc+mysql connector joins the date and time field from the dimension table by +8:00. Could you tell me which one is hosted by Alibaba cloud
Why is the executor thread pool framework introduced
How to use R package ggtreeextra to draw evolution tree
请教一个问题。adbhi支持保留一个ID最新100条数据库,类似这样的操作吗
Real time rendering: the difference between real-time, offline, cloud rendering and hybrid rendering
mysql binlog 数据源配置文档麻烦分享一下
MySQL binlog data source configuration document, please share
Intel and Microsoft give full play to the potential energy of edge cloud collaboration to promote the large-scale deployment of AI
数字孪生行业案例:智慧港口数字化
一次 MySQL 误操作导致的事故,高可用都不顶不住!
敏捷之道 | 敏捷开发真的过时了么?
Xiaobai, let me ask you guys, is MySQL binlog extracted by CDC in strict order
Experience of MDM master data project implementation for manufacturing projects
Where are Xiaomi mobile phone's favorite SMS and how to delete them
Will the CDC read out of order when I use SQL
Openstack actual installation and deployment tutorial, openstack installation tutorial
Buddha bless you that there will never be a bug