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

网站正在建设中 html代码咋做网站

网站正在建设中 html代码,咋做网站,建设工程工程量清单计价规范,wordpress 好评插件文章目录 一、代码结构二、实现黑洞粒子 一、代码结构 为了避免将所有事务都写在角色代码中,让其变得非常臃肿而难以维护,我们考虑到角色的所有技能都是右手释放的,所以右手发射这段代码是可复用的根据以上思路,我们可以在角色代…

文章目录

  • 一、代码结构
  • 二、实现黑洞粒子

一、代码结构

  1. 为了避免将所有事务都写在角色代码中,让其变得非常臃肿而难以维护,我们考虑到角色的所有技能都是右手释放的,所以右手发射这段代码是可复用的
  2. 根据以上思路,我们可以在角色代码中只需要保留任务逻辑生成投掷物和运行轨迹的逻辑,其余各部分的不同,放在单独的类中实现即可。
void ASurCharacter::SpawnProjectile(TSubclassOf<AActor> ClassToSpawn)
{if (ensureAlways(ClassToSpawn)) {...// 生成传入的类GetWorld()->SpawnActor<AActor>(ClassToSpawn, SpawnTM, SpawnParams);}}
  1. 而在原来的攻击实现函数中,我们只需要执行对应投掷物的生成即可。
void ASurCharacter::PrimaryAttack_TimeElapsed() {SpawnProjectile(ProjectileClass);
} 
  1. 截至目前,攻击释放的逻辑如下:

(1)按下按键,绑定到攻击

PlayerInputComponent->BindAction("PrimaryAttack", IE_Pressed, this, &ASCharacter::PrimaryAttack);

(2)调用攻击函数

void ASCharacter::PrimaryAttack()
{//PlayAnimMontage(AttackAnim);	StartAttackEffects();GetWorldTimerManager().SetTimer(TimerHandle_PrimaryAttack, this, &ASCharacter::PrimaryAttack_TimeElapsed, AttackAnimDelay);//GetWorldTimerManager().ClearTimer(TimerHandle_PrimaryAttack);  if the character died	
}

(3)开始粒子发射效果展示

void ASCharacter::StartAttackEffects()
{PlayAnimMontage(AttackAnim);//在指定的网格组件(通过GetMesh()获得)上的指定socket(HandSocketName)处,精确放置(无偏移和旋转)一个粒子效果(CastingEffect)	UGameplayStatics::SpawnEmitterAttached(CastingEffect, GetMesh(), HandSocketName, FVector::ZeroVector, FRotator::ZeroRotator, EAttachLocation::SnapToTarget);
}

(4)抬手时间粒子发射延迟时间到后生成粒子

void ASCharacter::PrimaryAttack_TimeElapsed()
{SpawnProjectile(ProjectileClass);
}

(5)粒子生成具体参数(起始位置,朝向等)

void ASurCharacter::SpawnProjectile(TSubclassOf<AActor> ClassToSpawn)
{if (ensureAlways(ClassToSpawn)) {...// 生成传入的类GetWorld()->SpawnActor<AActor>(ClassToSpawn, SpawnTM, SpawnParams);}}

(6)粒子的发射过程由对应的类具体实现

  1. UGameplayStatics::SpawnEmitterAttached用于创建和附加一个粒子效果(通常是视觉效果如爆炸、火花、烟雾等)到一个游戏对象。具体参数如下:
UGameplayStatics::SpawnEmitterAttached(CastingEffect, GetMesh(), HandSocketName, FVector::ZeroVector, FRotator::ZeroRotator, EAttachLocation::SnapToTarget);

(1)CastingEffect:是要生成的粒子效果的引用。通常,这个参数是一个预先定义好的粒子系统模板的指针或者引用,需要在UE编辑器中创建这个粒子效果。
(2)GetMesh():返回一个USkeletalMeshComponent的引用,这是想要将粒子效果附加到的网格组件。通常这个网格是角色或者对象的可视化表现。
(3)HandSocketName:是一个指定粒子效果应该附加到网格的哪个部分的名称。例如,如果你有一个角色,你想在他的手部位置播放粒子效果,你就可以使用一个定义在手部的socket的名称。
(4)FVector::ZeroVector:是一个三维向量,表示粒子效果相对于socket位置的偏移。FVector::ZeroVector表示没有偏移,粒子效果将精确地在socket的位置生成。
(5)FRotator::ZeroRotator:是一个旋转器rotator),用于定义粒子效果的朝向。FRotator::ZeroRotator表示没有旋转,粒子效果将按照网格或socket的默认方向进行对齐。
(6)EAttachLocation::SnapToTarget:是一个枚举值,定义了粒子效果附加到网格的方式。SnapToTarget意味着粒子效果将精确地对齐到目标socket的位置和旋转。这对于需要精确位置控制的效果(如本例中手中的魔法效果)很有用。

二、实现黑洞粒子

  1. 准备工作:复制一份之前PrimaryAttack的代码,改为黑洞粒子的BlackHoleAttackBlackHoleAttack_TimeElapsed。在SetupPlayerInputComponent添加攻击按键绑定后,再在UE里实现绑定。
  2. 首先创建黑洞粒子子类并暴露于蓝图中,这样的定义允许开发者在不改变代码的情况下通过编辑器灵活配置和使用不同的类,减少了硬编码需求。

TSubclassOf<AActor>是一个模板类,用于指定一个特定的基类。这意味着BlackHoleProjectileClass可以存储任何AActor或其子类的类型信息。例如如果有多个投掷物类(比如不同种类的炸弹、箭矢等),可以在编辑器中选择一个具体的类来实例化和使用。

// SCharacter.h
UPROPERTY(EditAnywhere, Category = "Attack")
TSubclassOf<AActor> BlackHoleProjectileClass;// SCharacter.cpp
void ASurCharacter::BlackHoleAttack_TimeElapsed() {SpawnProjectile(BlackHoleProjectileClass);
}
  1. 现在考虑代码功能复用,设置普通投掷物基类,其他扩展类继承于此。在UE中从Actor派生一个SurProjectileBase类,使用ABSTRACT宏将该类声明为"抽象基类",使其不显示在UE的下拉窗中,防止我们在关卡中添加此类的Actor
// ASurProjectileBase.h
UCLASS(ABSTRACT)
class ACTIONROGUELIKE_API ASProjectileBase : public AActor// ASurProjectileBase.cpp
ASurProjectileBase::ASurProjectileBase()
{SphereComp = CreateDefaultSubobject<USphereComponent>("SphereComp");SphereComp->SetCollisionProfileName("Projectile");RootComponent = SphereComp;MoveComp = CreateDefaultSubobject<UProjectileMovementComponent>("ProjectileMoveComp");MoveComp->bRotationFollowsVelocity = true;MoveComp->bInitialVelocityInLocalSpace = true;MoveComp->ProjectileGravityScale = 0.0f;MoveComp->InitialSpeed = 500;EffectComp = CreateDefaultSubobject<UParticleSystemComponent>("EffectComp");EffectComp->SetupAttachment(RootComponent);} 
  1. 在蓝图中实现黑洞功能。创建继承自SurProjectileBaseProj_BlackHole蓝图。添加Physics中的径向力组件RadialForce,这个组件可以实现在一个范围内产生力。在属性“径向力组件”中设置“要影响的对象”,点击右边小三角形将Pawn删除,这样就不会把我们自己吸进去。然后,设置半径为500,设置“”属性为-2,000,000。
  2. 不希望这个黑洞在移动时会被物体阻挡,所以修改碰撞预设为Custom和相关碰撞响应
  3. 这是一个有时间限制的技能,设置Actor属性的“初始生命周期”为5秒,即要添加动画的时长,并设置其自定义时间膨胀(要匹配动画时长)

文章转载自:

http://7U2jPFCk.ndtmz.cn
http://qw8l8ouW.ndtmz.cn
http://qpL3UEsX.ndtmz.cn
http://OZoVh2IS.ndtmz.cn
http://jjY9SuZl.ndtmz.cn
http://0K13Ncwy.ndtmz.cn
http://F1PSHoVd.ndtmz.cn
http://Ar4GEXbG.ndtmz.cn
http://d2hQqMDM.ndtmz.cn
http://spyeDByr.ndtmz.cn
http://nKdN848x.ndtmz.cn
http://2crvw5Dc.ndtmz.cn
http://VehAWdBy.ndtmz.cn
http://NiosNRmr.ndtmz.cn
http://pWU9u4jY.ndtmz.cn
http://mtTI2TqD.ndtmz.cn
http://3upYxOXS.ndtmz.cn
http://SPgTG8OW.ndtmz.cn
http://Iw2TBTHY.ndtmz.cn
http://MeDEVbK5.ndtmz.cn
http://KqMa8TX9.ndtmz.cn
http://aFsgKANq.ndtmz.cn
http://tXcVKZC2.ndtmz.cn
http://9aGCtvkJ.ndtmz.cn
http://1FWbJ7HA.ndtmz.cn
http://13tKeOI7.ndtmz.cn
http://pZWXsouB.ndtmz.cn
http://SPKm4OCm.ndtmz.cn
http://d5bonzzN.ndtmz.cn
http://NZXW1uib.ndtmz.cn
http://www.dtcms.com/wzjs/745667.html

相关文章:

  • 个人网站有哪些板块衬衫定做公司
  • 西安有那些做网站的公司好盐城市城乡建设局门户网站
  • 域名怎么做网站内容企业融资方式有哪些
  • wordpress 评论回复邮件通知插件seo网站优化工具大全
  • 有专门做消除网站上对公司不利的中国人做英文网站
  • 电影网站如何做不侵权网站建设售后服务内容
  • 建立网站和新媒体信息发布制度邯郸之战
  • 企业网站维护建设ppt暖色调网页设计网站
  • 网站如何建立品牌形象邵阳网站开发公司推荐
  • 怎么做免费的产品网站税企互动平台
  • 企业网站建设方案 word中国建设银行官网站预约纪念币
  • 青岛网站建设哪家专业医院网站制作好吗
  • 旅游网站建设与网页设计就业前景好的10大专业
  • 临沂企业做网站哈尔滨网站建设哪个好
  • 长沙网站建设推广服务互联网装修公司加盟
  • app与微网站的区别是什么意思wordpress ip访问
  • 某个网站访问慢的原因不准别人网站做反链
  • 网站需要多少钱网上商城网站建设方案书
  • 网站开发规划方案中国目前最好的搜索引擎
  • 怎么做创意短视频网站自己做网站推广需要多少钱
  • 建设银行广西分行网站wordpress里的页面布局
  • 潍坊网站定制门户网站界面设计模板
  • 网站建设的任务苏州手机网站制作
  • 网站模板 wordpress带会员系统免费dw设计成品网页
  • 镇平哪家网站做的好铁岭 网站建设
  • 兼职做ppt是哪个网站好好看的电商网站模板
  • 做网站有哪些类型的电商代运营企业
  • 精品课程网站开发中国最新消息新闻
  • 黄山做网站404 not found网站
  • 暖通毕业设计代做网站给孩子做衣服的网站