在C++中使用OnComponentBeginOverlap事件

http://www.cnblogs.com/blueroses/p/5187236.html

写了2个类,因为一开始没有设计好,导致有很多无用代码,而且代码有相当大的修改余地,反正最终结果满足要求,贴下代码仅当抛砖引玉

这里的收集代码写在角色类,通过碰撞事件修改SoulPickup类中的bMoveToCharactor布尔值,来达到移动的目的。如何使用碰撞可以看一下下面的代码

http://www.cnblogs.com/blueroses/p/5187236.html

// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "GameFramework/Actor.h"
#include "Pickup.generated.h"UCLASS()
class THIRDPERSONPLUGIN_API APickup : public AActor
{GENERATED_BODY()public:    // Sets default values for this actor's properties
    APickup();// Called when the game starts or when spawnedvirtual void BeginPlay() override;// Called every framevirtual void Tick( float DeltaSeconds ) override;UFUNCTION(BlueprintPure, Category = "PickUp")bool IsActive();UFUNCTION(BlueprintCallable, Category = "PickUp")void SetActive(bool bActive);//强制内联函数,返回Mesh指针FORCEINLINE class UStaticMeshComponent *GetMesh() const { return PickupMesh; }UFUNCTION(BlueprintNativeEvent)void WasCollected();virtual void WasCollected_Implementation();
protected:bool bIsActive;
private:UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Pickup", meta = (AllowPrivateAccess = "true"))class UStaticMeshComponent *PickupMesh;
};

// Fill out your copyright notice in the Description page of Project Settings.

#include "ThirdPersonPlugin.h"
#include "Pickup.h"// Sets default values
APickup::APickup()
{// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.PrimaryActorTick.bCanEverTick = false;PickupMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("PickupMesh"));RootComponent = PickupMesh;bIsActive = true;
}// Called when the game starts or when spawned
void APickup::BeginPlay()
{Super::BeginPlay();}// Called every frame
void APickup::Tick( float DeltaTime )
{Super::Tick( DeltaTime );}
////设置是否激活
void APickup::SetActive(bool bActive)
{bIsActive = bActive;
}
////查看Pickup是否处于激活状态
bool APickup::IsActive()
{return bIsActive;
}
void APickup::WasCollected_Implementation()
{bIsActive = false;
}

// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "Pickup.h"
#include "SoulPickup.generated.h"/*** */
UCLASS()
class THIRDPERSONPLUGIN_API ASoulPickup : public APickup
{GENERATED_BODY()
public:virtual void BeginPlay() override;virtual void Tick(float DeltaSeconds) override;virtual void WasCollected_Implementation() override;ASoulPickup();UFUNCTION(BlueprintCallable, Category = "SoulPickup")void MoveToCharactor(bool bMove);
protected:UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "SoulPickup")bool bMoveToCharactor;UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "SoulPickup")FVector charactorLocation;UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "SoulPickup")FVector currentLocation;UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "SoulPickup")FVector direction;UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "SoulPickup")float moveSpeed;};

// Fill out your copyright notice in the Description page of Project Settings.

#include "ThirdPersonPlugin.h"
#include "SoulPickup.h"
#include "ThirdPersonPluginCharacter.h"
#include "Kismet/GameplayStatics.h"ASoulPickup::ASoulPickup()
{moveSpeed = 2;PrimaryActorTick.bCanEverTick = true;
}void ASoulPickup::BeginPlay()
{Super::BeginPlay();
}void ASoulPickup::Tick(float DeltaSeconds)
{Super::Tick(DeltaSeconds);if (bMoveToCharactor){AThirdPersonPluginCharacter *MyCharacter = Cast<AThirdPersonPluginCharacter>(UGameplayStatics::GetPlayerPawn(this, 0));if (MyCharacter){//取得角色坐标,与当前自己的位置charactorLocation=MyCharacter->GetActorLocation();currentLocation = GetActorLocation();//取得方向向量并且规范化direction=charactorLocation - currentLocation;direction.Normalize();//算出移动距离并且移动currentLocation += moveSpeed*direction;SetActorLocation(currentLocation);}else{return;}////到达位置就销毁//if (currentLocation==charactorLocation)//{//    Destroy();//}
    }
}void ASoulPickup::WasCollected_Implementation()
{}void ASoulPickup::MoveToCharactor(bool bMove)
{//设置是否移动到角色
    bMoveToCharactor = bMove;
}

转载于:https://www.cnblogs.com/blueroses/p/5187174.html

最近想写一个类似鬼泣 收集红魂的功能,陆续写点东西作为笔记相关推荐

  1. 请写一个java程序实现线程连接池功能_写一个java程序实现线程连接池的功能

    线程池: import java.util.linkedlist; public abstract class manager { private string mthreadpoolname = n ...

  2. php实现跑马灯闪亮,JavaScript_基于jquery实现的文字向上跑动类似跑马灯的效果,想实现一个类似跑马灯的效果, - phpStudy...

    基于jquery实现的文字向上跑动类似跑马灯的效果 想实现一个类似跑马灯的效果,发现跑马灯有空格.效果也不美观,于是用jquery写了个 页面代码 恭喜187****5204获得1000RBM 恭喜1 ...

  3. 用android怎么做一个机器人,怎样写一个类似ROS的易用的android机器人框架(2)

    怎样写一个类似ROS的易用的android机器人框架(2) 接下来,我们一步步来实现这个几个目标 ROS式节点通讯的Android实现 相关代码实现位于 ai.easy.robot.framework ...

  4. [html] 写一个类似刮刮卡效果的交互,即鼠标划过时显示号码

    [html] 写一个类似刮刮卡效果的交互,即鼠标划过时显示号码 <title>Document</title> <style> *{ margin:0; paddi ...

  5. [css] 使用css的attr()写一个类似a标签title的提示框

    [css] 使用css的attr()写一个类似a标签title的提示框 .box{position:relative;}.box:hover{content: attr(data-title); di ...

  6. 写一个类似淘宝的ios app需要用到哪些技术?

    写一个类似淘宝的ios app需要用到哪些技术? 让我想起了有人私信我,说不缺钱,做个类似知乎的东西,包括加运营,需要多少钱. 扯淡结束,正好最近看了一点这方面的东西,也许对题主来说有点帮助. 手机淘 ...

  7. 如何在ubuntu上写一个类似sl跑火车指令,“跑甜甜圈”

    如何在ubuntu上写一个类似sl跑火车指令,"跑甜甜圈" 首先创建.c文件 #include <stdio.h> #include <math.h> #i ...

  8. 大根堆与小根堆的理解,如何手写一个堆,以及什么时候用自己手写的堆,什么时候用语言提供堆的api,(二者的区别)

    大根堆与小根堆的理解,如何手写一个堆,以及什么时候用自己手写的堆,什么时候用语言提供堆的api,(二者的区别) 定义 Heap是一种数据结构具有以下的特点: 1)完全二叉树: 2)heap中存储的值是 ...

  9. 欢迎大家讨论:只想要一个最简单的XXX系统,功能最简化的XXX系统

    我们国人总有一种思想,能简化的简化,但是往往我们把真正应该简单化的东西反而没简单化,例如我们的人际关系.一些比较传统的封建思想,往往这些最应该简化的东西是更加搞得深入.复杂. 其实很多东西是简化不来的 ...

最新文章

  1. WORD 排版十技巧
  2. python中matrix是什么意思_初识Python
  3. CTFshow 命令执行 web66
  4. Linux中date命令用法及大小比较
  5. C# IO操作(五)文件的递归加载
  6. C++面试题-面向对象-面向对象概念
  7. 编译lua5.3.2报错提示libreadline.so存在未定义的引用解决方法
  8. 全国日照时数空间分布数据/月度降雨量分布/月均气温分布
  9. html%3ca%3e标签改字体颜色,HTML URL Encoding 参考
  10. 要毕业了,兄弟也签了工作。。。
  11. 采用计算机发布调度命令时 必须严格遵守,调度命令规范格式(公文命令).doc...
  12. 中级微观经济学:Chap 35 外部效应
  13. 项目经理必备向上管理四步法
  14. iOS UITextField自动换行
  15. NCBI|16S原始数据上传
  16. 【公平锁和非公平锁有什么区别?】
  17. python 百度地图api
  18. python判断用户输入的数是正数还是负数
  19. 盘点自动化设备中的四种常用模组
  20. ArcGIS地图数据资源

热门文章

  1. android 平面图app_Android App 开发技术图谱
  2. 【十五】【vlc-android】vlc-sout流媒体输出端源码实现分析【Part 1】
  3. 如何排查、解决那些长时间GC停顿的问题
  4. cbac式_abca式的成语大全
  5. 2. 饶明新 校示范课六年级上册《数学广角-数与形》照片
  6. java倜傥_Javan[贾万,贾范,爪哇]的中文翻译及英文名意思
  7. mysql 大对象_Oracle 4个大对象(lobs)数据类型介绍
  8. 宏观经济学-案例大题
  9. OPENCV学习(更新)
  10. UTF-8特殊符号集