【UE】UEC++ CurveFloat、CurveVector、CurveLinearColor

news2024/9/24 5:30:43

目录

【UE】UEC++ CurveFloat、CurveVector、CurveLinearColor

一、CurveFloat

二、CurveVector

三、CurveLinearColor

四、材质设置

五、运行结果


【UE】UEC++ CurveFloat、CurveVector、CurveLinearColor

一、CurveFloat

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "CurveActor.generated.h"

UCLASS()
class CURVEPROJECT_API ACurveActor : public AActor
{
	GENERATED_BODY()
public:	
	ACurveActor();
	virtual void Tick(float DeltaTime) override;
protected:
	virtual void BeginPlay() override;
private:
	UPROPERTY(EditAnywhere)
	UStaticMeshComponent* Sphere;
	UPROPERTY(EditAnywhere)
	UStaticMesh* Mesh;
	UPROPERTY(EditAnywhere)
	UMaterial* Material;
	UPROPERTY()
	UMaterialInstanceDynamic* MaterialInstance;
private:
	UPROPERTY(EditAnywhere)
	class UCurveFloat* CurveFloat;
	UPROPERTY()
	float CurveFloatValue;
	UPROPERTY()
	float CurveFloatTime;
public:
	UFUNCTION()
	void UpdateByCurveFloat(float InDeltaTime);
};
#include "CurveActor.h"

#include "Kismet/KismetMaterialLibrary.h"

ACurveActor::ACurveActor()
{
	PrimaryActorTick.bCanEverTick = true;
	
	Mesh = ConstructorHelpers::FObjectFinder<UStaticMesh>(TEXT("StaticMesh'/Engine/EditorMeshes/EditorSphere.EditorSphere'")).Object;
	Material = ConstructorHelpers::FObjectFinder<UMaterial>(TEXT("Material'/Game/Materials/M_Curve.M_Curve'")).Object;
	
	Sphere = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Sphere"));
	Sphere->SetupAttachment(RootComponent);
	SetRootComponent(Sphere);
	Sphere->SetStaticMesh(Mesh);
}

void ACurveActor::BeginPlay()
{
	Super::BeginPlay();
	MaterialInstance = UKismetMaterialLibrary::CreateDynamicMaterialInstance(this,Material); 
	Sphere->SetMaterial(0,MaterialInstance);
}

void ACurveActor::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);
	UpdateByCurveFloat(DeltaTime);
}

void ACurveActor::UpdateByCurveFloat(float InDeltaTime)
{
	if(!CurveFloat)return;
	
	CurveFloatValue = CurveFloat->GetFloatValue(CurveFloatTime);
	MaterialInstance->SetScalarParameterValue(FName(TEXT("Opacity")), CurveFloatValue);
	float MinTime;
	float MaxTime;
	CurveFloat->GetTimeRange(MinTime, MaxTime);
	if(MaxTime <=(CurveFloatTime+=InDeltaTime))
	{
		CurveFloatTime=0;
	}
}

二、CurveVector

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

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "CurveActor.generated.h"

UCLASS()
class CURVEPROJECT_API ACurveActor : public AActor
{
	GENERATED_BODY()
public:	
	ACurveActor();
	virtual void Tick(float DeltaTime) override;
protected:
	virtual void BeginPlay() override;
private:
	UPROPERTY(EditAnywhere)
	UStaticMeshComponent* Sphere;
	UPROPERTY(EditAnywhere)
	UStaticMesh* Mesh;
	UPROPERTY(EditAnywhere)
	UMaterial* Material;
	UPROPERTY()
	UMaterialInstanceDynamic* MaterialInstance;
private:
	UPROPERTY(EditAnywhere)
	class UCurveVector* CurveVector;
	UPROPERTY()
	FVector3d CurveVectorValue;
	UPROPERTY()
	float CurveVectorTime;
public:
	UFUNCTION()
	void UpdateByCurveVector(float InDeltaTime);
};
// Fill out your copyright notice in the Description page of Project Settings.

#include "CurveActor.h"

#include "Curves/CurveVector.h"
#include "Kismet/KismetMaterialLibrary.h"

ACurveActor::ACurveActor()
{
	PrimaryActorTick.bCanEverTick = true;
	
	Mesh = ConstructorHelpers::FObjectFinder<UStaticMesh>(TEXT("StaticMesh'/Engine/EditorMeshes/EditorSphere.EditorSphere'")).Object;
	Material = ConstructorHelpers::FObjectFinder<UMaterial>(TEXT("Material'/Game/Materials/M_Curve.M_Curve'")).Object;
	
	Sphere = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Sphere"));
	Sphere->SetupAttachment(RootComponent);
	SetRootComponent(Sphere);
	Sphere->SetStaticMesh(Mesh);
}

void ACurveActor::BeginPlay()
{
	Super::BeginPlay();
	MaterialInstance = UKismetMaterialLibrary::CreateDynamicMaterialInstance(this,Material); 
	Sphere->SetMaterial(0,MaterialInstance);
}

void ACurveActor::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);
	UpdateByCurveVector(DeltaTime);
}

void ACurveActor::UpdateByCurveVector(float InDeltaTime)
{
	if(!CurveVector)return;

	CurveVectorValue = CurveVector->GetVectorValue(CurveVectorTime);
	SetActorScale3D(CurveVectorValue);
	float MinTime;
	float MaxTime;
	CurveVector->GetTimeRange(MinTime, MaxTime);
	if(MaxTime <=(CurveVectorTime+=InDeltaTime))
	{
		CurveVectorTime=0;
	}
}

三、CurveLinearColor

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

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "CurveActor.generated.h"

UCLASS()
class CURVEPROJECT_API ACurveActor : public AActor
{
	GENERATED_BODY()
public:	
	ACurveActor();
	virtual void Tick(float DeltaTime) override;
protected:
	virtual void BeginPlay() override;
private:
	UPROPERTY(EditAnywhere)
	UStaticMeshComponent* Sphere;
	UPROPERTY(EditAnywhere)
	UStaticMesh* Mesh;
	UPROPERTY(EditAnywhere)
	UMaterial* Material;
	UPROPERTY()
	UMaterialInstanceDynamic* MaterialInstance;
private:
	UPROPERTY(EditAnywhere)
	class UCurveLinearColor* CurveLinearColor;
	UPROPERTY()
	FLinearColor CurveLinearColorValue;
	UPROPERTY()
	float CurveLinearColorTime;
public:
	UFUNCTION()
	void UpdateByCurveLinearColor(float InDeltaTime);
};
// Fill out your copyright notice in the Description page of Project Settings.

#include "CurveActor.h"

#include "Curves/CurveLinearColor.h"
#include "Kismet/KismetMaterialLibrary.h"

ACurveActor::ACurveActor()
{
	PrimaryActorTick.bCanEverTick = true;
	
	Mesh = ConstructorHelpers::FObjectFinder<UStaticMesh>(TEXT("StaticMesh'/Engine/EditorMeshes/EditorSphere.EditorSphere'")).Object;
	Material = ConstructorHelpers::FObjectFinder<UMaterial>(TEXT("Material'/Game/Materials/M_Curve.M_Curve'")).Object;
	
	Sphere = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Sphere"));
	Sphere->SetupAttachment(RootComponent);
	SetRootComponent(Sphere);
	Sphere->SetStaticMesh(Mesh);
}

void ACurveActor::BeginPlay()
{
	Super::BeginPlay();
	MaterialInstance = UKismetMaterialLibrary::CreateDynamicMaterialInstance(this,Material); 
	Sphere->SetMaterial(0,MaterialInstance);
}

void ACurveActor::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);
	UpdateByCurveLinearColor(DeltaTime);
}

void ACurveActor::UpdateByCurveLinearColor(float InDeltaTime)
{
	if(CurveLinearColor == nullptr || MaterialInstance == nullptr)return;
	
	CurveLinearColorValue = CurveLinearColor->GetLinearColorValue(CurveLinearColorTime);
	MaterialInstance->SetVectorParameterValue(FName(TEXT("Color")), CurveLinearColorValue);
	float MinTime;
	float MaxTime;
	CurveLinearColor->GetTimeRange(MinTime, MaxTime);
	if(MaxTime <=(CurveLinearColorTime+=InDeltaTime))
	{
		CurveLinearColorTime=0;
	}
}

四、材质设置

五、运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1285371.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人工智能时代AIGC绘画实战

系列文章目录 送书第一期 《用户画像&#xff1a;平台构建与业务实践》 送书活动之抽奖工具的打造 《获取博客评论用户抽取幸运中奖者》 送书第二期 《Spring Cloud Alibaba核心技术与实战案例》 送书第三期 《深入浅出Java虚拟机》 送书第四期 《AI时代项目经理成长之道》 …

RAG落地实践、AI游戏开发、上海·深圳·广州线下工坊启动!星河社区重磅周

飞桨星河社区在成立的5年以来&#xff0c;已汇集660万AI开发者&#xff0c;覆盖深度学习初学者、在职开发者、企业开发者、高校教师、创业者等&#xff0c;已成为AI领域最具影响力的社区之一&#xff0c;无论是AI爱好者还是AI开发者&#xff0c;都能在这里探索AI的无限可能。飞…

如何无线桥接路由器,让你的网络覆盖范围变大,做到网络信号无缝连接

你是否希望通过在两个路由器之间创建无线网桥(网络桥接)来扩大网络覆盖范围?好吧,你来对地方了!在当今日益互联的世界,拥有一个强大可靠的网络比以往任何时候都更重要。 无线网桥允许你无线连接两个或多个路由器,有效地扩展网络覆盖范围,并在更大的区域提供无缝的互联…

算法-滑动窗口

一、滑动窗口思想 概念 在数组双指针里&#xff0c;我们介绍过 "对撞型" 和 "快慢型" 两种方式&#xff0c;而滑动窗口思想就是快慢型的特例。 实际使用 计算机网络中有滑动窗口协议&#xff08;Sliding Window Protocol&#xff09;&#xff0c;该协议…

02、pytest环境准备

工具准备 python官网下载&#xff1a;https://www.python.org/pycharm官网下载&#xff1a;https://www.jetbrains.com.cn/en-us/pycharm/pytest官方文档&#xff1a;https://docs.pytest.org/en/7.4.x/python-office官网文档&#xff1a;http://www.python-office.com/ 参考…

OA系统是什么,能用低代码开发吗?

OA是什么&#xff1f;管办公室活动的 OA是Office Automation&#xff08;办公自动化&#xff09;的简称&#xff0c;原是指利用电脑进行全自动的办公&#xff0c;现在基本所有和办公相关的系统都可以称作是OA。绝大部分企业将OA用于企业内部的协作沟通&#xff0c;处理企业内部…

NSSCTF 文件上传漏洞题目

目录 [SWPUCTF 2021 新生赛]easyupload1.0 [SWPUCTF 2021 新生赛]easyupload2.0 [SWPUCTF 2021 新生赛]easyupload3.0 [SWPUCTF 2021 新生赛]easyupload1.0 这是一个文件上传漏洞的题目 我们的思路是上传一句话木马&#xff0c;用工具进行连接 先编写一句话木马 将文件后缀…

CSS实现小球边界碰撞回弹

如何通过CSS实现一个物体在屏幕中无限的边界碰撞回弹呢&#xff1f;我们可以使用动画效果实现 代码 我们只做一个小球&#xff0c;通过定位属性叠加动画的方式&#xff0c; 让小球在屏幕中进行运动&#xff0c;通过设置animation的alternate属性来设置回弹。最后&#xff0c;只…

为什么有很多公司的 ERP 系统用得还不如 Excel?

回顾ERP的发展历史&#xff0c;我们不难发现&#xff0c;ERP业务包含范围越来越广&#xff0c;但是让信息化适应业务、辅佐业务&#xff0c;是根植在ERP的诞生基因里面的。 ERP信息化的概念看上去如此美妙&#xff0c;但是在国内企业落地的时候&#xff0c;却出现了很多问题——…

企业课——配置两条静态路由

在广播型的接口&#xff08;如以太网的接口&#xff09;可以不配置出接口&#xff0c;但是要配置下一跳 路由跟踪&#xff1a;tracert ip 1.配置IP地址 2.配置两条路线的静态路由 iprouter-static 目的网段 掩码 出接口 下一跳 3.实现选路&#xff0c;在静态路由配置后…

渗透技巧之403绕过【总结】

文章目录 渗透技巧之403绕过【总结】0x01 前言0x02 背景1.什么是网页403&#xff1f;2.什么是403绕过&#xff1f;3.造成403的成因 0x03 绕过方式1.绕过IP限制2.url覆盖绕过3.扩展名绕过&#xff08;路径fuzz&#xff09;4.更换协议版本5.HTTP 请求方法fuzz6.修改Referer7.修改…

Interpretable Multimodal Misinformation Detection with Logic Reasoning

原文链接 Hui Liu, Wenya Wang, and Haoliang Li. 2023. Interpretable Multimodal Misinformation Detection with Logic Reasoning. In Findings of the Association for Computational Linguistics: ACL 2023, pages 9781–9796, Toronto, Canada. Association for Computa…

智能全彩屏负氧离子监测站-生态环境知识科普

随着人们对健康和环境保护的关注度不断提高&#xff0c;一款名为 WX-FLZ50智能全彩屏负氧离子监测站的新产品应运而生。这款产品能够实时监测环境中的负氧离子浓度&#xff0c;为人们提供空气质量信息&#xff0c;帮助人们更好地了解和保护自身所处的环境。 WX-FLZ50智能全彩屏…

pyecharts可视化作图4:行业分布-条形图

pyecharts做条形图功能也非常强大&#xff0c;本文也只展示基本的功能。 1. 源代码 import pandas as pd from pyecharts.charts import Bar from pyecharts import options as opts from pyecharts.globals import ThemeType# 构建模拟数据 data_dict {行业名称: {0: 钢铁,…

如何解决vue中的组件样式冲突

目录 1&#xff1a;组件样式冲突问题 2&#xff1a;导致组件之间样式冲突的根本原因是&#xff1a; 3&#xff1a;问题演示 4&#xff1a;通过设置scoped解决组件之间样式冲突问题 5&#xff1a;设置scoped解决组件样式冲突的原理 6&#xff1a;使用deep修改子组件的样式…

TikTok新闻视角:短视频如何改变信息传递方式?

随着数字时代的不断发展&#xff0c;信息传递的方式也在不断演变。近年来&#xff0c;短视频平台TikTok崭露头角&#xff0c;通过其独特的15秒短视频形式&#xff0c;逐渐在新闻传播领域占据一席之地。本文将深入探讨TikTok在新闻视角下是如何改变信息传递方式的&#xff0c;以…

深入理解URL、URI和URN在Web开发中的重要性

引言&#xff1a; 在Web开发中&#xff0c;我们经常听到URL、URI和URN这几个术语&#xff0c;它们是构建和理解互联网资源的基础。虽然它们看起来相似&#xff0c;但实际上代表着不同的概念。本文将深入研究URL、URI和URN的定义、用途以及在Web开发中的重要性。 一、什么是URI&…

【Nacos】docker安装

Nacos 官网 Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称&#xff0c;一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集&#xff0c;帮助您…

人力资源管理系统的设计与实现

摘要 作为计算机应用的一部分&#xff0c;使用计算机对人力资源信息进行管理&#xff0c;具有手工管理所无法比拟的优点。例如&#xff1a;检索迅速、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高人力资源管理的效率&#xff0c;也是企业的科学化…

帮企多城市分站系统源码+关键词排名优化推广 附带完整的搭建教程

随着市场竞争的加剧&#xff0c;企业对于网络营销的需求越来越多元化。传统的单一网站已经无法满足企业在网络营销方面的需求&#xff0c;因此我们需要开发一套多城市分站系统&#xff0c;以满足企业在不同地区、不同行业的需求。同时&#xff0c;我们还结合了关键词排名优化推…