当前位置: 首页 > news >正文

区块链技术做网站找事情做的网站

区块链技术做网站,找事情做的网站,兰州网页设计培训,要看网的域名是多少接下来#xff0c;我们将制作技能了#xff0c;总算迈进了一大步。首先回顾一下之前是如何实现技能触发的#xff0c;然后再进入正题。 如果想实现我之前的触发方式的#xff0c;请看此栏目的31-33篇文章#xff0c;讲解了实现逻辑#xff0c;这里总结一下#xff1a; …接下来我们将制作技能了总算迈进了一大步。首先回顾一下之前是如何实现技能触发的然后再进入正题。 如果想实现我之前的触发方式的请看此栏目的31-33篇文章讲解了实现逻辑这里总结一下 首先创建一个DataAsset用于存储InputAction和GameplayTag对应的数据在触发InputAction的时候将GameplayTag作为参数去调用输入回调在技能身上绑定对应的GameplayTag在回调中遍历角色身上的应用的技能如果Tag相同则激活技能。 现在技能可以被激活了需要我们实现技能内的逻辑接下来我们将从简单的开始实现那就是火球术。 要创建技能的完整内容我们需要 创建一个Actor在里面增加一个碰撞体和一个发射器用于实现子弹移动和碰撞检测。创建一个基于技能基类的用于发射火球的技能通过里面逻辑进行动画播放和火球发射。 创建Projectile类 首先创建一个Projectile类继承Actor可以放置到场景中。并在内部实现碰撞检测和发射器组件。 打开以后将里面的Tick函数删除我们不需要每帧更新 public: // Called every framevirtual void Tick(float DeltaTime) override;将其每帧更新设置为false PrimaryActorTick.bCanEverTick false;并且将此类设置为在服务器运行 bReplicates true; //此类在服务器运行然后复制到每个客户端首先我们添加一个碰撞体这里添加了一个球型碰撞体 private:UPROPERTY(VisibleAnywhere)TObjectPtrUSphereComponent Sphere;在构造函数中对碰撞体进行初始化 //初始化碰撞体Sphere CreateDefaultSubobjectUSphereComponent(Sphere);SetRootComponent(Sphere); //设置其为根节点Sphere-SetCollisionEnabled(ECollisionEnabled::QueryOnly); //设置其只用作查询使用Sphere-SetCollisionResponseToChannels(ECR_Ignore); //设置其忽略所有碰撞检测Sphere-SetCollisionResponseToChannel(ECC_WorldDynamic, ECR_Overlap); //设置其与世界动态物体产生重叠事件Sphere-SetCollisionResponseToChannel(ECC_WorldStatic, ECR_Overlap); //设置其与世界静态物体产生重叠事件Sphere-SetCollisionResponseToChannel(ECC_Pawn, ECR_Overlap); //设置其与Pawn类型物体产生重叠事件接着增加对应的碰撞检测回调这个回调函数内部实现我们将在后续实现 void OnSphereOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult SweepResult);然后再BeginPlay回调用触发重叠时绑定此回调 Sphere-OnComponentBeginOverlap.AddDynamic(this, AProjectile::OnSphereOverlap);接着我们创建一个发射组件发射组件通常用于控制投射物的移动例如子弹或火箭。这个组件通常负责处理投射物的速度、加速度、路径等。 public: UPROPERTY(VisibleAnywhere)TObjectPtrUProjectileMovementComponent ProjectileMovement;在构造函数中对其进行初始化 //创建发射组件ProjectileMovement CreateDefaultSubobjectUProjectileMovementComponent(ProjectileMovement);ProjectileMovement-InitialSpeed 550.f; //设置初始速度ProjectileMovement-MaxSpeed 550.f; //设置最大速度ProjectileMovement-ProjectileGravityScale 0.f; //设置重力影响因子0为不受影响接下来编译打开UE我们创建一个对应的蓝图 打开以后如果左侧有我们创建的对应的组件 碰撞体的碰撞类型也是按我们的设置来的 在根节点碰撞体下面添加一个Niagara组件用于播放粒子特效 添加上对应的Nigara粒子特效可以放置到场景中查看效果 创建ProjectileSpell ProjectileSpell是基于技能类创建的子类我们可以查看源码对基类增加更多的了解这里我对基类的h文件进行的翻译 UE5 GameplayAbility 源码定义解析 炮弹创建好了但是它没有发射器所以我们接下来实现一下火球的发射器在里面实现角色发射动画以及可以在内部实现对火球的发射位置和发射朝向的设置。 首先基于之前创建的技能基类创建一个子类命名为ProjectileSpell我们将其作为这种炮弹类的技能的特定类型的技能类 在函数内部我们首先添加了一个保护函数覆盖父类的ActivateAbility这是一个回调函数在技能激活时会触发此回调 回调中会返回四个参数技能实例句柄可以用此获取实例激活角色的相关信息技能激活的相关信息手动激活还是自动激活按键激活激活事件以及传递的数据。 protected:virtual void ActivateAbility(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo, const FGameplayEventData* TriggerEventData) override; 我们在实现这里先打印一条Log用于测试运行顺序接着在蓝图中也会打印。 void UProjectileSpell::ActivateAbility(const FGameplayAbilitySpecHandle Handle,const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo,const FGameplayEventData* TriggerEventData) {Super::ActivateAbility(Handle, ActorInfo, ActivationInfo, TriggerEventData);UKismetSystemLibrary::PrintString(this, FString(在c中打印数据), true, true, FLinearColor::Blue, 3); }接着编译项目创建一个基于ProjectileSpell的技能蓝图 在技能蓝图中设置鼠标左键触发 在触发技能激活回调中触发打印 需要在角色创建的时候将技能蓝图应用所以我们在角色蓝图中属性中设置技能应用。 运行点击敌人发现打印看来在c中输入汉字不支持顺序就是先调用了蓝图然后又调用的c内的回调。 接下来我们实现使用技能发射火球首先在类里增加一个属性来设置火球的类在技能激活时去实例化 UPROPERTY(EditAnywhere, BlueprintReadOnly)TSubclassOfAProjectile ProjectileClass;我们还需要一个位置去发射火球这个位置我们选择武器上面的一个骨骼节点作为位置。在之前的战斗接口类里面增加一个获取骨骼插槽位置的函数这个函数需要在子类去覆盖 virtual FVector GetCombatSocketLocation();然后再角色基类中添加一个设置骨骼节点名称的变量并覆盖这个函数 UPROPERTY(EditAnywhere, Category Combat)FName WeaponTipSocketName;virtual FVector GetCombatSocketLocation() override;函数实现直接调用获取骨骼接口名称的位置 FVector ACharacterBase::GetCombatSocketLocation() {return Weapon-GetSocketLocation(WeaponTipSocketName); }有了火球术的类有了发射的位置我们就可以生成火球了接着回到ProjectileSpell里面首先将控制的Actor转换为战斗接口 if (ICombatInterface* CombatInterface CastICombatInterface(GetAvatarActorFromActorInfo()))如果转换成功那么我们就可以通过接口函数去获取位置信息创建一个变换变量 FTransform SpawnTransform;SpawnTransform.SetLocation(CombatInterface-GetCombatSocketLocation());SpawnTransform.SetRotation(GetAvatarActorFromActorInfo()-GetActorQuat());现在我们火球类有了位置变换有了最后使用通用方法生成火球 //SpawnActorDeferred将异步创建实例在实例创建完成时相应的数据已经应用到了实例身上GetWorld()-SpawnActorDeferredAProjectile(ProjectileClass,SpawnTransform,GetOwningActorFromActorInfo(),CastAPawn(GetOwningActorFromActorInfo()),ESpawnActorCollisionHandlingMethod::AlwaysSpawn);如果你是异步生成的Actor还需要调用FinishSpawning函数确保设置正确的应用到actor上面。 //确保变换设置被正确应用 Projectile-FinishSpawning(SpawnTransform);首先在技能上面设置需要生成的火球术的类 设置完成以后我们需要设置使用的插槽 也可以在武器骨骼上面创建插槽使用。 案例里面武器顶部有个TipSocket插槽我们将使用此位置发射火球。 记得在角色设置里面设置对应骨骼插槽名称。 到现在我们实现了一个最基础的火球术接着运行项目查看效果。 在技能里我使用了蒙太奇播放角色动画在蒙太奇播放完成结束当前技能如果技能结束还可以再次触发。 现在我们实现了一个最简单的通过火球术技能效果很差接下来我们将接着实现火球术并让效果看起来更合理并在后面实现对敌人造成伤害。
http://www.dnsts.com.cn/news/201489.html

相关文章:

  • 文创产品营销方案宜昌网站seo公司
  • 湖南企业建站系统信息网站改版301是什么意思
  • 普通电脑怎么建设网站那几家是做失物招领的网站
  • 南京网站建设优化长沙岳麓区广告公司
  • 试玩平台怎么做网站做海外贸易的网站名叫什么
  • 有什么比较好的做简历的网站做房产的网站
  • 网站页面链接结构WordPress增加下载按钮
  • 安卓网站开发ui做网站导流
  • 网站超级外链物联网产品
  • 上海最专业的网站建设公司p2p网站策划
  • 旅行网站建设论文摘要公司宣传册设计样本
  • 梧州单身相亲网站重庆市建设工程造价站
  • 加强网站内容建设的意见好发信息网-网站建设
  • 网站设计与平面设计区别网站优点介绍
  • 衡阳网站建设制作网站建设先进
  • 依安县建设网站龙岗做网站
  • 茂名手机网站制作外贸流程
  • 岳阳市网站建设推广门户网站的建设公司
  • 营销网站建设优化wordpress 手机
  • 微网站是什么微信公众平台入口
  • 网络推广渠道有哪些seo关键词优化推广外包
  • 网站需要多少钱10元云服务器
  • 网站建设需要ui吗做一款推荐类的网站
  • 太原流量大的网站重庆市建设工程信息网南川区
  • 网站开发教程 模板号网站开发
  • 阿里巴巴网站备案号关键词优化精灵
  • 北京南站核酸检测点网站软件免费下载大全
  • 蚌埠网站建设专业公司哪家好新网站先做外链还是内容
  • 如何选择做网站公司信誉好的苏州网站建设
  • 黑龙江建设网官网入口宁波网站优化如何