簡単なiPhone向け3Dゲームを作ろう
iPhone向けの3Dゲーム制作の練習シリーズです。
アンリアルエンジンでiPhone向けの3Dゲーム制作方法をまとめていきます。
細かな数値設定などの説明をしない場合もありますので、ご参考程度で確認ください。
※作業環境:UEバージョン5.5.1 Macbook Pro 2019年モデル iPhone11
私の使用したMacの性能だと、作業中の処理落ち、遅延が頻繁に発生しました。
もし同じような端末を使用する場合は、細目に保存することをお勧めします。
タイマー機能実装
今回はタイマー機能を実装していきます。
タイマー処理を追加する
一定時間ごとに処理を実行するようにしていきます。
「BP_ThirdPersonGameMode」を開きます。
「Event Graph」画面を開きます。
適当な位置で右クリックし、「Add Custom Event…」を選択します。
Custom Eventノードの名前を「Timer」に変更します。
「Timer」ノードから「Set Timer by Event」ノードを呼び出します。
「Set Timer by Event」ノードが配置できました。
「Set Timer by Event」ノードの設定を、下の写真のように変更します。
「Set Timer by Event」の「Event」から「Add Custom Event…」を呼び出します。
「Custom Event」ノード名を「CountUp」に変更します。
これで1秒ごとに「CountUp」の処理が実行されるようになります。
ゲームインスタンスを作成する
分数と秒数を管理する変数を「GameInstance」クラスに作成していきます。
「Content」の「ThirdPerson」の「Blueprints」フォルダーを開きます。
右クリックし、「Blueprint Class」を選択します。
「Pick Parent Class」画面が表示されるので「ALL CLASSES」の横の「▲」をクリックします。
クリックするとすべてのクラス一覧が表示されます。
検索バーで「GameInstance」を検索して選択し、クラスを作成します。
ファイル名を「GI_MyGame」にします。
画面右上にある「Settings」をクリックし、「Project Settings…」を選択します。
左になる「Project」の「Maps & Modes」を選択します。
「Game Instance」の「Game Instance Class」項目を変更します。
先ほど作成した「GI_MyGame」にします。
変数を追加する
「GI_MyGame」に分数と秒数を管理する変数を追加していきます。
「GI_MyGame」を開きます。
「My Blueprint」内にある「VARIABLES」の横の「+」をクリックします。
変数名を「Minite」にし、型を「Integer」にします。
同じように「Second」変数を作成します。
「Compile」します。
ゲーム開始時にタイマーをリセットする
ゲームスタート時に、時間を0分0秒にしていきます。
「BP_ThirdPersonGameMode」を開きます。
ノードの処理はこんな感じになっているはずです。
配置されている「Sequence」ノードの「Add pin」横の「+」をクリックします。
「Sequence」ノードに「Then 2」ピンが追加されます。
「Then 0」に繋いでいた処理を「Then 1」に移動し、「Then 1」に繋いでいた処理を「Then 2」に移動します。
適当な位置で右クリックし、「Get Game Instance」ノードを呼び出します。
このくらいの場所に「Get Game Instance」ノードを配置します。
「Get Game Instance」ノードから「Cast To GI_MyGame」ノードを呼び出します。
「Cast To GI_MyGame」ノードが配置できました。
「Cast To GI_MyGame」ノード上で右クリックし、「Convert to pure cast」を選択します。
「Cast To GI_MyGame」ノードが変化しました。
「Cast To GI_MyGame」ノードの「As GI My Game」を引っ張って、「Promote to variable」を選択します。
「As GI My Game」の変数が作成され、「Set As GI My Game」ノードが配置されます。
「Set As GI My Game」ノードと「Swquence」ノードを繋げます。
「Set As GI My Game」ノードから「Set Minite」ノードを呼び出します。
「Set Minite」ノードが配置できました。
「Set As GI My Game」ノードと「Set Minite」ノードを繋げます。
「Set As GI My Game」ノードから「Set Second」ノードを呼び出します。
「Set Second」ノードを配置できました。
「Set Minite」ノードと「Set Second」ノードを繋げて、ノードを整えます。
ノード処理全体はこんな感じです。
タイマー処理を追加する
「CountUp」のカスタムイベント処理を作成していきます。
「CountUp」ノードを見つけます。
「My Blueprint」の「VARIABLES」内にある「As GI My Game」変数をドラック&ドロップします。
「Get As GI My Game」を選択して「Get As GI My Game」ノードを配置します。
「As GI My Game」ノードから「Get Second」ノードを呼び出します。
「Get Second」ノードが配置できました。
「Get Second」ノードから「Add」ノードを呼び出します。
「+」ノードが配置できました。
「+」ノードに「1」を入力します。
「As GI My Game」ノードから「Set Second」ノードを呼び出します。
「Set Second」ノードを配置できました。
「CountUp」ノードと「Set Second」ノードを繋げ、「+」ノードと「Set Second」ノードを繋ぎます。
「CountUp」ノードから「Branch」ノードを呼び出します。
「CountUp」ノードと「Set Second」ノードの間に「Branch」ノードを配置しました。
「Get Second」ノードから「Greater (>)」ノードを呼び出します。
「Greater (>)」ノードが配置できました。
「Greater (>)」ノードに「59」を入力します。
「Greater (>)」ノードと「Branch」ノードを繋げます。
「Branch」ノードの「False」側に「Set Second」ノードを繋げ替えます。
「As GI My Game」ノードから「Get Minite」ノードを呼び出します。
「Get Minite」ノードが配置できました。
「As GI My Game」ノードから「Set Minite」ノードを呼び出します。
「Set Minite」ノードが配置できました。
「Branch」ノードの「Ture」側に「Set Minite」ノードを繋げます。
「Get Minite」ノードから「Add」ノードを呼び出します。
「+」ノードが配置できました。
「+」ノードに「1」を入力します。
「+」ノードと「Set Minite」ノードを繋げます。
新しく「Set Second」ノードを配置し、「Set Minite」ノードと繋げます。
タイマー処理全体はこんな感じになります。
これで秒数が59秒を超えたときに分数が1増えて、秒数が0に戻ります。
タイマーをスタートさせる
タイマー処理は設定できたので、タイマー処理を実行するタイミングにノードを配置します。
「Sequence」ノードの「Then 1」に繋いでいる処理の最後のノードに追加します。
「Set Player Positiom」から「Timer」ノードを呼び出します。
これでカスタムイベントの「Timer」が実行されるようになりました。
UIのタイマーテキストを更新する
UIで設定したタイマーの文字を更新していきます。
「WBP_Timer」を開きます。
「TextBlock_Timer」と設定したタイマー文字を選択します。
「Details」の「Text」を確認します。
「Text」項目の右にある「[]」マークをクリックし、「Create Binding」を選択します。
この画面に切り替わります。
「Event Graph」画面に切り替えます。
適当な位置で「Get Game Instance」ノードを呼び出します。
「Get Game Instance」ノードから「Cast To GI_MyGame」ノードを呼び出します。
「Event Construct」ノードと「Cast To GI_MyGame」ノードを繋げます。
「Cast To GI_MyGame」ノードの「As GI My Game」を引っ張って「Promote to variable」を選択します。
「As GI My Game」変数が作成され、「Set As GI My Game」が配置されます。
「Get_TextBlock_Timer_Text」画面に切り替えます。
「VARIABLES」内にある「As GI My Game」変数をドラック&ドロップします。
「Get As GI My Game」を選択しノードを配置します。
「Get As GI My Game」ノードから「Get Minite」ノードを呼び出します。
「Get Minite」ノードが配置できました。
「As GI My Game」ノードから「Get Second」ノードを呼び出します。
こんな感じに配置します。
適当な位置で右クリックし、「String」の「Append」ノードを呼び出します。
「Append」ノードが配置できました。
「Append」ノードの「Add pin」横の「+」をクリックし、「C」のピンを追加します。
「Get Minite」ノードと「A」を繋ぎ、「B」には「:」を入力し、「Get Second」ノードと「C」を繋ぎます。
間にある記載の無いノードは「Autocast」ノードなので、繋げた時に自動で呼び出されます。
「Append」ノードと「Return Node」を繋げます。
「To Text (String)」ノードは自動で呼び出されます。
これでテストプレイするとゲーム開始時からタイマーが動き出します。
処理を改善する
59秒から1分に変化するときの挙動を確認するために、ゲームプレイ中の時間を早めます。
やり方は以下の記事で紹介しています。
早めてみると59秒の後が60秒になっています。
望んでいる挙動と異なるので処理を修正します。
「CountUp」ノード付近にある「>」ノードの値を「58」に修正します。
これでテストプレイして確認すると、望んだ挙動になっていると思います。
タイマー機能実装完了
今回はここまでです。
次回は「スタート画面を作成する」の予定です。
前後記事
続き記事作成中!
他の記事を探す
他の記事も気になる方は、以下の記事の目次を確認ください。