Ue4 Charater 游戏世界血条

(1)FairyGUI 创建血条控件

(2)    //角色血条
        UGComponent*                m_pCharHp;     .h文件声明变量

(3) 

UWorld* kWorld = GetWorld();
	m_pCharHp = UUIPackage::CreateObject(TEXT("FightGame"), TEXT("charHp"), (UObject*)kWorld)->As<UGComponent>();
	if (m_pCharHp != nullptr)
	{
		m_pCharHp->SetParentToRoot();
		m_pCharHp->MakeFullScreen(true);	

		UGObject* CharHpWin = m_pCharHp->GetChild("CharHp");
		
		float modelWidth = GetCapsuleComponent()->GetUnscaledCapsuleRadius()/50.0f * 160.0f;
		CharHpWin->SetWidth(modelWidth);

	}

(4)设置位置

	UWorld* kWorld = GetWorld();
	FConstPlayerControllerIterator playerIterator = kWorld->GetPlayerControllerIterator();
	FVector2D sreenPos;
	tempCurrentPos.Z = tempCurrentPos.Z + 150.0f;
	UGameplayStatics::ProjectWorldToScreen(playerIterator->Get(), tempCurrentPos, sreenPos);
	FVector2D resPos = m_pCharHp->GetUIRoot()->GlobalToLocal(sreenPos);
	m_pCharHp->SetPosition(sreenPos);	

本文在Tick中调用

注意:位置设置一次时,在BeginPlay中调用ProjectWorldToScreen会失败,要延迟调用才对

效果移动地图血条相对角色的位置会变,没有Unity正交相机血条的效果

(5)将UGameplayStatics::ProjectWorldToScreen 换成 UWidgetLayoutLibrary::ProjectWorldLocationToWidgetPosition(playerIterator->Get(), tempCurrentPos, sreenPos,false);血条的效果就对了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值