斯坦福UE4 + C++课学习记录 2:移动与相机跟随

一、相机跟随

SurCharacter.h

// SurCharacter.h

class USpringArmComponent;
class UCameraComponent;

class SURKEAUE_API ASurCharacter : public ACharacter
{
protected:    
	// 弹簧臂组件    			  
	UPROPERTY(VisibleAnywhere)			
	USpringArmComponent* SpringArmComp;	
	// 相机组件    
	UPROPERTY(VisibleAnywhere)		
	UCameraComponent* CameraComp;
}

SurCharacter.cpp

// SurCharacter.cpp
#include GameFramework/SpringArmComponent.h
#include Camera/CameraComponent.h

ASurCharacter::ASurCharacter()
{	
	// 创建相应实例<创建的class>("UE中显示的该控件的名字")	
	SpringArmComp = CreateDefaultSubobject<USpringArmComponent>("SpringArmComp");
	CameraComp = CreateDefaultSubobject<UCameraComponent>("CameraComp");	
	// 将相应对象attach,RootComponent是根控件,即角色的胶囊体组件	
	SpringArmComp->SetupAttachment(RootComponent);	
	CameraComp->SetupAttachment(SpringArmComp);
}
  1. 为了编译更快,在.h中声明弹簧臂和相机的class,在.cpp引用相应头文件
  2. 弹簧臂组件在GameFramework/SpringArmComponent.h头文件中;
    相机组件在Camera/CameraComponent.h头文件中

二、人物移动与转向

  1. 人物移动的相关代码需要编写在自动生成的SetupPlayerInputComponent函数中,这个函数中已经传入了PlayerInputComponent组件
  2. 人物移动对应轴Axis绑定,并指定每次能移动的值(移动速度)
  3. .cpp中编写的所有函数都需要在.h文件中声明

SurCharacter.cpp

// SurCharacter.cpp

// 实现角色向前移动
void ASurCharacter::MoveForward(float value)
{	
	// 朝某个方向前进value,GetActorForwardVector指向角色正前方	
	AddMovementInput(GetActorForwardVector(), value);
}

void ASurCharacter::MoveRight(float value)
{
	AddMovementInput(GetActorRightVector(), value);
}

void ASurCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{	
	// “UE中调用的名称”,this指针表示移动这个角色,&自定义移动方法	
	PlayerInputComponent->BindAxis("MoveForward", this, &ASurCharacter::MoveForward);
	PlayerInputComponent->BindAxis("MoveRight", this, &ASurCharacter::MoveRight);
	
	PlayerInputComponent->BindAxis("Turn", this, &APawn::AddControllerYawInput);    
	PlayerInputComponent->BindAxis("LookUp", this, &APawn::AddControllerPitchInput);
}
  1. 由移动组件来调用绑定具体的移动方法
  2. 在UE中设置具体输入,值为1.0向前,值为-1.0向后。
  3. 后面会修改为UE5的增强输入
  4. UE中的围绕Z轴旋转称之为YAW,围绕Y轴旋转称之为Pitch,围绕X轴旋转称之为Roll
  5. 留一个没有理解的问题: 控制器采用的是每一帧都在自增,默认是120帧,如果向前移动默认每帧都加1,到120帧的时候就加速到了120之后在乘以映射的键盘数值就形成了移动的距离。(这段没有看懂)
  6. 利用UE提供的AddControllerYawInput()函数可以得到Yaw方向的旋转。AddControllerPitchInput()函数可以得到Pitch方向的旋转。
    10.设置输入后,还需要在弹簧臂的“摄像机设置”属性中勾选“使用Pawn控制旋转”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值