14072202(带IK的Recoil)
【目标】
带IK的Recoil
【思路】
1 继承于USkelControlLimb和UGameSkelCtrl_Recoil
2 效果对比
以这个骨骼为例
Recoil

Limb
【步骤】
1 在\ue3\Development\Src\Engine\Classes中新建SkelControlLimbRecoil.uc
先复制\ue3\Development\Src\GameFramework\Classes\GameSkelCtrl_Recoil.uc的内容
make 后 编译代码会出现结构体 枚举 重命名
需要将\GameSkelCtrl_Recoil.uc的结构体 枚举注释掉
2 在UnSkelControl.cpp 添加类实现
IMPLEMENT_CLASS(USkelControlLimbRecoil).../*-----------------------------------------------------------------------------USkelControlLimbRecoil-----------------------------------------------------------------------------*/FVector2D USkelControlLimbRecoil::GetAim(USkeletalMeshComponent* InSkelComponent){return Aim;}/** Is skeleton currently mirrored */UBOOL USkelControlLimbRecoil::IsMirrored(USkeletalMeshComponent* InSkelComponent){return FALSE;}// USkelControlBase interfacevoid USkelControlLimbRecoil::TickSkelControl(FLOAT DeltaSeconds, USkeletalMeshComponent* SkelComp){bApplyControl = FALSE;if( ControlStrength > ZERO_ANIMWEIGHT_THRESH ){// if willing to play recoil, reset its stateif( bPlayRecoil != bOldPlayRecoil ){bPlayRecoil = bOldPlayRecoil;Recoil.TimeToGo = Recoil.TimeDuration;// ERS_Random == Start at random position along sine wave,// ERS_Zero == Start at 0const FLOAT TWO_PI = 2.f * (FLOAT)PI;Recoil.RotSinOffset.X = Recoil.RotParams.X == ERS_Random ? appFrand() * TWO_PI : 0.f;Recoil.RotSinOffset.Y = Recoil.RotParams.Y == ERS_Random ? appFrand() * TWO_PI : 0.f;Recoil.RotSinOffset.Z = Recoil.RotParams.Z == ERS_Random ? appFrand() * TWO_PI : 0.f;Recoil.LocSinOffset.X = Recoil.LocParams.X == ERS_Random ? appFrand() * TWO_PI : 0.f;Recoil.LocSinOffset.Y = Recoil.LocParams.Y == ERS_Random ? appFrand() * TWO_PI : 0.f;Recoil.LocSinOffset.Z = Recoil.LocParams.Z == ERS_Random ? appFrand() * TWO_PI : 0.f;Recoil.RotOffset = FRotator(0,0,0);Recoil.LocOffset = FVector(0.f);}if( Recoil.TimeToGo > DeltaSeconds ){Recoil.TimeToGo -= DeltaSeconds;if( Recoil.TimeToGo > 0.f ){bApplyControl = TRUE;// Smooth fade outconst FLOAT TimePct = Clamp<FLOAT>(Recoil.TimeToGo / Recoil.TimeDuration, 0.f, 1.f);const FLOAT Alpha = TimePct*TimePct*(3.f - 2.f*TimePct);const FLOAT AlphaTimesDelta = Alpha * DeltaSeconds;// Recoil Bone Rotation, compute sin wave value for each componentif( !Recoil.RotAmplitude.IsZero() ){if( Recoil.RotAmplitude.X != 0.f ){Recoil.RotSinOffset.X += AlphaTimesDelta * Recoil.RotFrequency.X;Recoil.RotOffset.Pitch = appTrunc(Alpha * Recoil.RotAmplitude.X * appSin(Recoil.RotSinOffset.X));}if( Recoil.RotAmplitude.Y != 0.f ){Recoil.RotSinOffset.Y += AlphaTimesDelta * Recoil.RotFrequency.Y;Recoil.RotOffset.Yaw = appTrunc(Alpha * Recoil.RotAmplitude.Y * appSin(Recoil.RotSinOffset.Y));}if( Recoil.RotAmplitude.Z != 0.f ){Recoil.RotSinOffset.Z += AlphaTimesDelta * Recoil.RotFrequency.Z;Recoil.RotOffset.Roll = appTrunc(Alpha * Recoil.RotAmplitude.Z * appSin(Recoil.RotSinOffset.Z));}}// Recoil Bone Location, compute sin wave value for each componentif( !Recoil.LocAmplitude.IsZero() ){if( Recoil.LocAmplitude.X != 0.f ){Recoil.LocSinOffset.X += AlphaTimesDelta * Recoil.LocFrequency.X;Recoil.LocOffset.X = Alpha * Recoil.LocAmplitude.X * appSin(Recoil.LocSinOffset.X);}if( Recoil.LocAmplitude.Y != 0.f ){Recoil.LocSinOffset.Y += AlphaTimesDelta * Recoil.LocFrequency.Y;Recoil.LocOffset.Y = Alpha * Recoil.LocAmplitude.Y * appSin(Recoil.LocSinOffset.Y);}if( Recoil.LocAmplitude.Z != 0.f ){Recoil.LocSinOffset.Z += AlphaTimesDelta * Recoil.LocFrequency.Z;Recoil.LocOffset.Z = Alpha * Recoil.LocAmplitude.Z * appSin(Recoil.LocSinOffset.Z);}}}}}Super::TickSkelControl(DeltaSeconds, SkelComp);}void USkelControlLimbRecoil::CalculateNewBoneTransforms(INT BoneIndex, USkeletalMeshComponent* SkelComp, TArray<FBoneAtom>& OutBoneTransforms){Super::CalculateNewBoneTransforms(BoneIndex, SkelComp, OutBoneTransforms);}
现在需要将USkelControlLimb.EffectorLocation 设置为Recoil影响的骨骼的更新的位置
3
4
14072202(带IK的Recoil)的更多相关文章
- 带 IK 分词器的 Luke 和 搜索应用服务器solr
首先在网上查了一下: Solr Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口.用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索 ...
- Unity给力插件之Final IK
Final IK细节: 1.Aim IK:设定一个目标,关节末端始终朝向该目标,一般用来做头部的朝向. 步骤: a.在模型头节点处添加Aim空物体并reset b.给模型添加Aim IK组件,并填上A ...
- 在ElasticSearch中使用 IK 中文分词插件
我这里集成好了一个自带IK的版本,下载即用, https://github.com/xlb378917466/elasticsearch5.2.include_IK 添加了IK插件意味着你可以使用ik ...
- humanoid ik unity 配件 animation的问题
遇到这样一个问题 想给角色设置ik 以实现代码控制的 更为自然的 角色动作 比如角色头跟随点击转动 身体也有相应扭转 https://docs.unity3d.com/Manual/InverseKi ...
- 全文检索引擎sphinx 与 Elasticsearch 索引速度对比
sphinx的特色之一是建立索引速度快,最近转投Elasticsearch后,一直想做个对比,网上资料常见说法是10倍的差距. 测试环境 硬件:单核,2G内存的E5-2630 虚拟机 操作系统:Cen ...
- Elasticsearch java api操作(一)(Java Low Level Rest Client)
一.说明: 一.Elasticsearch提供了两个JAVA REST Client版本: 1.java low level rest client: 低级别的rest客户端,通过http与集群交互, ...
- [Linux]Linux下安装和配置solr/tomcat/IK分词器 详细实例一.
在这里一下讲解着三个的安装和配置, 是因为solr需要使用tomcat和IK分词器, 这里会通过图文教程的形式来详解它们的安装和使用.注: 本文属于原创文章, 如若转载,请注明出处, 谢谢.关于设置I ...
- 安装elasticsearch及中文IK和近义词配置
安装elasticsearch及中文IK和近义词配置 安装java环境 java环境是elasticsearch安装必须的 yum install java-1.8.0-openjdk 安装elast ...
- 使用 Elasticsearch ik分词实现同义词搜索(转)
1.首先需要安装好Elasticsearch 和elasticsearch-analysis-ik分词器 2.配置ik同义词 Elasticsearch 自带一个名为 synonym 的同义词 fil ...
随机推荐
- Leetcode: Repeated Substring Pattern
Given a non-empty string check if it can be constructed by taking a substring of it and appending mu ...
- android 绘图之Path与Paint详解
/** * Paint类介绍 * * Paint即画笔,在绘图过程中起到了极其重要的作用,画笔主要保存了颜色, * 样式等绘制信息,指定了如何绘制文本和图形,画笔对象有很多设置方法, * 大体上可以分 ...
- mysql时间格式DATE_FORMAT()
1.以下是mysql查询中用到的时间格式的转化形式例子:SELECT DATE_FORMAT(NOW(),'%Y-%m-%d') -- 2015-10-28 SELECT DATE_FORMAT(NO ...
- ASP.NET下载远程图片保存到本地的方法、保存抓取远程图片
以下介绍两种方法:1.利用WebRequest,WebResponse 类 WebRequest wreq=WebRequest.Create("http://www.xueit.com/e ...
- GAT2.0使用文档(组合接口测试)
3.2接口用例场景组件 在此之前,大家应该都已经开发完成了一个最简单的接口测试用例,但是之前的接口用例的期望结果是固定值,不能动态的去做对比,有很大局限性.下面开始介绍怎样通过场景组件来动态对测试结果 ...
- ASP。net 测验
Login.aspx using System; using System.Collections.Generic; using System.Linq; using System.Web; usin ...
- [问题2014A02] 解答二(求和法+拆分法,由张诚纯同学提供)
[问题2014A02] 解答二(求和法+拆分法,由张诚纯同学提供) 将行列式 \(|A|\) 的第二列,\(\cdots\),第 \(n\) 列全部加到第一列,可得 \[ |A|=\begin{vma ...
- [转](三)unity4.6Ugui中文教程文档-------概要-UGUI Basic Layout
大家好,我是孙广东. 转载请注明出处:http://write.blog.csdn.net/postedit/38922399 更全的内容请看我的游戏蛮牛地址:http://www.unityma ...
- LaTeX常用数学符号
之前在写博客做笔记时经常会在Word或WPS里写好数学公式再截图上传,一直觉得这样很low.现在实在是不想再去截图上传了,于是决定开始学一下LaTeX.在博客园中使用数学公式的设置可以参考在博客园使用 ...
- Hadoop简介
原来:计算效率低 现在:成本降低,能用PC机,就不用大型机和高端存储了:软件容错硬件故障视为常态,通过软件保证可靠性:简化并行分布式计算,无需控制节点同步和数据交换,但是谷歌只发表了相关技术论文,没有 ...