最近想写一个类似鬼泣 收集红魂的功能,陆续写点东西作为笔记
在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
最近想写一个类似鬼泣 收集红魂的功能,陆续写点东西作为笔记相关推荐
- 请写一个java程序实现线程连接池功能_写一个java程序实现线程连接池的功能
线程池: import java.util.linkedlist; public abstract class manager { private string mthreadpoolname = n ...
- php实现跑马灯闪亮,JavaScript_基于jquery实现的文字向上跑动类似跑马灯的效果,想实现一个类似跑马灯的效果, - phpStudy...
基于jquery实现的文字向上跑动类似跑马灯的效果 想实现一个类似跑马灯的效果,发现跑马灯有空格.效果也不美观,于是用jquery写了个 页面代码 恭喜187****5204获得1000RBM 恭喜1 ...
- 用android怎么做一个机器人,怎样写一个类似ROS的易用的android机器人框架(2)
怎样写一个类似ROS的易用的android机器人框架(2) 接下来,我们一步步来实现这个几个目标 ROS式节点通讯的Android实现 相关代码实现位于 ai.easy.robot.framework ...
- [html] 写一个类似刮刮卡效果的交互,即鼠标划过时显示号码
[html] 写一个类似刮刮卡效果的交互,即鼠标划过时显示号码 <title>Document</title> <style> *{ margin:0; paddi ...
- [css] 使用css的attr()写一个类似a标签title的提示框
[css] 使用css的attr()写一个类似a标签title的提示框 .box{position:relative;}.box:hover{content: attr(data-title); di ...
- 写一个类似淘宝的ios app需要用到哪些技术?
写一个类似淘宝的ios app需要用到哪些技术? 让我想起了有人私信我,说不缺钱,做个类似知乎的东西,包括加运营,需要多少钱. 扯淡结束,正好最近看了一点这方面的东西,也许对题主来说有点帮助. 手机淘 ...
- 如何在ubuntu上写一个类似sl跑火车指令,“跑甜甜圈”
如何在ubuntu上写一个类似sl跑火车指令,"跑甜甜圈" 首先创建.c文件 #include <stdio.h> #include <math.h> #i ...
- 大根堆与小根堆的理解,如何手写一个堆,以及什么时候用自己手写的堆,什么时候用语言提供堆的api,(二者的区别)
大根堆与小根堆的理解,如何手写一个堆,以及什么时候用自己手写的堆,什么时候用语言提供堆的api,(二者的区别) 定义 Heap是一种数据结构具有以下的特点: 1)完全二叉树: 2)heap中存储的值是 ...
- 欢迎大家讨论:只想要一个最简单的XXX系统,功能最简化的XXX系统
我们国人总有一种思想,能简化的简化,但是往往我们把真正应该简单化的东西反而没简单化,例如我们的人际关系.一些比较传统的封建思想,往往这些最应该简化的东西是更加搞得深入.复杂. 其实很多东西是简化不来的 ...
最新文章
- WORD 排版十技巧
- python中matrix是什么意思_初识Python
- CTFshow 命令执行 web66
- Linux中date命令用法及大小比较
- C# IO操作(五)文件的递归加载
- C++面试题-面向对象-面向对象概念
- 编译lua5.3.2报错提示libreadline.so存在未定义的引用解决方法
- 全国日照时数空间分布数据/月度降雨量分布/月均气温分布
- html%3ca%3e标签改字体颜色,HTML URL Encoding 参考
- 要毕业了,兄弟也签了工作。。。
- 采用计算机发布调度命令时 必须严格遵守,调度命令规范格式(公文命令).doc...
- 中级微观经济学:Chap 35 外部效应
- 项目经理必备向上管理四步法
- iOS UITextField自动换行
- NCBI|16S原始数据上传
- 【公平锁和非公平锁有什么区别?】
- python 百度地图api
- python判断用户输入的数是正数还是负数
- 盘点自动化设备中的四种常用模组
- ArcGIS地图数据资源
热门文章
- android 平面图app_Android App 开发技术图谱
- 【十五】【vlc-android】vlc-sout流媒体输出端源码实现分析【Part 1】
- 如何排查、解决那些长时间GC停顿的问题
- cbac式_abca式的成语大全
- 2. 饶明新 校示范课六年级上册《数学广角-数与形》照片
- java倜傥_Javan[贾万,贾范,爪哇]的中文翻译及英文名意思
- mysql 大对象_Oracle 4个大对象(lobs)数据类型介绍
- 宏观经济学-案例大题
- OPENCV学习(更新)
- UTF-8特殊符号集