UE5 スタディ ノート (継続的に更新)
インターフェース
ホットキー
ホットキー | 説明 |
---|---|
ふ | レベル 1 のカード オブジェクトを見つけます: ゲーム オブジェクトの名前をダブルクリックするか、ゲーム オブジェクトの名前を選択します。 |
マウスの中ボタン | モバイル ビュー |
Alt + マウスの左ボタンで移動 | 回転視野 |
マウスホイールのスクロール | ズーム視野 |
Alt + マウスの右ボタン マウスをドラッグ | ズーム視野 |
マウスの左ボタンでマウスを移動 | 行き来する |
WASD + マウスの右ボタン | 自由に歩き回る |
ローミング中にマウスホイールをスワイプ | ローミング速度を調整する |
複製するオブジェクトを選択し、Alf キーを押しながらドラッグします | ゲームオブジェクトのクローン |
ゲームオブジェクトを選択し、END を押します | プラットフォームにドロップ |
- 選択したオブジェクト:
1 枚のカードを見つけます オブジェクト: ゲーム オブジェクトの名前をダブルクリックするか、ゲーム オブジェクトの名前を選択し、F キーを押します - 視野操作に関連するカードのショートカット キー:
視野の移動: マウスの中ボタンを押したままマウスを移動します 視野の
回転: マウスの右ボタンを押したままにしてマウスを移動するか、Alt + マウスの左ボタンを押したままにしますマウスを動かす
視野をズームする: マウスホイールをスライド
させて視野をズームする 2: Alt + マウスを押したままにする マウスを右クリックしてドラッグ
する シーンを前後に移動する: マウスの左ボタンを押したままにしてマウスを移動する
Freeローミング シーン: WASD + マウスの右ボタンを押してマウスを移動します
ローミング速度を調整します: ローミング時にマウス ホイールをスライドさせます - ゲームオブジェクトの複製: 複製するオブジェクトを選択し、Alf キーを押しながら任意の軸をドラッグしてドラッグを実行します。
- プラットフォームに落ちる: ゲーム オブジェクトを選択し、END を押します。
UI
- UI ウィジェット ブループリントの作成: コンテンツ ブラウザで右クリック → ユーザー インターフェース -> ウィジェット ブループリント
- UI 編集インターフェイスは主に、ツールバー、コントロール、階層パネル、作業領域、画面サイズ調整、プロパティ バー、アニメーション領域に分かれています。
ウィジェット コントロールが使用されます
UI コントロールをレベルに表示する
デフォルトでは、UI コントロール ブループリントはレベルにレンダリングされないため、コントロール ブループリントを作成して作成する必要があります。
ステップ 1: コントロール ノードを作成して、指定されたコントロール ブループリントを作成する
ステップ 2: ビューポート ノードに追加して Widget ブループリントをレベルに表示する
マウスカーソルを表示
デフォルトでは、ゲーム領域をクリックするとマウスが非表示になるため、UI をうまく操作できず、制御するにはデフォルトでマウス ポインターを表示する必要があります。
- レベル ブループリントでプレーヤー コントローラーを取得する プレーヤー コントローラーを介してマウス ポインターを表示する
- マウスの表示と非表示は FlipFlop で制御できます
コントロールの値を動的に設定する
- 変数による制御変更の取得
- バインディング作成機能による修正
ウィジェット コントロールの種類
リッチ テキスト ブロック
リッチ テキストとも呼ばれるマルチフォーマット テキストは、主に 1 つのテキスト セグメントで複数のテキスト スタイル (フォント、サイズ、色、形式) の外観を表現し、画像コンテンツと混合することもできます。
テキスト ブロック データ テーブルを作成します。データ テーブル→RichTextStyleRow 矢印を選択し、最初の行に Default という名前を付ける必要があります。
使用例这是个<Red>多格</>的文本
カスタム コントロール
他のUIコントロールのサブコントロールとしても使用できる独自のコントロールを作成します
コントロールをカスタマイズする手順は次のとおりです。
- カスタム コントロール ブループリントを作成する
- コントロールとスタイルを設定する
- 他のUでは、コントロールの使用はユーザーの作成によって実現されます
名前付きスロット
ユーザーによって作成された UI が他の UI のサブコントロールになる場合、デフォルトではサブコントロールを持つことはできません. サブコントロールが必要な場合は、名前付きスロットを U| に追加する必要があります。サブコントロール
実装手順は次のとおりです。
- ステップ 1: 名前付きスロットを使用して UI コントロールを作成する
- ステップ 2: UI コントロールを他の U| パネルにインポートし、対応するコントロールをスロットに追加する
国境
- ボーダー コントロールは、要素の背景として使用できる子要素を 1 つだけ含むことができるコンテナーです。
- サブコントロールを境界コントロールに追加した後、サブコントロールには、アンカー ポイント、位置、サイズ、およびその他の特性を設定する自由がありません。
テキストボックス
ユーザーに入力テキストを提供するために使用されるコントロール
ComboBox (文字列) (ComboBoxString)
ドロップダウン オプションの実装に使用
かぶせる
U コントロールをレイヤーごとに積み重ねるために使用されます。複数の子コントロール間でスタックが発生する可能性があります
ウィジェットスイッチャー
指定されたインデックスで子要素を表示するために使用されます
- 複数の子要素を持つ
- 子要素をインデックスで表示
- インデックスは 0 から始まります
ラップボックス
複数のサブコントロール用にパックされたボックス。サブコントロールがパッケージ ボックスに収まらない場合は、自動的にラップされます
- 複数の子コントロールを持つことができます
- スロットパディングを設定することで、子コントロール間の間隔を設定できます
- 折り返しサイズを設定することで、折り返しコントロールの折り返し幅を設定できます
均一グリッド パネル
複数のサブ要素を管理します。サブ要素のサイズは同じサイズです。すべてのサブ要素はデフォルトで一緒に積み重ねられます。上下左右を調整して要素の位置を制御できます。
グリッド パネル
複数のサブ要素を管理します。サブ要素のサイズは個別に設定できます。デフォルトでは、すべてのサブ要素が一緒に積み重ねられ、要素の位置は上下左右に調整して制御できます。
水平ボックス
水平方向の複数のサブ要素を管理するために使用されます.サブ要素のサイズは個別に設定できます.サブ要素の種類は異なる場合があります.サブ要素の位置は左右にのみ切り替えることができます.
垂直パネル (垂直ボックス)
垂直方向の複数のサブ要素を管理するために使用されます.サブ要素のサイズは個別に設定できます.要素のタイプは異なる場合があります.サブ要素の位置は上下にのみ切り替えることができます.
サイズボックス
子コントロールのサイズを設定するために使用されます。子コントロールは 1 つだけ存在できます
- コンテンツへのサイズがチェックされていない場合、サブレイアウトは無効になり、サブコントロールのサイズはサイズ ボックスのサイズと一致します。
- サイズがコンテンツに達すると、サブコントロールのサイズはサブレイアウトを介して設定または制御できます
スクロールボックス
子コントロールの幅または高さの合計がスクロール ボックスを超えると、はみ出した部分が非表示になり、スクロール バーが表示されます。
セレクトボックス (CheckBox)
特定の状態が選択されているか選択されていないかを示すために使用され、True/False または/No の選択をユーザーに促します。
2つの状態があります
- チェックボックス: 説明テキストを追加でき、選択ボックスのサイズを画像に設定する必要があります
- トグル ボタン: 通常、説明テキストを追加しません
バインド値: ブール値を選択ボックスに追加して、選択とキャンセルを制御できます
設計図
ブループリント機能
ノート
対応するノードを選択し、c を押してコメントします
切断する
atl + マウスの左ボタン
設計図の分類
レベル ブループリント
各レベルはレベル ブループリントに対応します。レベル ブループリントは作成できません。デフォルトのレベル ブループリントのみを開いて使用できます。
ゲームインスタンス
-
レベル切り替え時に破壊されないデータ管理設計図。
-
グローバルなゲーム情報を保存します。
ゲームモード_
- レベルを切り替えると破棄される、すべてのプレイヤーの入力コントロールやカメラなどの基本情報を管理します。
- ゲーム内の各ミニゲームは、異なるゲームモードと見なすことができます。通常、ミニゲームをロードすることは、新しいレベルをロードすることでもあります。
- このレベルの下に情報を格納します。現在開催中のイベント時間や役割ランキングなど。
ポーン/キャラクター (ゲーム キャラクター)
- 1 人のプレーヤーの入力コントロールとリアルタイム情報を管理します。キャラクターが死亡すると破壊され、復活後に新たに生成されます。
- キャラクターの位置、リアルタイムの血液量、スキル CD、手札に残っている各カードなど、現時点でのキャラクター データを保存します。
ブループリント ノード
●イベントノード
●関数ノード
●変数ノード
●参照ノード
論理ノード
シーケンス ノード(Sequence) の役割は、実行コードの長いシーケンスを管理しやすいセグメントに分割することです。注: シーケンス ノードはシングル スレッドです。セグメンテーションは、ピンの順序で実行されます。
Branch ( Branch ) ノード: 指定された条件が満たされているかどうかを判断するために使用され、条件が true の場合は true 出力ノードのロジックを実行し、条件が false の場合は false ノードのロジックを実行します。
ForLoop ノード: 関数を指定された回数実行するノード。ループの開始値と終了値を渡す必要がある
ForLoopWithBreak ノード: ブレークが実行されない場合は、ForLoop ノードの機能と同じです ブレークが実行されると、ループが終了します
WhileLoop ノード: ループ条件が満たされている限り、ノードは直接実行されます
Do N ノード: 実行が N 回目に達すると、関数は実行されなくなります。再度実行するには、リセットリセットを実行する必要があります
Do Once ノード: 1 回だけ実行します。もう一度実行する場合は、Reset を実行する必要があります。
Flip Flop ノード: Flip ノードとも呼ばれ、2 つの関数を出力し、最初に関数 A を実行し、2 回目に関数 B を実行し、3 回目に関数 A を再度実行できます。
ゲートノード:ゲートノードとも呼ばれます。つまり、ゲートが開いているときはいつでも機能を実行でき、ゲートが閉じているときは機能を実行できません
**Multi Gate(マルチゲート)**ノード: デフォルトでは出力は順次実行され、すべての出力が完了すると出力は実行されません。出力ノードの追加、ループ、ランダム化が可能
ForEachLoop : 配列の ForLoop
ForEachLoopWithBreak : 配列の ForLoopWithBreak
タイムライン ノード ( Timeline ) はブループリントの特別なノードであり、その機能は、指定された値を指定された時間内にターゲット値に変更することです。
Interpolation ( Lerp ) ノード: Alpha の値に応じて A と B の間の値を返します。 Alpha の値の範囲は 0 ~ 1 です。
Deactivata : コンポーネントを無効にする
アクティブ化: コンポーネントを有効にします
遅延: 遅延
関数ノード
**レベルを開く**新しいレベルを開く
** クラスからアクタを生成 (Spawn Actor from Class) ** アクタを生成
ゲームを一時停止する (Set Game Paused)
ブループリント クラス間の相互作用
コントロール アクション マッピングの追加
- ブループリントに他のブループリントの変数を追加します。
ブループリント クラスはレベル ブループリントとやり取りします
- レベル ブループリントでカスタム イベントを定義する
- ブループリント クラスの Exgecute コンソール コマンド ノードを実行して、レベル ブループリント イベントを実行します。
- イベントはカスタム イベントでなければならないことに注意してください。それ以外の場合、呼び出しは失敗します。
- Command に ce イベント名を入力します。これは ce で始まる必要があり、ce はキーワードであり、ce の後にスペースを追加する必要があります。
設計図アプリケーション
変数
変数の取得と設定:
変数の取得: ctr を押したまま変数をイベント グラフにドラッグします
変数の設定: Alt を押したまま変数をイベント グラフにドラッグします
配列
-
項目の検索 ( Findltem ): 指定された要素の添字を検索します
-
配列の長さを取得する ( Length )
-
配列の最後の要素の添え字を取得します: lastindex
-
配列要素を挿入する ( insert )
-
配列に要素があるかどうかを判断する ( Contains )
-
removeElement()
関数とカスタム イベント
同じ点:
-
はい、 - セグメントロジックを関数としてカプセル化することは可能です
-
パラメータを受け取ることができます
-
他の設計図は直接呼び出すことができます
違い:
- 関数にはローカル変数を使用できますが、カスタム イベントには使用できません
- 関数は戻り値を定義できますが、カスタム イベントには戻り値がありません
- カスタム イベントのロジックはイベント グラフで定義され、関数はグラフのみを使用する必要があります。
- 関数は delay (遅延関数) を使用できませんが、カスタム イベントは使用できます。これは、関数呼び出しが結果を待ってからフォローアップ アクションが行われるためであり、イベントはトリガーされる限り実行され続けます。
- 論理的な観点から: イベントがトリガーされる限り、処理ロジックはイベント自体とは何の関係もありませんが、関数は通常、何らかのデータを渡し、最終的に処理結果に焦点を当てて結果を出力します。データ全体を返すためのロジックの実行へのパラメータ プロシージャは、関数本体が注意を払う必要があるものです。
選ぶ:
- この関数のみを実行する必要があり、遅延機能がある場合は、カスタム イベントを使用します。
- 計算を行って結果を返す必要がある場合は、関数を使用します
関数とマクロ
ブループリント マクロの全体的な機能は関数の機能に似ており、いくつかの機能アルゴリズムをカプセル化し、状況に応じて複数の入力ピンと出力ピンを追加できます。
- 関数には 1 つのピンしかありませんが、マクロには複数の入力ピンと出力ピンを含めることができます。
- 他のブループリントは関数を呼び出すことができますが、マクロは呼び出せません
マクロ ライブラリ
複数のマクロ ライブラリ ファイルを管理するために使用されます.ファイルであるため、マクロ ライブラリを作成する必要があります.マクロ ライブラリ内のマクロは、すべてのブループリントで呼び出すことができます
イベントディスパッチャー
デリゲートのような使い方
イベント ディスパッチャーを定義する
割り当てイベント ディスパッチャ
イベント ディスパッチャーを呼び出す
UI でのイベント ディスパッチャの使用
ui コントロールを作成するときは、ui のトリガー メソッドを継承する必要があります。その後、イベント ディスパッチャーを使用できます。
- イベントをグラフにバインドします。
- イベント ディスパッチャを作成し、イベントを通じて呼び出します。
コンポーネント
読み取りインターフェイス メソッド
算数
クォータニオン
クォータニオンの作成 (Make Quat)
クォータニオンへのオイラー角 (Euler(Quat) から作成)
スプリット クォータニオン (Break Quat)
クォータニオン回転ベクトル (Rotate Vector(Quat))
型変換 (Cast To)
- Get Play ポーン Get Player
通常の設計図は、直接取得して型変換できる特別な設計図に書き込むことができます。
例: GetPlayPawn、GetPlayCharacter、GetPlayController
- アニメーションの設計図 (遭遇する前に記録しておいてください)
アニメーション ブループリントに変換する場合、最初にアニメーション ブループリントのインスタンスを取得する必要があります。このインスタンスのターゲットは、アニメーション化されたメッシュでそれを取得することです。
- ゲームモデル (GameMode)
ゲームの優先度は最高です。GetGameMode を直接取得できます
- 衝突検出 (On Component Begin Overlap)
アクターは衝突によって取得され、型変換を実行します。
X線撮影を含む
- トラバーサル ハード ルックアップ (クラスのすべてのアクタを取得) は、より多くのパフォーマンスを消費します
参照されているすべてのクラスを調べる
含む:
- タグ付きのすべてのアクターを取得
- インターフェイスを使用してすべてのアクターを取得
- クラスのアクタを取得 (1 つだけ決定されている場合)
補充:
UICalss を探すときは、Get All Widgets Of Class を使用します
get で検索
ブレーク付き For Each ループ
- 間接参照 (共通)
使用する必要のあるブループリントを変数に格納し、このブループリントを呼び出すときに参照することです。
ケースは、レベルで通信する必要がある 2 つのブループリントを取得し、ブループリント変数を通信ブループリントに割り当てることです。
設計図ケース
X線検査
使用される重要なノード
Convert Mouse Location To World Space (マウス スクリーン座標からワールド座標へ)
チャネルごとのライン トレース(光線検出)
インターフェイス操作
インターフェイスにロードされたビューポートに追加
[外部リンクの画像転送に失敗しました。ソース サイトにはリーチング防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-B6UnQF0s-1681438840906)(null)]
UI画像修正
UI パネルのブラシまたはスタイルで画像を変更できます。青写真の SetBrush または SetStyle を使用できます。
タグによるモデルの読み取り
モデルにタグを設定すると、タグを介して取得できます
材料
3を長押しし、パネルをクリックしてカラーノードを作成します
モデル
C++
カメラ制御スクリプト
AMyPawn.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Pawn.h"
#include "MyPawn.generated.h"
UCLASS()
class XZ_PROJECT_API AMyPawn : public APawn
{
GENERATED_BODY()
public:
// Sets default values for this pawn's properties
AMyPawn();
UPROPERTY(VisibleAnywhere, Category = "My Pawn Component")
class UStaticMeshComponent* myStaticMesh;
UPROPERTY(VisibleAnywhere, Category = "My Pawn Component")
class UCameraComponent* myCamera;
UPROPERTY(EditDefaultsOnly, Category = "My Pawn|Vector")
FVector CameraLocation;
UPROPERTY(EditDefaultsOnly, Category = "My Pawn|Vector")
FRotator CameraRotation;
UPROPERTY(EditAnywhere, Category = "My Pawn|Vector")
float MaxSpeed;
FORCEINLINE UStaticMeshComponent* GetStaticMeshComponent() { return myStaticMesh; }
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
// Called to bind functionality to input
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
void MoveRight(float Value);
void MoveForward(float Value);
void MouseLeft(float Value);
void MouseRight(float Value);
void MouseX(float Value);
void MouseY(float Value);
void MouseWheelAxis(float Value);
float VelocityRight;
float VelocityForward;
FVector Velocity;
FVector VelocityMouse;
FVector VelocityMouseForward;
float getMouseRight;
float getMouseLeft;
float getMouseX;
float getMouseY;
float getMouseWheelAxis;
float MouseMoveSpeed;
};
MyPawn.cpp
// Fill out your copyright notice in the Description page of Project Settings.
#include "MyPawn.h"
#include "Components/StaticMeshComponent.h"
#include "Camera/CameraComponent.h"
// Sets default values
AMyPawn::AMyPawn()
{
// Set this pawn to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
RootComponent = CreateDefaultSubobject<USceneComponent>(TEXT("RootComponent"));
myStaticMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("myStaticMesh"));
myStaticMesh->SetupAttachment(GetRootComponent());
static ConstructorHelpers::FObjectFinder<UStaticMesh>staticMeshAsset(TEXT("StaticMesh'/Game/s_Models/test1.test1'"));
static ConstructorHelpers::FObjectFinder<UMaterialInterface>materialAsset(TEXT("Material'/Game/s_Models/Materials/black.black'"));
if (staticMeshAsset.Succeeded() && materialAsset.Succeeded())
{
myStaticMesh->SetStaticMesh(staticMeshAsset.Object);
myStaticMesh->SetMaterial(0, materialAsset.Object);
myStaticMesh->SetWorldScale3D(FVector(1.0f));
}
myCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("myCamera"));
myCamera->SetupAttachment(GetStaticMeshComponent());
CameraLocation = FVector(-300.0f, 0.0f, 300.0f);
CameraRotation = FRotator(-45.0f, 0.0f, 0.0f);
myCamera->SetRelativeLocation(CameraLocation);
myCamera->SetRelativeRotation(CameraRotation);
AutoPossessPlayer = EAutoReceiveInput::Player0;
MaxSpeed = 100.0f;
VelocityRight = 0.0f;
VelocityForward = 0.0f;
Velocity = FVector(0.0f);
VelocityMouse = FVector(0.0f);
VelocityMouseForward = FVector(0.0f);
getMouseRight = 0.0f;
getMouseLeft = 0.0f;
getMouseX = 0.0f;
getMouseY = 0.0f;
getMouseWheelAxis = 0.0f;
MouseMoveSpeed = 0.0f;
}
// Called when the game starts or when spawned
void AMyPawn::BeginPlay()
{
Super::BeginPlay();
}
// Called every frame
void AMyPawn::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
MouseMoveSpeed = -FMath::Clamp(myCamera->GetRelativeLocation().X * 0.02f, -1000.0f, -10.0f);
Velocity = RootComponent->GetRightVector() * VelocityRight + RootComponent->GetForwardVector() * VelocityForward;
if (getMouseLeft == 1)
{
Velocity = RootComponent->GetRightVector() * -getMouseX * MaxSpeed * MouseMoveSpeed + RootComponent->GetForwardVector() * -getMouseY * MaxSpeed * MouseMoveSpeed;
AddActorWorldOffset(Velocity * DeltaTime, true);
}
if (getMouseRight == 1)
{
FRotator PitchRotation = myCamera->GetComponentRotation();
PitchRotation.Pitch = FMath::Clamp(PitchRotation.Pitch += getMouseY, -80.0F, 0.0F);
myCamera->SetWorldRotation(PitchRotation);
FRotator YawRotation = RootComponent->GetComponentRotation();
YawRotation.Yaw = YawRotation.Yaw += getMouseX;
RootComponent->SetWorldRotation(YawRotation);
}
if (getMouseWheelAxis != 0)
{
VelocityMouseForward.X = getMouseWheelAxis * MaxSpeed * MouseMoveSpeed;
myCamera->AddLocalOffset(VelocityMouseForward * DeltaTime, true);
}
}
// Called to bind functionality to input
void AMyPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
PlayerInputComponent->BindAxis(TEXT("s_MoveForward"), this, &AMyPawn::MoveForward);
PlayerInputComponent->BindAxis(TEXT("s_MoveRight"), this, &AMyPawn::MoveRight);
PlayerInputComponent->BindAxis(TEXT("s_MouseLeft"), this, &AMyPawn::MouseLeft);
PlayerInputComponent->BindAxis(TEXT("s_MouseRight"), this, &AMyPawn::MouseRight);
PlayerInputComponent->BindAxis(TEXT("s_MouseX"), this, &AMyPawn::MouseX);
PlayerInputComponent->BindAxis(TEXT("s_MouseY"), this, &AMyPawn::MouseY);
PlayerInputComponent->BindAxis(TEXT("s_MouseWheelAxis"), this, &AMyPawn::MouseWheelAxis);
}
void AMyPawn::MoveRight(float Value)
{
VelocityRight = FMath::Clamp(Value, -1.0f, 1.0f) * MaxSpeed;
}
void AMyPawn::MoveForward(float Value)
{
VelocityForward = FMath::Clamp(Value, -1.0f, 1.0f) * MaxSpeed;
}
void AMyPawn::MouseLeft(float Value)
{
getMouseLeft = Value;
}
void AMyPawn::MouseRight(float Value)
{
getMouseRight = Value;
}
void AMyPawn::MouseX(float Value)
{
getMouseX = FMath::Clamp(Value, -1.0f, 1.0f);
}
void AMyPawn::MouseY(float Value)
{
getMouseY = FMath::Clamp(Value, -1.0f, 1.0f);
}
void AMyPawn::MouseWheelAxis(float Value)
{
getMouseWheelAxis = FMath::Clamp(Value, -1.0f, 1.0f);
}
リリース
アスペクト比変更設定
ウィンドウがパッケージ化された後、ドラッグ ウィンドウの解像度比を変更することはできません。[プロジェクトの設定] -> [プロジェクトの説明] -> [設定] -> [ウィンドウの縦横比を保持する] -> false;
公開モードを選択
ウィンドウズ
開発モード
リリース パッケージを実行した後、~ キーをクリックしてリリース設定を変更します。
解像度の変更など
ウィンドウモード
r.setres 1920x1080w
フルスクリーンモード
r.setres 1920x1080f
void AMyPawn::MouseX(float Value)
{
getMouseX = FMath::Clamp(Value, -1.0f, 1.0f);
}
void AMyPawn::MouseY(float Value)
{
getMouseY = FMath::Clamp(Value, -1.0f, 1.0f);
}
void AMyPawn::MouseWheelAxis(float Value)
{
getMouseWheelAxis = FMath::Clamp(Value, -1.0f, 1.0f);
}
## 发布
#### 宽高比变化设置
windows打包后,拖拽窗口分辨率比例不能改变,Project Settings->Project description->settings->should window preserve [aspect](https://so.csdn.net/so/search?q=aspect&spm=1001.2101.3001.7020) ratio ->false;
#### 选择发布模式
##### **windows**
**开发模式**
运行发布包后点击~键,可以对发布设置进行更改。
比如修改分辨率
**窗口模式**
r.setres 1920x1080w
**全屏模式**
r.setres 1920x1080f