虚幻学习笔记12—C++类的实例化

一、前言

        本系列如无特殊说明使用的虚幻版本都是5.2.1,VS为2022版本。在Unity中通常创建的脚本都默认继承了MonoBehavior,都是不能再用代码New而实例化的,虚幻也是一样不能直接New来实例化。在Unity中是通过Instantiate方法来实例化一个游戏对象,虚幻中通过TSubclassOf、StaticClass等操作来实例化一个游戏对象。相比来说虚幻更复杂点。

二、实现

2.1、实例化Object类

        创建一个Object类,然后在MyPawn的开始方法中实例化,代码如下:创建成功后会打印出

	TSubclassOf<UMyObject1> MySubclassObject = UMyObject1::StaticClass();
	MyTestObject = NewObject<UMyObject1>(GetWorld(), MySubclassObject);
	if (MyTestObject)
	{
		UE_LOG(LogTemp, Warning, TEXT("This is a %s"), *MyTestObject->GetName());
}

创建类的默认名称。注意,在引用Object类型的类时一定要在前面加”U"。

2.2、实例化Actor类

创建一个Actor类,然后同样再MyPawan的开始方法中实例化,代码如下,注意Actor类型的类引用

	//实例化一个Actor类
	TSubclassOf<AMyActor1> MySubclassObject = AMyActor1::StaticClass();
	AMyActor1* TempActor = NewObject<AMyActor1>(GetWorld(), MySubclassObject);
	if (TempActor)
	{
		UE_LOG(LogTemp, Warning, TEXT("This is a %s"), *TempActor->GetName());
	}

前面一定要加“A”。

2.3、获取一个静态实例GameInstance

对于GameInstance,它不需要再手动实例化,因为这个类比较特殊,是虚幻引擎自动管理,只需要讲其获取到即可,代码如下:

	赋值一个Game Instance
	MyGameInstance = Cast<UMyGameInstance1>(GetWorld()->GetFirstPlayerController()->GetGameInstance());
	if (MyGameInstance)
	{
		UE_LOG(LogTemp, Warning, TEXT("My Instance Name:%s,IP:%d, UserName:%s"), *MyGameInstance->GetName(), MyGameInstance->IP, *MyGameInstance->UserName);
	}

三、总结

3.1、此处的实例化的类都只是在内存中,还未真正体现在游戏应用中,比如实例化一个Cube的类,在运行时并不会真的显示一个Cube,如需要真正显示还需通过Load方法,这个后续在讲。

3.2、Object类和Actor类的前缀字母是不同的,Object前面加“U”,为UObject,Actor前面加“A"为AActor。

3.3、GameInstance类不需要手动实例化,它在虚幻引擎运行时就自动创建和销毁,只需要获取即可。

相关推荐

  1. 虚幻学习笔记12C++实例

    2023-12-12 13:40:04       59 阅读
  2. C++:定义和实例

    2023-12-12 13:40:04       25 阅读
  3. C++学习-2023/12/14-C++和对象

    2023-12-12 13:40:04       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-12 13:40:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-12 13:40:04       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-12 13:40:04       82 阅读
  4. Python语言-面向对象

    2023-12-12 13:40:04       91 阅读

热门阅读

  1. tomcat安全加固

    2023-12-12 13:40:04       62 阅读
  2. 汽车标定技术(十二)--A2L文件生成的方法

    2023-12-12 13:40:04       60 阅读
  3. gdb使用

    gdb使用

    2023-12-12 13:40:04      63 阅读
  4. NB-IoT BC260Y Open CPU SDK⑫多任务调度应用

    2023-12-12 13:40:04       51 阅读
  5. C++大型项目经验

    2023-12-12 13:40:04       58 阅读
  6. Windows使用virtualenv创建python环境

    2023-12-12 13:40:04       65 阅读
  7. 使用CloudCompare计算点云曲率 - 编程指南

    2023-12-12 13:40:04       68 阅读