ue4-c++定时器和时间轴简易模板
定时器Delay
在头文件中需要声明TimerHandle和功能函数,功能函数是计时结束后执行的功能
在源文件中利用GetWorldTimerManager()实现定时器的开启(绑定功能函数)和清除。
//.h
//自动开火的定时器
FTimerHandle FireTime;
//定时器的开始绑定函数
void StartFireTimer();
//功能函数 Delay之后的功能
void FireTimeFinished();
//.cpp
void StartFireTimer()
{
GetWorldTimerManager().SetTimer(
FireTime, //FTimerHandle
this, //使用对象
FireTimeFinied, //功能函数
DelayTime //延迟时间
);
}
使用完定时器记得清除,防止其他一些情况导致定时器的开启
GetTimerManager().ClearTimer(FireTime);
时间轴
之前有一篇已经对时间轴有了较为详细的介绍
首先在.h中需要通过UCurveFloat创建一个Curve 用来接受我们在UE中创建好的曲线,这个曲线将作为时间轴中的结果曲线,第二点需要创建一个时间轴组件UTimelineComponent来实现时间轴的播放。第三点是创建一个轨道FOnTimelineFloat用于在时间轴中存放曲线(轨道的类型和曲线类型要相互对应)。第四点是功能函数Func1即利用曲线的返回值我们要对哪些参数进行修改。第五个是时间轴触发函数Func2,主要是被其他函数调用用于实现值的变化然后传给Func1。
除了第四点,其他都相当于蓝图中TimeLine模块,第四点相当于TimeLine模块之后连接的部分。
//.h
//时间轴组件
UPROPERTY(VisibleAnywhere)
UTimelineComponent* DissolveTimeline;
//时间轴曲线
UPROPERTY(EditAnywhere)
UCurveFloat* DissolveCurve;
//相当于蓝图中的轨道
FOnTimelineFloat DissolveTrack;
//获取曲线上的值,用于更新我们要操作的值,相当于蓝图中的输出
UFUNCTION()
void UpdateDissolveMaterial(float Dissolve);
//开始溶解,时间轴绑定上方那个获取值函数的地方,可以被外界调用
void StartDissolve();
//.cpp
//时间轴初始化操作
void AXCharacter::StartDissolve()
{
//绑定功能函数
DissolveTrack.BindDynamic(this, &AXCharacter::UpdateDissolveMaterial);
if (DissolveCurve && DissolveTimeline)
{
//为时间轴添加轨道和输出曲线
DissolveTimeline->AddInterpFloat(DissolveCurve, DissolveTrack);
//时间轴的正向播放,如果有其他的条件可以调用反向播放
DissolveTimeline->Play();
}
}
//功能函数UpdateDissolveMaterial,一般会有形参接受,该形参通过BindDynamic将时间轴上Curve值获得
void AXCharacter::UpdateDissolveMaterial(float Dissolve)
{
if (DynamicDissolveMaterialInstance)
{
DynamicDissolveMaterialInstance->SetScalarParameterValue(TEXT("Dissolve"), Dissolve);
}
}
之后就直接在外部调用StartDissolve这个函数即可。
UE4 网络同步 角色权威性
UE4提供了两种网络同步的方式,属性复制和RPC。
属性复制只能从服务器到客户端,可以通过设置DOREPLIFETIME的方式,体现出是只对本地客户端响应还是对所有客户端响应--(感觉有点类似ClientRPC 和 MulticastRPC)
其一般针对的是一个变量需要设置其变量属性UPROPERTY(ReplicatedUsing = OnRep_Func)
OnRep_Func会在变量改变时自动调用,其中的功能一般都是直接复制了服务器上Func的函数实现,并且OnRep_Func一般不携带参数,如果要携带也只能携带一个,且为该变量。
RPC在定义函数时需要在函数名之后加上_Implementation
RPC多用于客户端需要向服务器传递信息(ServerRPC),然后服务器处理完成之后再广播到客户端。比如本地客户端按下左键开火,这个状态就需要利用ServerRPC传递给服务器,服务器然后调用MulticastRPC传递给所有客户端。
具体操作就是,当我们角色开火时,调用ServerFire,如果是服务器那么就会执行ServerFire函数里的操作。如果ServerFire里面是一个Multicast那么就会服务器就会执行这个函数,将开火的这个客户端状态广播到所有客户端,具体是Multicast内部的实现,比如内部有一个Character实例,这个实例就是开火客户端上的这个actor。
如果要使用ClientRPC,一般也是通过ServerRPC调用执行的,因为ClientRPC只能在服务器上执行,而ServerRPC就是调用客户端上的函数在服务器上执行。所以如果想要获取服务器上的时间就需要在ServerRPC上实现GetTime,然后再ClientRPC上的GetTime就是客户端上的时间。
角色权威性可以用来区分是否是服务器,这样我们就可以将一些重要的数据操作放在服务器上执行。
if(HasAuthority())
{
ApplyDamage();
}
角色模拟,除了本地客户端其他客户端上actor都表现为模拟,模拟就意味着没有PlayerController。比如开火函数,在应用伤害时需要添加一个控制器来确定当前开火的actor。如果我们将判断这个控制器是否有效放在了外面,将会导致其他功能在其他客户端上的失效
if(..&&Controller)
{
if(HasAuthority())
{
ApplyDamage();
}
Func1();
Func2();
//func1 func2 不会在其他客户端实现
}
因为我们通过Multicast将这个函数传给了所有客户端执行,而其他客户端没有这个actor的Controller。
所以正确做法是
if(..)
{
if(HasAuthority()&&Controller)
{
ApplyDamage();
}
Func1();
Func2();
//func1 func2 不会在其他客户端实现
}
ue4-c++定时器和时间轴简易模板的更多相关文章
- WPF Timeline简易时间轴控件的实现
原文:WPF Timeline简易时间轴控件的实现 效果图: 由于整个控件是实现之后才写的教程,因此这里记录的代码是最终实现后的,前后会引用到其他的一些依赖属性或者代码,需要阅读整篇文章. 1.确定T ...
- android 简易时间轴(实质是ListView)
ListView的应用 1.在很多时候是要用到时间轴的,有些处理的时间轴比较复杂,这里就给出一个比较简单的时间轴,其实就是ListView里面的Item的设计. 直接上代码: ListView,ite ...
- Android 类似时间轴的实现
想要实现图片中的的时间轴的效果,设定了三种颜色,但是出来的只有一个黑色,还不是设定好的,而且长度很长的话不能滚动,下面上代码: 布局文件: <LinearLayout xmlns:android ...
- SNF开发平台WinForm之十五-时间轴控件使用-SNF快速开发平台3.3-Spring.Net.Framework
一.显示效果如下: 二.在控件库里选择UCTimeAxis 拖拽到窗体里. 三.加入以下代码,在load事件里进行调用就可以运行了. #region 给时间轴控件加载数据 private void U ...
- echart 时间轴、以及y轴值过大但是变化不大显示感觉不出变化的问题+弹出框拖动div事件
1.时间轴 echart 提供了一种图表,如果x轴是一个时间范围,并且是连续的,如果用传统的数据驱动会很慢,所以用时间轴的方式 function initCurve(_data){ var resul ...
- 【前端图表】echarts实现散点图x轴时间轴
话不多说,老规矩,先上图,实现echarts实现散点图,x轴数据为时间年月日. 实现代码如下: <!DOCTYPE html> <html> <head> < ...
- QT动画时间轴控制 QTimeLine
QTimeLine类提供用于控制动画的时间轴 比如控制进度条的增长,图片,窗口的旋转,平移等等 QTimeLine有一个frameChanged(int)信号 当调用QTimeLine::start( ...
- Laya的动画制作,整图动画,序列图动画,时间轴动画,龙骨动画
参考: Laya动画基础 Egret帧动画工具类 版本:2.1.1.1 序列图动画 白鹭的序列图动画,使用TexureMerger合图,然后使用MovieClip类播放. Laya的话,使用图集打包工 ...
- echarts使用结合时间轴timeline动态刷新案例
1.echarts简介 ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Fire ...
- 如何关闭Win10系统的时间轴功能?
Win10系统新增了时间轴的功能,可以根据用户使用电脑的情况来进行记录,以方便用户查找之前的电脑使用记录,并且可以打开之前的任务状态. 但有些用户不想让系统记录下自己的活动记录,那我们该怎么清除这些记 ...
随机推荐
- 【架构师视角系列】QConfig配置中心系列之Client端(二)
目录 声明 配置中心系列文章 一.架构 一.客户端架 1.Server 职责 (1)配置管理 (2)配置发布 (3)配置读取 2.Client 职责 (1)配置拉取 (2)配置注入 (3)配置变更监听 ...
- collection.abc模块下的抽象基类UML类图说明
说明 Iterable.Container和Sized 每个容器都应该继承这三个抽象基类,或者实现兼容的协议.Iterable通过__iter__方法支持迭代, Container通过__contai ...
- 【Azure App Service】Local Git App Service的仓库代码遇见卡住不Clone代码的问题
问题描述 启用App Service Local Git 部署,在Clone 代码库到本地时候,卡在Clone 'xxxxxx' ... ... 一动不动的问题? 问题解答 因为Git Clone没有 ...
- 浅入Kubernetes(9):了解组件
本篇主要介绍 Kubernetes 中的架构组成,在前面我们已经学习到了 kubeadm.kubectl,这两个命令行工具是 k8s 组成之一.而前面在搭建集群时,也学到了 master.worker ...
- Java 重写 equals + toString 练习
1 package com.bytezreo.objectclass2; 2 3 /** 4 * 5 * @Description 重写 equals + toString 6 * @author B ...
- CSAPP:lab7 shell
实验网站 课程网站:CSAPP 源码下载 源码下载 实验文档下载 我的实验环境:Ubuntu 20.04 lab7文档解读 查看 tsh.c (tiny shell) 文件,您会看到它包含一个简单 ...
- 代码片段管理软件 - 发现 utools 这个工具还行 windows软件
代码片段管理软件 - 发现 utools 这个工具还行 windows软件 介绍 这个软件不是专业的代码片段工具 好在还能凑合用 最完美的还是苹果那个软件,但是用的win没办法了 这个可以粘贴到vsc ...
- Vue3.x知识图谱
Vue3.x知识图谱 https://gitee.com/jishupang/vue3-knowledge-map/tree/master 回头有时间再贴图吧
- 基于python的生理电信号采集的数据转换和处理软件
一 前记 团队开发了几款生物电信号采集系统,可数据处理和转换工具刚开始用的都是matlab.这对一些客户来说,使用门槛还是有些高了.开发一套配套的软件,满足广大用户的需求,已经是迫在眉睫的事情了.最近 ...
- crc16校验C语言源码实例解析
一 概念: 循环冗余码校验英文名称为Cyclical Redundancy Check,简称CRC.它是利用除法及余数的原理来作错误侦测(Error Detecting)的.实际应用时,发送装置计算出 ...