ループをつかいぐるぐる同じ行動をさせてみよう

①はじめに

インターフェイスをつかいNPCを目標地点まで移動させることができることを前提としてお話をします。まだ確認できていない方はこちらから確認してみてください。

クリエナビ - UEFNにはじめてふれ...
インターフェイスをつかいNPCを目標地点まで移動させてみよう - クリエナビ 仕掛けをクラスとよび、クラスがもつ機能を使い、新しい効果をもたらすクラスをつくったわけです。 クラスがもつ機能
②複数個の目標地点を移動させるには

NPCを移動させる目標地点は以下のようなコードになるとお話しました。

NavigationTarget := MakeNavigationTarget(NPCNewPoint)

その目標地点へ移動させるにはこのようなコードになりました。

NavResultGoTo :=Navigatable.NavigateTo(NavigationTarget)

これら2つのコードを1ペアとすると、複数個の目標地点を移動させるにはそのペアを増やせばいいわけです。

そして、複数個の目標地点をぐるぐると移動させ続けるには、ある機能を使うと良いです。

③loop

loopという機能があります。

loopを使えば、NPCに同じ行動を続けさせることができます。

複数個の目標地点をぐるぐるまわるようにverseスクリプトを用意します。

NPCには、スポーン地点→目標1→目標2→目標3→スポーン地点→目標1→…と移動を続けてもらいます。

以下のスクリプトをコピー&ペーストしてください。#メモに補足メモを書いています。ご確認ください。


using { /Fortnite.com/AI }
using { /Verse.org/Simulation }
using { /Fortnite.com/Characters }
using { /UnrealEngine.com/Temporary/SpatialMath }

 
Test_Device<public> := class(npc_behavior):

    OnBegin<override>()<suspends>:void=
        Print("NPCが登場したよ!")

        
        if:
            Agent := GetAgent[]
            Character := Agent.GetFortCharacter[]
            Navigatable := Character.GetNavigatable[]

            #NPCがスポーンした位置
            NPCSpawnPoint := Character.GetTransform().Translation
            #目標1
            NPCNewPoint := NPCSpawnPoint + vector3{X:=0.0 ,Y:=-3000.0, Z:=0.0}
            #目標2
            NPCNewPoint2 := NPCNewPoint + vector3{X:=1800.0 ,Y:=0.0, Z:=0.0}
            #目標3
            NPCNewPoint3 := NPCNewPoint2 + vector3{X:=0.0 ,Y:=3000.0, Z:=0.0}

            
        
        then:
            #NPCには、スポーン地点→目標1→目標2→目標3→スポーン地点→目標1→...
            #とぐるぐる同じところをまわってほしい。
            #loopを使うと同じ行動を続けさせることができる。
            #インデックスに注意
            loop:
                #目標地点を定めます。
                #目標1をターゲットにする場合は、NavigationTargetとする。
                NavigationTarget := MakeNavigationTarget(NPCNewPoint)
                #目標2をターゲットにする場合は、NavigationTarget2とする。
                NavigationTarget2 := MakeNavigationTarget(NPCNewPoint2)
                #目標3をターゲットにする場合は、NavigationTarget3とする。
                NavigationTarget3 := MakeNavigationTarget(NPCNewPoint3)
                #NPCがスポーンした位置をターゲットにする場合は、NavigationTarget4とする。
                NavigationTarget4 := MakeNavigationTarget(NPCSpawnPoint)

                #目標地点をぐるぐると移動していきます。
                #NavigationTargetへ移動する。
                NavResultGoTo :=Navigatable.NavigateTo(NavigationTarget)
                #NavigationTarget2へ移動する。
                NavResultGoToNext := Navigatable.NavigateTo(NavigationTarget2)
                #NavigationTarget3へ移動する。
                NavResultGoToNext2 := Navigatable.NavigateTo(NavigationTarget3)
                #NavigationTarget4へ移動する。
                NavResultGoToNext3 := Navigatable.NavigateTo(NavigationTarget4)

            
    OnEnd<override>():void=
        Print("Goodbye, NPC!")

セッションを開始してみると、NPCがぐるぐると移動し続けてくれます。

わかりやすく目標地点に旗を設置したい場合は、こちらを確認してみてください。

クリエナビ - UEFNにはじめてふれ...
インターフェイスをつかいNPCを目標地点まで移動させてみよう - クリエナビ 仕掛けをクラスとよび、クラスがもつ機能を使い、新しい効果をもたらすクラスをつくったわけです。 クラスがもつ機能
④まとめ

loopをご紹介しました。

loopがない場合はどのような挙動になるかなとか、目標地点の座標を変更するとどうなるか等を確認してみると、とても面白いですよ。

それでは、また。

お疲れさまでした。

ご質問やご感想はお気軽にコメント欄まで!

コメントする