1.跑步功能

把run动画的Threshold改成2,这样到forward到2会自动跑步
下面我们用脚本调用这个动画 :
先在PI里加入下面的代码

    public string keyA;//按键操作public string keyB;public string keyC;public string keyD;public bool run;//是否要run
update里调用:run = Input.GetKey(keyA);

然后再ActorController里调用

 public float runMultiplier = 2.0f;update里:anim.SetFloat("forward",  pi.Dmag * (pi.run? 2.0f:1.0f));//完美和动画控制器的forward一致movingVec = pi.Dmag * model.transform.forward * walkSpeed*(pi.run? runMultiplier : 1.0f);//通过变量修改。

这节学到了,加run动画,用bool判定是否会run,这是个持续的过程,按keyA时会执行,在Update里 的setfloat加上(pi.run? 2.0f:1.0f) 就能完美与动画控制器对接,舒服,然后在movingVec里实现run加速的情况,并命名了一个ruMultiplier参数调速。

2.线性插值和球形线性插值

解决2个问题一个是转弯太唐突了(转弯就是球形插值Slerp),一个是从走逃跑太唐突了。

update下线性插值改变快速变2的情况anim.SetFloat("forward",  pi.Dmag *Mathf.Lerp(anim.GetFloat("forward"),targetRunMulti,0.5f));插值改变快速转向的情况if(pi.Dmag > 0.1f)//如果没有这个限制,转到其他方向松手它还是会自动转回0, 有这个限制条件就不会自动转回了。{Vector3 targetForward = Vector3.Slerp(model.transform.forward, pi.Dvec, 0.3f);//用这个插值使得转向有个30%的延迟model.transform.forward = targetForward;//方向就是存量X方向向量,这样你的转向就会朝向这个方向动}

3.椭圆映射法

https://arxiv.org/ftp/arxiv/papers/1509/1509.06344.pdf这里面有转换的数学方法。
PI:
用这个方法把DupDright的Y,X值改成圆形的X,Y值的方法
PI:
这样就好了。

4.一次性触发事件

做跳跃
PI:

我们只需要前面的绿色部分所以newJump == true就是那个限制条件。
学到了一次触发的方法。理解了其中的原理。

5.加入跳跃动画

添加跳跃动画到初始层
ActorController:
这边有个隐性问题,unity的trigger如果连续按多次,jump会叠加一次。

6.巧妙的重置控制器的触发。

在动画控制器下ground上创建一个脚本FSMClearSignals

控制器界面:
这样的话连续按2次jump的话,控制器就不会再储存一次了。

7.FSMOnEnter和FSMOnExit方法

这个脚本什么意思呢,这个脚本是挂在jump动画里的,意思是进入这个脚本后会开始发送一个信息给Animator组件的上级的gameobject里的脚本发一个信号msg,

就是OnJumpEnter信号,用PlayerHandle下的任意一个脚本做一个方法

public void OnJumpEnter(){print("onJumping!!!");}public void OnJumpExit(){print("我松开了jump  ");}

unity就会实现print的输出。
这样做的意义就是,当进入或者离开jump的状态时可以让脚本调用一些方法使它适合的跳跃,可以用脚本实时的控制动画的播放问题了。我们就可以解决角色在空中也可以跳可以转向的情况了。PS:sendmessage这个是可以优化的

8.锁死平面移动

如果执行这个,会导致Dmag,和Dvec=0,这样的话,

planarVec = pi.Dmag * model.transform.forward * walkSpeed * (pi.run ? runMultiplier : 1.0f);

在ActorController这个update方法下会一直重复调用这个方法每秒60次,那么planarVec就一定是持续不能动的一直是0,你就会发现人物被所在跳的那个位置执行动画,这时候如果加lockPlanar当你跳的时候不让它更新就可以了,就会顺其自然的跳了。很简单吧。

AC:

     private bool lockPlanar=false;//继续更新速度,ture时不更新了,就不会一直为0了if(lockPlanar ==false)//当为true时,锁死原来的planarVec的值不更新它。{planarVec = pi.Dmag * model.transform.forward * walkSpeed * (pi.run ? runMultiplier : 1.0f);}public void OnJumpEnter(){pi.inputEnabled = false;lockPlanar = true;}public void OnJumpExit(){pi.inputEnabled = true;lockPlanar = false;}

inputEnabled虽然在update里,但是他是一个条件句

重新思考了下

当你跳的时候,调用inputEnabled = false 这样会导致速度和方向全是为0 ,并且每秒更新60次,这样看到的结果就是原地播放动画,转向和速度都是0。
现在加一个lockPlanar来限制inputEnabled里的速度不要持续为0,就是让速度向量消失,这样就不会一直让他执行速度0的操作了,于是你会发现主角会有跳跃向前的速度,但是期间不能改变方向。

【傅老师DarkSouls第一季】02相关推荐

  1. 【傅老师DarkSouls第一季】03

    1.增加向上冲量 public float jumpVelocity = 5.0f;//写活Y值 private Vector3 thrustVec;//给动画一个向上的冲量update下rig.ve ...

  2. 【傅老师DarkSouls第一季】05

    1.攻击方面. 在Layer里添加attck层,做全身avtar mask  拉一个攻击动画,然后加上条件,你攻击时发现动画正常,但移动被滤掉了,不正常.当攻击的时候让突出的权重改为1,当攻击结束时把 ...

  3. 【傅老师DarkSouls第一季】04

    1.新增翻滚状态 很简单,添加一个roll动画,设置一个触发条件roll,当速度为0时会从fall到roll,并添加条件isground,消勾HET,但从roll到ground不能消勾,因为要播放完r ...

  4. 【傅老师DarkSouls第一季】01

    1.输入模块 //Variable public string keyUp;//这样会在检视面板显示也可以直接赋值 public string keyUp = "w";这样publ ...

  5. PHP自学笔记 ---李炎恢老师PHP第一季 TestGuest0.6

    1. Window opener 属性 Window 对象 定义和用法 opener 属性是一个可读可写的属性,可返回对创建该窗口的 Window 对象的引用. 当使用window.open()打开一 ...

  6. PHP自学笔记 ---李炎恢老师PHP第一季 TestGuest0.9/1.0 提交数据

    1.非法操作弹窗 //非法操作弹窗 function _alert_back($_info){ echo "<script type='text/javescript'> ale ...

  7. PHP自学笔记 ---李炎恢老师PHP第一季 TestGuest0.7

    1.产生随机数: mt_rand (PHP 4, PHP 5) mt_rand - 生成更好的随机数 说明 int mt_rand ([ int$min ], int$max ) 很多老的 libc ...

  8. PHP自学笔记 ---李炎恢老师PHP第一季 TestGuest1.1 密码处理+1.2可选验证

    知识点 1.加密方式:sha1和MD5 这两个函数不可逆 但网上有破解的软件,破解软件是先获得经过函数处理的值,保存在数据库. 2.正则表达式 email正则表达式,参考:http://www.cnb ...

  9. php第一季视频教程 李,PHP第一季视频教程(李炎恢+php100 不断更新)

    PHP是一种目前最流行的服务端Web程序开发语言之一.PHP主要的特点是语法简单易于学习.功能强大.灵活易用.在融合了现代编程语言的一些最佳特性后,PHP.Apache和MySQL的组合已成为Web服 ...

最新文章

  1. 【C语言】局部变量、全局变量,局部静态变量,全局静态变量,extern,static的区别...
  2. [WPF Bug清单]之(6)——Button的IsCancel属性失效
  3. Spring Data Couchbase 1.0 GA发布
  4. MongoDB 语法陷阱(转自51CTO)
  5. 广州python平均薪资_11 月全国程序员平均工资出炉,看看的你得薪资跟上平均水平了吗。...
  6. mysql服务器io等待高定位与分析
  7. Java GC种类以及触发时机
  8. Jmeter压力测试简单教程(包括服务器状态监控)
  9. python win32api教程_winapi-如何在python中使用win32 API?
  10. MongoDB凭什么跻身数据库排行前五?
  11. 高通 QSD MSM APQ区别
  12. java ppt 转pdf_Java 将PPT转为PNG/PDF/SVG/PPTX
  13. GlobalSign 企业型SSL 证书
  14. iOS wifi 路由器 连接
  15. linux grep -a命令 grep用法
  16. 【游戏客户端】聊天排行榜朋友圈系统实现机制
  17. 演化计算基准函数(Python版)
  18. 数字电路逻辑电路-实验一(逻辑门的应用及相互转换)
  19. matlab计算abc三相短路电流_负荷开关的额定电压、额定电流,峰值耐受电流(注电案例1339)...
  20. 完善数字人民币发行应用机制 打造可靠金融基础设施

热门文章

  1. 软考----多媒体与知识产权
  2. 将大写字母转换为小写字母(将该字符串中的大写字母转换成小写字母,之后返回新的字符串。)
  3. 最基础的深度优化搜索(dfs)题目
  4. 【Android的从零单排开发日记】之入门篇(十六)——Android的动画效果
  5. DS1820使用解析
  6. jar hell问题以及解决方案
  7. 如何形象地理解涌现?
  8. 如何理解“技术问题”
  9. 微服务调用失败的一种解决方案
  10. 链上泉城,商机赋能 | 易保全亮相商机大会,区块链应用受瞩目