RPG9.修改武器GA
1.打开GA,对武器基类进行修改。这样子即完成了武器基类的描写
2.基于武器基类,创建一个子类,该子类为玩家手上的武器。
3.打开角色的骨骼,在该骨骼内创建一个插槽
4.调整到好的位置
5. 打开创建好的玩家手上的武器GA,设置好对应的类,附加的骨骼也对应好。
6.在Data内创建一个C++类,用于在启动游戏时对角色Ability的初始化
7.在新建的Data内创建两个变量
protected://角色初始能力UPROPERTY(EditDefaultsOnly, Category = "StartUpData")TArray<TSubclassOf<UXMBGameplayAbility>> ActivateOnGivenAbilities;//有触发条件的能力UPROPERTY(EditDefaultsOnly, Category = "StartUpData")TArray<TSubclassOf<UXMBGameplayAbility>> ReactiveAbilities;
然后再创建一个将Ability设置给ASC的函数
Protected:
//设置ASC能力void GrantAbilities(const TArray<TSubclassOf<UXMBGameplayAbility>> &InAbilitiesToGive,UXMBAbilitySystemComponent* InXMBASCToGive, int32 ApplyLevel = 1);
再创建一个调用GrantAbilities()的函数,将能力赋予给ASC
public://将能力赋予ASCvirtual void GiveToAbilitySystemComponent(UXMBAbilitySystemComponent* InXMBASCToGive, int32 ApplyLevel = 1);
8.设置GrantAbilities()
void UDataAsset_StartUpDataBase::GrantAbilities(const TArray<TSubclassOf<UXMBGameplayAbility>>& InAbilitiesToGive,UXMBAbilitySystemComponent* InXMBASCToGive, int32 ApplyLevel)
{if (InAbilitiesToGive.IsEmpty()){return;}for (const TSubclassOf<UXMBGameplayAbility>& Ability : InAbilitiesToGive){if (!Ability) continue;向玩家的能力系统组件授予一组能力FGameplayAbilitySpec AbilitySpec(Ability);AbilitySpec.SourceObject = InXMBASCToGive->GetAvatarActor();AbilitySpec.Level = ApplyLevel;InXMBASCToGive->GiveAbility(AbilitySpec);}
}
9.设置GiveToAbilitySystemComponent
void UDataAsset_StartUpDataBase::GiveToAbilitySystemComponent(UXMBAbilitySystemComponent* InXMBASCToGive,int32 ApplyLevel)
{check(InXMBASCToGive);GrantAbilities(ActivateOnGivenAbilities, InXMBASCToGive, ApplyLevel);GrantAbilities(ReactiveAbilities, InXMBASCToGive, ApplyLevel);
}
10.启动项目,创建该类的子类
11.创建子类的蓝图,可以看到里面有两个可设置的数组
12.这个数据资产将会保留所有GameAbility的引用
在Character内创建一个数据资产的引用
//创建数据资产的引用UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "CharacterData")TSoftObjectPtr<UDataAsset_XMBStartUpData> CharacterStartUpData;
创建好改引用后,应该在角色内读取该资产的内容并应用于角色的ASC(因为该资产只存GA,所以直接应用就好)
13.在玩家类的Possesseny()内
void AXMBCharacter::PossessedBy(AController* NewController)
{Super::PossessedBy(NewController);//if (!CharacterStartUpData.IsNull()){//使用异步加载的方式尝试加载数据if (UDataAsset_XMBStartUpData* LoadedData = CharacterStartUpData.LoadSynchronous()){LoadedData->GiveToAbilitySystemComponent(XMBAbilitySystemComponent);}}
}
14.现在已经完成数据资产的设置了,启动项目,打开玩家角色蓝图
15.打开生成武器的GA,修改这两个变量的默认值