游戏地址


玩法说明

- 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. CodeForces 13E 分块

    题目链接:http://codeforces.com/problemset/problem/13/E 题意:给定n个弹簧和每个弹簧初始的弹力a[].当球落在第i个位置.则球会被弹到i+a[i]的位置. ...

  2. Spring--通过注解来配置bean【转】

    Spring通过注解配置bean 基于注解配置bean 基于注解来配置bean的属性在classpath中扫描组件 组件扫描(component scanning):Spring能够从classpat ...

  3. XML序列化及反序列化

    //对象序列化xml OutModel outmodel = new OutModel(); XmlSerializer serializer = new XmlSerializer(typeof(O ...

  4. CocoaPods安装和使用

    CocoaPods是iOS最常用的第三方类库管理工具,绝大部分有名的开源类库都支持CocoaPods. CocoaPods是用Ruby实现的,要想使用它首先需要有Ruby的环境.幸运的是OS X系统默 ...

  5. CodeForces 520B Two Buttons(用BFS)

     Two Buttons time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  6. 2016-2017 ACM-ICPC, NEERC, Northern Subregional Contest

    A. Anniversary Cake 随便挑两个点切掉就好了. #include<bits/stdc++.h> using namespace std; const int Maxn=2 ...

  7. Python for Infomatics 第12章 网络编程三(译)

    注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 12.5 HTML分析和网页抓取 ...

  8. Leetcode Simplify Path

    Given an absolute path for a file (Unix-style), simplify it. For example,path = "/home/", ...

  9. 【Scala】尾递归优化

    以递归方式思考 递归通过灵巧的函数定义,告诉计算机做什么.在函数式编程中,随处可见递归思想的运用.下面给出几个递归函数的例子: object RecursiveExample extends App{ ...

  10. iOS CoreAnimation 核心动画

    一 介绍 一组非常强大的动画处理API 直接作用在CALAyer上,并非UIView(UIView动画) CoreAnimation是所有动画的父类,但是不能直接使用,应该使用其子类 属性: dura ...