范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

UE4创建第一人称角色C

  在这个教程中,我们将学习在虚幻引擎中如何使用C++创建第一人称角色。
  1、第一人称游戏机制
  在视频游戏中,第一人称(First Person)是对游戏玩家角色视点的图形渲染。当今最流行的第一人称游戏类型包括第一人称射击游戏、基于模拟的系统如飞行模拟器等。在这里,游戏玩家无法看到实际的游戏角色网格。虽然他们可能会看到一些零件,如手,武器等。此外,具有第一人称视角的游戏也不需要复杂的动画。 2、第一人称游戏示例
  Village — BioHazard 8 (2021)
  Halo Infinite(2021)
  BioHazard 7(2017)
  3、使用虚幻引擎创建第一人称角色
  我们将使用C++创建一个第一人称角色,然后基于该C++类创建子蓝图类。我们要创建的角色将如下所示:
  这里你可以看到摄像机充当了视点,并为玩家提供第一人称视角视图。胶囊组件以及骨架网格组件、角色移动组件提供了有关角色移动的属性,如行走速度、跳跃Z速度、重力等,默认情况下与虚幻引擎中的角色类一起出现。
  打开C++类文件夹,然后右键单击创建新C++类
  选择角色类并为C++类命名,然后单击"创建"。
  现在,虚幻编辑器将打开源代码编辑器。
  打开C++类的头文件,可以看到它已经附带了一些用于构造函数和覆盖方法的模板代码,例如在游戏启动时调用的 BeginPlay() 和为每帧调用的 Tick()。 在public或protected部分中添加以下函数声明。在这里,每种方法都对应于角色的特定运动。
  然后为UCameraComponent声明一个实例,该实例充当摄像机以提供第一人称视角。在这里,我们指定了UPROPERTY()宏,它告诉虚幻引擎的反射系统,给定的属性应该在基于这个C++类创建的蓝图类中可访问。 UPROPERTY(EditAnywhere,Category="Components") UCameraComponent* Camera;
  注意:请确保导入必要的头文件。
  整个头文件代码如下所示: // Fill out your copyright notice in the Description page of Project Settings.  #pragma once  #include "CoreMinimal.h" #include "GameFramework/Character.h" #include "Camera/CameraComponent.h" #include "FirstPersonPlayerCharacter.generated.h"  UCLASS() class FIRSTPERSONCHARACTER_API AFirstPersonPlayerCharacter : public ACharacter { 	GENERATED_BODY()  public: 	// Sets default values for this character"s properties 	AFirstPersonPlayerCharacter();  protected: 	// Called when the game starts or when spawned 	virtual void BeginPlay() override;  	UPROPERTY(EditAnywhere,Category="Components") 	UCameraComponent* Camera;  public:	 	// Called every frame 	virtual void Tick(float DeltaTime) override;  	// Called to bind functionality to input 	virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;  	 	void LookRightLeft(float axisvalue);  	 	void LookUpDown(float axisvalue);   	void MoveForwardBackward(float axisvalue);  	 	void MoveRightLeft(float axisvalue);   	void BeginCrouch();  	 	void EndCrouch();  };
  现在打开项目设置,在input部分,我们添加键绑定以使用键盘和鼠标作为输入设备来控制角色:
  现在打开FirstPerson角色类的CPP文件,该文件具有在头文件中声明的构造函数,BeginPlay()和Tick()函数的实现。
  现在,我们需要在构造函数中初始化相机实例: AFirstPersonPlayerCharacter::AFirstPersonPlayerCharacter() {  	// Set this character to call Tick() every frame.  You can turn this off to improve performance if you don"t need it. 	PrimaryActorTick.bCanEverTick = true;    	Camera = CreateDefaultSubobject(TEXT("PlayerCamera")); 	Camera->SetupAttachment(RootComponent);         this->GetCharacterMovement()->GetNavAgentPropertiesRef().bCanCrouch = true; }
  在这里,我们使用 CreateDefaultSubobject() 模板方法来创建实际的相机组件,该方法通过指定组件类类型来创建实际组件,在我们的例子中它是一个相机组件,所以 使用UCameraComponent 类,并在 TEXT() 宏中传入组件的名称。然后,我们将相机附加到根组件,该组件是角色类中的胶囊组件。然后,为了让我们的角色蹲下,我们将角色移动类的蹲伏属性(crouch)设置为 true。
  接下来,为头文件中声明的方法创建实现代码: void AFirstPersonPlayerCharacter::LookRightLeft(float axisvalue)  { 	this->AddControllerYawInput(axisvalue); }  void AFirstPersonPlayerCharacter::LookUpDown(float axisvalue)  { 	this->AddControllerPitchInput(axisvalue); }  void AFirstPersonPlayerCharacter::MoveForwardBackward(float axisvalue)  { 	this->AddMovementInput(this->GetActorForwardVector() * axisvalue); }  void AFirstPersonPlayerCharacter::MoveRightLeft(float axisvalue)  { 	this->AddMovementInput(this->GetActorRightVector() * axisvalue); }  void AFirstPersonPlayerCharacter::BeginCrouch()  { 	this->Crouch(); 	 }  void AFirstPersonPlayerCharacter::EndCrouch()  { 	this->UnCrouch(); }
  AddMovementInput() : 此方法沿给定的世界方向矢量(通常归一化)添加移动输入,按ScaleValue的值缩放。如果 ScaleValue < 0,则移动方向相反。scale值是函数中的轴值参数。其值范围为 +1.0f 至 -1.0f。
  此方法有一个FVector类型的参数 WorldDirection。对于前后移动,我们获取角色的前向向量并将其乘以比例值。在我们的例子中,当玩家按W时,比例值将为+1.0f,乘以向前矢量,它成为+ve矢量,玩家向前移动类似,当玩家按S时,比例值将为-1.0f,乘以向前矢量,它成为-ve矢量,玩家向后移动相同的概念应用于左右移动。
  AddControllerPitchInput ():围绕Y轴的旋转被称为俯仰,它处理角色的上下观察。 AddControllerYawInput ():旋转的Z轴称为偏航,它处理角色的左右观察。 Crouch() 和 Uncrouch() 这两个方法是角色类的内置方法,用于执行蹲伏和取消蹲伏操作。
  接下来,我们需要将输入键与这些函数挂钩。它可以通过使用角色类的 SetupPlayerInputComponent(UInputComponent *  PlayerInputComponent) 方法来完成,因为角色类是pawn类的子类。在该函数中,在下面添加此代码行: PlayerInputComponent->BindAxis(TEXT("Horizontal"),this,&AFirstPersonPlayerCharacter::LookRightLeft); 	PlayerInputComponent->BindAxis(TEXT("Vertical"),this,&AFirstPersonPlayerCharacter::LookUpDown); 	PlayerInputComponent->BindAxis(TEXT("ForwardBackward"),this,&AFirstPersonPlayerCharacter::MoveForwardBackward); 	PlayerInputComponent->BindAxis(TEXT("RightLeft"),this,&AFirstPersonPlayerCharacter::MoveRightLeft); 	PlayerInputComponent->BindAction(TEXT("Jump"),IE_Pressed,this,&ACharacter::Jump); 	PlayerInputComponent->BindAction(TEXT("Crouch"),IE_Pressed,this,&AFirstPersonPlayerCharacter::BeginCrouch); 	PlayerInputComponent->BindAction(TEXT("Crouch"),IE_Released,this,&AFirstPersonPlayerCharacter::EndCrouch);
  在这里,我们设置实际的轴输入和动作输入,并传递要调用的函数引用将它们与移动函数挂钩。
  现在编译代码并在ue4编辑器中打开C++文件夹,右键单击并基于此C++类创建蓝图。
  打开蓝图,确保勾选相机选项中的Use Pawn Control Rotation。这将允许相机在充当控制器时根据鼠标移动进行旋转。
  完整的 FirtPersonPlayerCharacter.cpp 代码: // Fill out your copyright notice in the Description page of Project Settings.   #include "FirstPersonPlayerCharacter.h" #include "DrawDebugHelpers.h" #include "Engine/World.h" #include "Kismet/GameplayStatics.h" #include "GameFramework/PlayerController.h" #include "GameFramework/CharacterMovementComponent.h" #include "Components/InputComponent.h"  // Sets default values AFirstPersonPlayerCharacter::AFirstPersonPlayerCharacter() {  	// Set this character to call Tick() every frame.  You can turn this off to improve performance if you don"t need it. 	PrimaryActorTick.bCanEverTick = true;  	Camera = CreateDefaultSubobject(TEXT("PlayerCamera")); 	Camera->SetupAttachment(RootComponent);  	     this->GetCharacterMovement()->GetNavAgentPropertiesRef().bCanCrouch = true;      	PhysicsHandle = CreateDefaultSubobject(TEXT("Hand")); 	HoldingSocket = CreateDefaultSubobject(TEXT("HoldingSocket"));  	       }  // Called when the game starts or when spawned void AFirstPersonPlayerCharacter::BeginPlay() { 	Super::BeginPlay(); 	 	if(PhysicsHandle == nullptr) 	{ 		UE_LOG(LogTemp,Warning,TEXT("Got it")); 	} 	 }  // Called every frame void AFirstPersonPlayerCharacter::Tick(float DeltaTime) { 	Super::Tick(DeltaTime);  		 		   } 	  }  // Called to bind functionality to input void AFirstPersonPlayerCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { 	Super::SetupPlayerInputComponent(PlayerInputComponent);  	PlayerInputComponent->BindAxis(TEXT("Horizontal"),this,&AFirstPersonPlayerCharacter::LookRightLeft); 	PlayerInputComponent->BindAxis(TEXT("Vertical"),this,&AFirstPersonPlayerCharacter::LookUpDown); 	PlayerInputComponent->BindAxis(TEXT("ForwardBackward"),this,&AFirstPersonPlayerCharacter::MoveForwardBackward); 	PlayerInputComponent->BindAxis(TEXT("RightLeft"),this,&AFirstPersonPlayerCharacter::MoveRightLeft); 	PlayerInputComponent->BindAction(TEXT("Jump"),IE_Pressed,this,&ACharacter::Jump); 	PlayerInputComponent->BindAction(TEXT("Crouch"),IE_Pressed,this,&AFirstPersonPlayerCharacter::BeginCrouch); 	PlayerInputComponent->BindAction(TEXT("Crouch"),IE_Released,this,&AFirstPersonPlayerCharacter::EndCrouch); 	 	  }  void AFirstPersonPlayerCharacter::LookRightLeft(float axisvalue)  { 	this->AddControllerYawInput(axisvalue); }  void AFirstPersonPlayerCharacter::LookUpDown(float axisvalue)  { 	this->AddControllerPitchInput(axisvalue); }  void AFirstPersonPlayerCharacter::MoveForwardBackward(float axisvalue)  { 	this->AddMovementInput(this->GetActorForwardVector() * axisvalue); }  void AFirstPersonPlayerCharacter::MoveRightLeft(float axisvalue)  { 	this->AddMovementInput(this->GetActorRightVector() * axisvalue); }  void AFirstPersonPlayerCharacter::BeginCrouch()  { 	this->Crouch(); 	 	 }  void AFirstPersonPlayerCharacter::EndCrouch()  { 	this->UnCrouch(); }
  原文链接:http://www.bimant.com/blog/ue4-first-person-character/

你是我的春天你是我的春天,那盛开的桃花啊,犹如你灿烂的笑脸,瞬间甜蜜了我的心田。你是我的春天,那北归的小燕子呀,在旧巢中欢快地呢喃,仿佛是把你对我的问候来传!你是我的春天,那山间的两处清潭,似春天是养肝黄金期!建议多吃3种天然养肝菜,平安过春春天是肝脏疾病的高发期,俗话说肝火一烧,百病难熬,肝脏有着人体将军之称,养肝就是养命!李兰娟院士就曾经强调过肝脏与饮食的关系异常密切,要想肝脏健康,生活中良好的饮食和作息习惯很重要立春丨叫醒春天,带上春意去旅行立LICHUN春立春的到来,标志着万物闭藏的冬季已过去,开始进入风和日暖万物生长的春天。草木萌动,万物舒展,给春天最热烈的拥抱。在立春之际,如果你想一睹草长莺飞的美景,江西是一个绝春养阳胜良药,无论男女,建议多吃4样,疏肝养阳,健康过春天导语立春不养阳,郎中跑断腿,建议多吃4样,疏肝养阳,增强抵抗力!立春是二十四节气之首,也是冬天和春天交替的一个节气。虽然,刚进入春天时,天气还是乍寒乍暖。但是,大自然的整体气温还是全国唯一的海上森林公园威海刘公岛国家森林公园不仅仅是一个岛,这是国家5A级景区刘公岛的宣传语,游过之后感觉,这句宣传语名副其实!位于威海湾口的刘公岛,面向黄海,背接威海湾,素有东隅屏藩海上桃源和不沉的战舰之称,地势北陡南缓,穆里尼奥亲手挑出老鼠屎,罗马球员终于有了配合,小魔仙纤腰楚楚罗马上下,重压之下,护犊子的穆里尼奥,无奈亲手挑出了老鼠屎,本来爱才心切的白头发老头,是想打磨这块璞玉,给他充足的时间,宽松的空间,循序渐进成长。但大树下的小伙子飘了,还没打出来,戴奇最低要求是要尽最大努力,希望他们能明白足球的基础在肖恩戴奇处子秀就率领埃弗顿爆冷10击败阿森纳后,他本人接受了BTSport的采访。我一直都专注于球员们,这场胜利属于他们。他们这星期做了很多训练,我对他们的最低要求就是请他们在场宇宙的未知奥秘是否存在智能系统?是否有自我意识?探索未解之谜,宇宙是否像人的大脑一样,正在不断进化当中?宇宙是人类历史上最大的未解之谜。自从人类发现宇宙的存在以来,人们一直在探索它的奥秘。从古代哲学家到现代天文学家,人们都试图找新房装修,智能门锁怎么选择?有网友提出关于新房装修怎么选购门锁的问题新房家居如何选购门锁比较实用?既然是2023年提出的问题,就默认新房家居要选购的是智能锁了,下面的参考意见都是考虑智能锁选购,不涉及机械锁。苹果或于明年更新声学产品线,推出新款AirPodsMax2无线耳机苹果在2020年末发布了AirPodsMax,价格高达4399元,提供了五种颜色选择,分别是太空灰银色天蓝色绿色和粉色。这是苹果旗下首款头戴式无线耳机,再次拓宽了AirPods的产景区的光屁股座位触动了谁的神经?是设计荒诞还是国人太敏感呢?近日在网上流传着一张图片,图中人潮攒动的某景区摆上了几个光屁股座位,游人逛累了就在上面休息。猛地一看,还以为有人光屁股呢!稍一定睛,发现只是几个座位。设计者真的别出心裁,这样的造型
106121!NBA东部第4轰然倒下,创2大耻辱纪录,恩哈组合贡献59分北京时间2022年3月8日上午,NBA常规赛继续进行,公牛主场迎战费城76人。结果,76人队分别以3732222129243329,总比分121106击败公牛。嗯比德和哈登联手贡献如今的古偶剧有多敷衍?撞衫撞景丑男当道还不如20年前这两天,有网友晒出一组图,发现花千骨仙剑3轩辕剑琉璃香蜜沉沉烬如霜琅琊榜等古装剧,都在永康方岩风景区取过景。也就是说,花千骨被囚禁的地方,和紫萱和徐长卿分手的地方是一样的。霍建华竟2天后发布,iPhoneSE3更多信息曝光,国行价格或超预期手机圈在经历了短暂的平淡期之后,马上就要迎来一个新的大爆发。那就是两天后苹果的春节发布会。要说春季发布会以往并不会引起太大的轰动,主要是带来一些Pad,耳机,电脑之类的产品,国内用大S已于韩国登记结婚!经纪人揭复合主因45岁艺人大S(徐熙媛)和汪小菲离婚后,今(8)日无预警宣布和旧爱韩团酷龙52岁成员具俊瞱结婚,震撼演艺圈。大S经纪人稍早回应TVBS新闻网指大S和具俊瞱已在韩国登记结婚,至于复合从49天结婚到离婚两个月再婚猛女大S的爱情,从来快如闪电故事从头说起。1999年,韩国人气组合酷龙到中国台湾开演唱会,大S作为当红主持人,亲自到场追星成了歌迷。后来具俊晔再度访台,演艺圈的朋友介绍23岁的大S给他认识,还说这是你的超级粉在纳木措和你一起走进爱情选择行走,是因为特定的心情。前面那个正在行走的人,当你和我擦肩时,是否也有这样的感觉在这个世界上,有那么一些地方,会随着行走滋生出许多关于爱情的细节?只有走在路上情才更浓。遇到的刹2013年舒马赫事故昏迷,妻子拒绝让其安乐死,每周5万英镑治疗费2021年11月16日,阿尔法罗密欧车队召开新闻发布会,确认了中国车手周冠宇正式加盟该车队的消息。自此,周冠宇成为勒首位签约国际车队的F1车手。周冠宇签约阿尔法罗密欧车队的消息引得科比妻子送祝福,50岁生日的奥尼尔每年能拿多少退休金?数字惊人时光荏苒,在不经意间,曾经在球场上大杀四方的大鲨鱼奥尼尔已经50岁了,不过想来也是,当年和科比一起第一次参加奥尼尔生日的瓦妮莎才17岁,而如今瓦妮莎也已经是39岁的中年人了。在奥尼石油财富给委内瑞拉创造贫困,互联网络游戏给中国带来了什么?1921年,委内瑞拉的第一口油井开发了,石油工业开始蓬勃发展。此后,石油对委内瑞拉的经济和政治产生了深刻的影响,不仅带来滚滚金钱,也带来了贫富悬殊和贪污腐败。这有点类似于影响巨大的李雪健妻子为儿露面,结婚39年陪夫抗癌,称他在拍流浪地球2头号电影院懂小姐(topcinema原创,严禁转载)有的艺人,没什么作品,却天天上娱乐新闻,成为大众的谈资。有的演员,认真拍戏,基本只有在戏里才能看到身影,却日积月累成为令人尊敬的为什么说苗族姑娘敬的酒不能喝?看完你就明白了我国由55个少数民族组成,从这些少数民族的分布上看,主要集中在我国云贵地区,特别是贵州一带,这边高山密林,自古就是少数民族的主要聚居区,如今这些少数民族都在为多彩贵州的旅游事业做出