一段代码之仿LOL移动方式
创建个动画
public Animator anim;
设置位置目标
private Vector3 target;
判定是否移动
private bool m_IsOver = true;
//封装目标位置
private bool isOver
{
get
{
return m_IsOver;
}
set
{
m_IsOver = value;
TargetGo.SetActive(!m_IsOver);
TargetGo.transform.position = target;
}
}
封装是否攻击
private bool m_attckOver = true;
private bool attckOver
{
get
{
return m_attckOver;
}
set
{
m_attckOver = value;
MagicGo.SetActive(!m_attckOver);
}
}
设置移动的速度
public float PlayerSpeed;
设置技能的速度
public float MagicSpeed;
鼠标点击位置生成的物体
public GameObject TargetGo;
技能物体
public GameObject MagicGo;
void Update()
{
如果按下W键
if (Input.GetKeyDown(KeyCode.W))
{
播放攻击动画
Attack();
生成攻击特效物体
GetMousePos();
}
如果按下左键
if (Input.GetMouseButtonDown(0))
{
获取射线的方法识别鼠标的位置
GetMousePos();
静止状态取消
isOver = false;
播放跑步动画
anim.SetBool("run", true);
攻击动画取消
attckOver = true;
}
}
获取鼠标位置让人物移动过去的方法
private void GetMousePos()
{
摄像机的射线照等于鼠标的位置
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
计算出方向
RaycastHit hitInfo = new RaycastHit();
射线的方向判定
if (Physics.Raycast(ray, out hitInfo))
{
如果射线点击的名字是plane面板
if (hitInfo.collider.name == "Plane")
{
位置等于射线的位置
target = hitInfo.point;
y左边为0
target.y = 0;
人物看向位置
transform.LookAt(target);
}
}
}
void FixedUpdate()
{
人物移动到位置
MoveTo(target);
}
攻击方法
private void Attack()
{播放攻击动画
anim.SetTrigger("attack");
技能物体的位置等于人物的位置
MagicGo.transform.position = transform.position;
开启移动
isOver = true;
取消播放动画
attckOver = false;
}
移动方法
private void MoveTo(Vector3 tar)
{
如果不是静止
if (!isOver)
{
人物的距离位置
Vector3 offSet = tar - transform.position;
位置相加
transform.position += offSet.normalized * PlayerSpeed * Time.deltaTime;
如果距离小于0.5
if (Vector3.Distance(tar, transform.position) < 0.5f)
{
播放跑步动画
anim.SetBool("run", false);
开启运动
isOver = true;
位置为鼠标的位置
transform.position = tar;
}
}
如果开始攻击
if (!attckOver)
{
距离等于鼠标位置减去技能的位置
Vector3 offSet = tar - MagicGo.transform.position;
实现技能的位置移动
MagicGo.transform.position += offSet.normalized * MagicSpeed * Time.deltaTime;
如果鼠标和技能之间的间距小于0.5
if (Vector3.Distance(tar, MagicGo.transform.position) < 0.5f)
{
攻击结束
attckOver = true;
技能位置等于鼠标位置
MagicGo.transform.position = tar;
}
}
}
}
一段代码之仿LOL移动方式相关推荐
- 调试一段代码两个小时都没搞定,继续死磕还是寻找其他方式?
hi-好久不见,在家办公的你们还好吗? 听闻有人克服着网络不好.工作环境嘈杂的困难,已经连续待机 20 几个小时了.没办法,疫情当前,这点困难不算啥,该克服的还是要克服.实在不行,试试番茄工作法,提高 ...
- php整段代码注释,PHP标准注释|单行注释|多行注释|规则方式
任何一门编程语言都有编程注释,注释的作用可以调试,可以描述代码的作用等等,说说那么PHP三种注释的方式 1, // 这是单行注释 2,# 这也是单行注释 3,/* */多行注释块 /* 这是多行注释块 ...
- 如何精确测量一段代码的执行时间
最近在工作中遇到了需要精确测量一段C代码执行时间的需求,大家给出的方案有以下三种: gettimeofday(2) rdtsc/rdtscp clock_gettime(2) 下面我们就逐一介绍下这三 ...
- 干货 | 收藏!16段代码入门Python循环语句
(图片付费下载于视觉中国) 作者 | 李明江 张良均 周东平 张尚佳,本文摘编自<Python3智能数据分析快速入门> 来源 | 大数据(ID:hzdashuju) [导读]本文将重点讲述 ...
- 值得收藏!16段代码入门Python循环语句
来源:大数据 本文约6000字,建议阅读10分钟. 本文重点讲述for语句和while语句. [ 导读 ]本文重点讲述for语句和while语句.for语句属于遍历循环,while语句属于当型循环.除 ...
- 假设写一段代码引导PC开机这段代码是 ? Here is a tiny quot;OSquot; :-D
Hello world -- OS 我找到了华科绍志远博士的相关代码,发现他依据MIT的JOS的boot.S 稍作改动.然后单独剥离出来,能够非常好玩~ 资料下载地址: http://download ...
- 查看某段代码或语句的被调用路径的方法小结
在看代码时,难免想要知道它是最开始在哪里被调用至此的,或者本段代码是否会被调用.但是由于程序比较复现,各种宏定义,导致很难通直接阅读的方式确认它的被调用路径.平时个人比较喜欢用以下几种方法来确认其调用 ...
- 程序员写了段代码,自称完美! 网友: 我现在还在改你的Bug
现在的互联网技术在飞速进步着,加之有一些程序员确实是喜欢编程,长久如此,很多程序员的技术也得到了一个质的飞跃,于是都想写出一个堪称没有Bug的代码! 这不,近日又有一位程序员发帖称: 可以看到,这是一 ...
- 「递归」第5集 | 从网瘾少年到极客大神:没有什么是一段代码解决不了的
我们为什么叫「递归」 "递归" (recursion) 是一种在程序设计语言中被广泛使用的算法.它有两大特点,一是调用自己,二是化繁为简.我们当中那些优秀的技术人又何尝不是如此?他 ...
最新文章
- myeclipse-pro-2014-GA-offline-installer-windows 安装步骤 与安装效果预览
- 百度云使用第三方工具下载文件
- xshell 安装yum_Xshell上面简单安装docker
- 没有读过的书,就不要瞎推荐了!
- MapReduce不同进度的Reduce都在干什么?
- vi 多窗口同步滚动--适用于人工文件比较
- 用ABC三个字母简洁归纳2018年物联网趋势
- html语言笔记,HTML/HTML5 笔记
- MySQL详细知识点总结 可以收藏啦
- python教程 马哥_马哥python从入门到精通,资源教程下载
- 实用供热空调设计手册_暖通空调设计与施工数据图表手册
- linux ubi 分区,Linux ubi子系统原理分析
- 智齿客服网页端接入文档V2.3
- 多模态知识问答:MMCoQA: Conversational Question Answering over Text, Tables, and Images
- Alexa, Stop Spying on Me!“: Speech Privacy Protection Against Voice Assistants
- Leetcode| 216. 组合总和III、17. 电话号码的字母组合 Day25
- “七彩”糖果-吕中琪
- 关于SCO Unix 串口通讯
- Oracle数据库配置管理(一)
- Java银行管理系统
热门文章
- [Introduction to programming in Java 笔记] 1.3.8 Gambler's ruin simulation 赌徒破产模拟
- java 龟兔赛跑_Java实现多线程模拟龟兔赛跑
- VSCode RemoteSSH 过程试图写入的管道不存在问题 解决
- 【Mysql】根据经纬度远近排序
- 陀螺仪的进动及其数学描述
- 为什么SEM竞价推广效果越来越差?
- PPT画图如何保存600dpi以及消除白边问题
- java 根据拼音查询汉字_java根据拼音搜索,但数据库为汉字的解决方案
- word2vec和bert的基本使用方法
- 生鲜配送ERP系统_对商品模块数据模型与界面设计的思考【Java 开源版】杭州生鲜配送系统_升鲜宝_SaaS全链路生鲜供应链管理系统_升鲜宝