11uec++多人游戏【自定义表面-物理材质】

这篇具有很好参考价值的文章主要介绍了11uec++多人游戏【自定义表面-物理材质】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

打开编辑器设置,点击物理 

将重新构建带物理材质的actor,游戏,c++,ue4

 拉到这个位置

将重新构建带物理材质的actor,游戏,c++,ue4

 设置两个表面材质将重新构建带物理材质的actor,游戏,c++,ue4

 创建新的文件夹

将重新构建带物理材质的actor,游戏,c++,ue4

创建物理材质

将重新构建带物理材质的actor,游戏,c++,ue4

将重新构建带物理材质的actor,游戏,c++,ue4

将重新构建带物理材质的actor,游戏,c++,ue4

进入材质,赋予表面

将重新构建带物理材质的actor,游戏,c++,ue4 将重新构建带物理材质的actor,游戏,c++,ue4

 打开该头文件

将重新构建带物理材质的actor,游戏,c++,ue4

定义两个变量

#define SURFACE_FLESHDEFAULT  SurfaceType1
#define SURFACE_FLESHVULNERABLE  SurfaceType2

 打开武器类,将打击特效的名字改成默认特效,当没有打到人身上,就用这个特效。

将重新构建带物理材质的actor,游戏,c++,ue4

	//击中物体(如地板或墙的特效)
	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Weapon")
	class UParticleSystem * DefaultImpactEffect;
	
	//击中身体特效
	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Weapon")
	class UParticleSystem * FleshImpactEffect;

导入头文件

#include "PhysicalMaterials/PhysicalMaterial.h"
#include "CoopGame.h"

完善fire函数

void ASWeapen::Fire()
{
	//创建一个撞击句柄,用来获取弹道相关信息
	FHitResult Hit;
	//弹道的起点,我们设置为角色眼睛的位置
	AActor * MyOwner = GetOwner();
	if (MyOwner)
	{	//位置
		FVector EyeLocation;
		//方向
		FRotator EyeRotator;
		//得到眼睛的位置和角度
		MyOwner->GetActorEyesViewPoint(EyeLocation, EyeRotator);
		//弹道的终点就是起点+方向*10000
		FVector TraceEnd = EyeLocation + (EyeRotator.Vector() * 1000);
		//弹道特效的结束点
		FVector TraceEndPoint = TraceEnd;
		//设置碰撞通道为可见性通道
		FCollisionQueryParams  QueryParams;
		//让射线忽略玩家和枪
		QueryParams.AddIgnoredActor(MyOwner);
		QueryParams.AddIgnoredActor(this);
		//符合追踪设为true,可以让射击更加精准
		QueryParams.bTraceComplex = true;
		//返回命中目标的表面材质
		QueryParams.bReturnPhysicalMaterial = true;


		//在创建一个单轨迹线来计算弹道
		//LineTraceSingleByChannel击中物体返回true
		if (GetWorld()->LineTraceSingleByChannel(Hit, EyeLocation, TraceEnd, ECC_Visibility, QueryParams))
		{
			//命中对象
			AActor * HitActor = Hit.GetActor();
			//调用伤害函数
			//参数分别为伤害对象、基础伤害、设计方向、命中信息(命中句柄)、MyOwner->GetInstigatorController(暂时不了解)
			//this(伤害者) 和伤害类型 
			UGameplayStatics::ApplyPointDamage(HitActor, 20, EyeRotator.Vector(), Hit, MyOwner->GetInstigatorController(), this, DamageType);
			//得到命中物体表面材质
			EPhysicalSurface SurfaceType = UPhysicalMaterial::DetermineSurfaceType(Hit.PhysMaterial.Get());
			//根据材质的不同,进行不同的处理
			UParticleSystem * SelectedEffect = nullptr;
			switch (SurfaceType)
			{
				//这两种情况是一个效果
			case SURFACE_FLESHDEFAULT:
			case SURFACE_FLESHVULNERABLE:
				SelectedEffect = FleshImpactEffect;
				break;
			default:
				SelectedEffect = DefaultImpactEffect;
				break;
			
			}

			//生成特效在命中点
			//ImpactEffect:特效 ImpactPoint:打击点 Rotation():打击方向
			if (SelectedEffect)
			{
				UGameplayStatics::SpawnEmitterAtLocation(GetWorld(), SelectedEffect, Hit.ImpactPoint, Hit.ImpactNormal.Rotation());
			}
			//命中的时候,修改弹道特效的终点
			TraceEndPoint = Hit.ImpactPoint;



		}
		//方便debug
		DrawDebugLine(GetWorld(), EyeLocation, TraceEnd, FColor::Red, false, 1, 0, 1);
		//射击特效
		PlayFireEffects(TraceEndPoint);
	}

}

编译之后,在蓝图里选择特效

将重新构建带物理材质的actor,游戏,c++,ue4

打开人物的材质

将重新构建带物理材质的actor,游戏,c++,ue4

右键任意地方,选择人物所有形体

将重新构建带物理材质的actor,游戏,c++,ue4

将重新构建带物理材质的actor,游戏,c++,ue4 

 然后按住ctrl点头部,这样头部就不被选中了

将重新构建带物理材质的actor,游戏,c++,ue4

 这里选择材质

将重新构建带物理材质的actor,游戏,c++,ue4

然后给头部也选择一个材质

将重新构建带物理材质的actor,游戏,c++,ue4 

 编译测试,打人和打地板特效不一样。文章来源地址https://www.toymoban.com/news/detail-735030.html

到了这里,关于11uec++多人游戏【自定义表面-物理材质】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • UE4/5多人游戏详解(七、自定义委托,实现寻找会话和加入会话的函数,通过Steam进行两台电脑的联机)

    目录 可能出现问题(在六部分的测试可能无法连接的问题【在末尾加上了,怕有人没看见在这里写一下】) 自定义委托 调整位置 创建更多的委托和回调函数给菜单: 多播和动态多播  代码: 委托变量  代码: 回调函数  代码: 绑定委托和动态函数:  代码: 头文件添加

    2024年02月04日
    浏览(116)
  • Unity基础课程之物理引擎6-关于物理材质的使用和理解

     每个物体都有着不同的摩擦力。光滑的冰面摩擦力很小,而地毯表面的摩擦力则很大。另外每种材料也有着不同的弹性,橡皮表面的弹性大,硬质地面的弹性小。在Unity中这些现象都符合日常的理念。虽然从原理上讲,物体的摩擦力和弹性有着更复杂的内涵,例如普通的钢板

    2024年02月07日
    浏览(46)
  • 【Unity2022】Unity多人游戏开发教程-Netcode for GameObjects-使用命令行启动多人游戏

    首先亮出文档,可以直接去看官方文档。 本文章大部分内容来源于官方文档,另一部分为笔者讲解的教程。 如果英语不好,或看不懂文档的人,可以阅读本文章。 官方文档 官方文档的中文翻译: 中文翻译 本教程使用的开发环境如下: Windows10 Unity 2022.3.0f1c1 Netcode for GameOb

    2024年02月08日
    浏览(57)
  • Unity联网多人游戏技术方案调研

    Listen Server (Host) 和 Relay转发服务器游戏包同时包含客户端和服务端逻辑,联网时一个客户端开主,称为Host,其他客户端连入。局域网和互联网都支持。互联网需要有一个匹配服务器帮助找到不同人建立的主机。如果不使用Relay服务器,那对于互联网连接就要使用NAT穿透下的

    2023年04月09日
    浏览(77)
  • 【项目多人协作的困扰】git-cli 解决 git merge 合并时 lock 文件变化,忘记重新安装依赖的问题

    相信大家多多少少都遇到过,当主线分支的代码,合入到自己的分支的时候,如果这时候,主线中有一些 依赖的更新或者添加或者删除 ,如果合入之后,没有及时的 install 的话,项目启动的时候,可能就会报错! 使用教程 打开项目根目录,运行 随后就会在你的项目中开始

    2024年02月14日
    浏览(44)
  • 【UE5 多人联机教程】04-加入游戏

    1. 新建一个控件蓝图,父类为“USC_Button_Standard”  控件蓝图命名为“UMG_Item_Room”,用于表示每一个搜索到的房间的界面 打开“UMG_Item_Room”,在图表中新建一个变量,命名为“Session”  变量类型为“蓝图会话结果”,选择可编辑实例和生成时公开 2. 打开“UMG_MainMenu”,添加

    2024年02月15日
    浏览(60)
  • unity使用PhotonEngine实现多人联机游戏开发(一)

    先来了解一下PhotonEngine(光子引擎),这是德国ExitGame公司开发的网络引擎,photonengine简单易上手,很多游戏公司开发的网络游戏都是使用的这个。这个网络引擎里面包括了PhotonCloud(光子云)、photonServer(光子服务器)、PhotonQuantum(确定性量子引擎)、PhotonVoice(光子语音)

    2024年02月07日
    浏览(52)
  • 《Python多人游戏项目实战》第一节 简单的方块移动

    目录 1.1 设置游戏窗口 1.2 绘制一个方块 1.3 编写服务端代码 1.4 完善客户端代码 1.5 完整代码下载地址 在本节,我们将通过一个简单的方块移动程序进入多人联机游戏的大门。每个玩家打开游戏窗口后都可以控制一个方块,当某个玩家移动方块后,其余玩家的窗口上会自动更

    2023年04月19日
    浏览(33)
  • unity游戏破解 修改粒子材质

    游戏汉化 遇到一个 比较文化差异的 问题  最近从google play 逆向一个杀人游戏 准备汉化 处理 其中游戏杀人的效果 血是红色的 那这时候小朋友的家长就要说了呀!!!!!! 哎呀  这游戏太血腥 太暴力啦 不行 不能让娃娃玩 !!!! 那没办法呀 改 改 改 首先呢 这血的效果

    2023年04月08日
    浏览(41)
  • 项目实训--Unity多人游戏开发(十一、PUN框架--游戏场景篇(加载与同步))

    本地加载 有许多方法,举几个例子: 本地加载 本地异步加载(场景内容过多时,防止卡顿异步加载) 多人游戏加载场景 pun2插件加载 这个异步加载起初是觉得场景内容如果过多会引起卡顿。所以把这个应用在了单机模式上。 至于多人游戏加载场景,可能用不到而且也没法

    2024年02月01日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包