//杂记之一 设计我们的物品拾取系统
虽然我今天看了看我的笔记有很多的坑没有填(之后我会利用中午来把这个坑填写完,印象笔记的贴图真的好难用)
关于物品系统的设计
今天遇到个问题,我改如何设计游戏中的物品系统,如何来分离物品的显示,生效,销毁等等操作。
以前我很有可能设置许许多多的各种物品的预制物品,为他们写好对应的脚本,在我们的unity引擎中,但是我觉得这个不是一个 好的处理办法,在虚幻中我查阅教程,发现者这么一种思路。
我们应该把我们物体的抽象与显示以及控制分开,我们人物,还有游戏使用的时候我们都只关心物品的显示,物品的显去关心自己显示的到底是个什么物品。
所以这里采用了这样的一种设计,Item类来保存我们的游戏物品的抽象(包括物品的模型,图标,描述,以及),Actor是游戏中的显示,我们未来还可能使用到我们物品栏目中的显示。我们Actor类持有我们当前的类是哪个类。
代码如下,其余的实现我们在蓝图中继承覆盖。
UCLASS ()
class BATTERYCOLLECTOR_API UItem : public UObject
{
GENERATED_BODY ()
public :
UPROPERTY (EditAnywhere , BlueprintReadOnly, Category ="Item" )
FString ItemName ;
UPROPERTY (EditAnywhere , BlueprintReadOnly , Category = "Item" )
FString Desription ;
UPROPERTY (BlueprintReadWrite , Category = "Item" )
ABatteryCollectorCharacter * Owner ;
UFUNCTION (BlueprintCallable , BlueprintImplementableEvent ,Category = "Item")
void TakeEffect ();
};
在我们的ItemActor中我们分别设置我们的UItem指针,让这个显示有指向对应的抽象实体。
class UItem;
UCLASS ()
class BATTERYCOLLECTOR_API AItemActor : public AActor
{
GENERATED_BODY ()
public :
// Sets def