游戏地址


玩法说明

- WASD 控制角色移动
- 按下J键 进入攻击模式(WASD 可以继续移动)

更新内容

- 完成角色锁定目标后边移动边攻击

开发心得


状态机的设计

最初的设计很乱, 每个状态的切入切出都是靠一个Boolean值控制的, 比如 isRun,isAttack,isSkillAttack 等等.
当由A状态切换到B状态时候, 需要将除了控制A状态的Boolean都设置为False,仅将A状态设置为True.

参考了一些视频教程,发现用一个int值做这种互斥的设计会非常好,并且可以灵活的运用 Entry 和 Exit State. 将状态机设计的更清晰
同时 使用Sub-State 将Idel和Run放在下一层, 整体更加整洁.
并且对于后期增加或减少新的状态 很方便. 总之好处多多吧. 

 
 

脚部动画制作

脚部动画使用的是2D的BlendTree, 用两个参数(垂直和水平) 去控制腿部使用哪个动画
当角色正好向前看时候, 可以直接将input的Vertical和Horizontal 值作为BlendTree的参数传入即可
但是当角色需要面向方块时候, Input传入的值是世界坐标(黄色箭头), 需要把这个值转换到角色的局部坐标系下(红色坐标).从而算出 水平和垂直方向的 分量来.
 

将问题数学化,且改变为一个方便计算的样式

o点为角色所在位置,红色圆圈为单位圆.
角色朝向方块,与单位圆相交的一点为A,
玩家只是右移键,所以世界坐标系下移动方向和单位圆相交一点为B
向量A'O 为 移动方向在 角色局部坐标系下 Z轴方向投影,
向量BA' 为 移动方向在 角色局部坐标系下 X轴方向投影,

对于向量A'O的 求解 可以简化为 : 求某向量A 在向量B上的投影, 具体的数学公式 可参照 这个帖子
而一旦求解出A'O 以后 对于BA'的求解 就变得简单了 BA' = BO-A'O  (向量的加减法)

因为已经是单位向量了, 所以直接将结果作为BlendTree的参数 传入即可.

 



Infinite V2 Release Note的更多相关文章

  1. Infinite V1 Release Note

      游戏地址 PLAY 玩法说明 WASD 控制角色移动 更新内容 - 初步完成了角色移动(攻击状态) 开发心得 独立做游戏 其实最耽误时间的就是在自己的短板上, 对于我来说 就是3D建模和动作制作. ...

  2. Paddle Release Note

    Paddle Release Note 重要更新 飞桨paddle框架2.0.0版本有如下重要更新: 编程范式:默认开启动态图模式进行模型开发和训练,通过动转静的方式进行模型部署和训练加速.如果需要使 ...

  3. glibc 2.x release note

    glibc 2.x release note,参见: https://sourceware.org/glibc/wiki/Glibc%20Timeline https://www.gnu.org/so ...

  4. RocketMQ Release Note(RocketMQ升级日志译文)

    RocketMQ升级日志 1 4.2.0 原版Release Note 1.1 New Feature 支持传输层安全性 客户端支持log4j2 PushConsumer支持条数与大小维度的流控 1. ...

  5. chromedriver release note

    ----------ChromeDriver v2.25 (2016-10-25)---------- Supports Chrome v53-55 Resolved issue 1547: Chro ...

  6. cocos2dx release note

    [传送门] 发布说明: https://github.com/fusijie/Cocos2dx-ReleaseNote-zh/blob/master/SUMMARY.md 更新记录: https:// ...

  7. 【转载】MySQL5.6.27 Release Note解读(innodb及复制模块)

    新功能   问题描述(Bug #18871046, Bug #72811): 主要为了解决一个比较“古老”的MySQL在NUMA架构下的“swap insanity”问题,其表现为尽管为InnoDB ...

  8. Django 2.0 Release note阅读简记

    最前面就是大家都知道的这个版本开始只支持py3.4+,而且下一个大版本就不支持3.4,再就是建议所有插件开始放弃1.11 1.最惊艳的变化,就是URL配置正则表达式的简化,旧的: url(r'^art ...

  9. Django 1.11 release note简明解读

    1.首先1.11这个版本是一个LTS版本 2.第一个支持python3.6的版本,最后一个支持python2.*的版本 3.Deprecating warnings 默认不再显示,同时建议第三方包开始 ...

随机推荐

  1. 【BZOJ2318】Spoj4060 game with probability Problem 概率

    [BZOJ2318]Spoj4060 game with probability Problem Description Alice和Bob在玩一个游戏.有n个石子在这里,Alice和Bob轮流投掷硬 ...

  2. CF #375 (Div. 2) D. bfs

    1.CF #375 (Div. 2)  D. Lakes in Berland 2.总结:麻烦的bfs,但其实很水.. 3.题意:n*m的陆地与水泽,水泽在边界表示连通海洋.最后要剩k个湖,总要填掉多 ...

  3. MongoDB-权限配置

    启动 Mongo\bin\mongo.exe1.添加>use admin #切换到MongoDB数据库的用户表>db.addUser("Name","Pass ...

  4. ZeroMQ接口函数之 :zmq_msg_copy - 把一个消息的内容复制到另一个消息中

    ZeroMQ 官方地址 :http://api.zeromq.org/4-1:zmq_msg_copy zmq_msg_copy(3)   ØMQ Manual - ØMQ/3.2.5 Name zm ...

  5. About_PHP_文件的上传

    在form表单中,我们上传文件用的是:<input type="file" name="fileUpload" />,当然,光是这样是不行的. 我们 ...

  6. UI--UIPickerView和UIDatePicker的总结

    回到顶部 UIPickerView的主要方法和城市选择器的修正 UIPickerView只有两个数据源方法.要想完整地显示出PickerView,需要结合使用代理方法 数据源方法: // 一共有多少组 ...

  7. synchronized的实现原理和应用

    在多线程并发编程中synchronized是元老级的角色,人多称重量级锁. synchronized实现同步的基础:Java中的每一个对象都可以作为锁.具体表现有如下3种: 1.对于普通同步方法,锁时 ...

  8. 多线程相关------信号量Semaphore

    Semaphore用于对资源进行计数.允许一定数量的线程同时访问该资源.可以用于进程间同步 相关函数 CreateSemaphore 创建或打开一个信号量对象 HANDLE WINAPI Create ...

  9. springboot+druid

    最近项目需要搭建新工程,打算使用微服务的形式搭建便于后期拓展.看了一圈发现springboot易于搭建,配置简单,强化注解功能,"just run". Spring Boot ma ...

  10. mysql快速导出数据库ER图和数据字典(附navicat11安装教程及资源)

    ♣ mysql使用navicat11快速导出数据库ER图 ♣ mysql使用navicat11快速导出数据库数据字典 ♣ navicat11 for mysql (这里是mysql5.7.12)专业版 ...