5593人加入学习
(18人评价)
【旧版】Unreal初级课程 - 3D吃豆人

旧版课程,制作完成于2018-03-29,基于Unreal 4.18

价格 免费
// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "AIController.h"
#include "Enemy.h"
#include "AIEnemy.generated.h"

/**
 * 
 */
UCLASS()
class PACMAN_API AAIEnemy : public AAIController
{
	GENERATED_BODY()
	
public:
	// 要重写的函数
	// 相当于beginplay,每当开启一个AI的时候调用,首先执行OnPossess
	void OnPossess(class APawn* InPawn) override;
	// 移动停止后调用
	virtual void OnMoveCompleted(FAIRequestID RequestID, const FPathFollowingResult& Result) override;

	void SearchNewPoint();

private:
	class AEnemy* Bot;
};
// Fill out your copyright notice in the Description page of Project Settings.


#include "Public/AIEnemy.h"
#include "NavigationSystem.h"

void AAIEnemy::OnPossess(class APawn* InPawn)
{
	Super::OnPossess(InPawn);
	// 获得Enemy,肉体
	Bot = Cast<AEnemy>(InPawn);
}

void AAIEnemy::OnMoveCompleted(FAIRequestID RequestID, const FPathFollowingResult & Result)
{
}

void AAIEnemy::SearchNewPoint()
{
	// 判断导航网格在不在
	UNavigationSystemV1* NavMesh = UNavigationSystemV1::GetCurrent(this);
	// 如果在
	if (NavMesh)
	{
		// 设置搜索半径
		const float SearchRadius = 1000.0f;
		// 设置一个点
		FNavLocation RandomPt;
		
		// 以敌人的位置为中心,这个半径为范围,找一个点,
		const bool bFound = NavMesh->GetRandomReachablePointInRadius(Bot->GetActorLocation(), SearchRadius, RandomPt);
		
		// 如果能找到
		if (bFound)
		{
			// 移动到这个点
			MoveToLocation(RandomPt);
		}
	}
}

注意:

Possess()使用OnPossess代替

使用UNavigationSystemV1*,需要引入头文件:#include "NavigationSystem.h"

[展开全文]

控制敌人的AI,它们就像僵尸一样,只是在迷宫里面来回的走动,不会管主角在哪里,被主角吃了回到初始位置重新出发。

[展开全文]

授课教师

SIKI学院老师

课程特色

图文(1)
下载资料(1)
视频(30)

学员动态