見出し画像

【UEFN】クリーチャースポナーでオリジナルの敵を出す方法

今回はクリーチャースポナーでオリジナルの敵を出現させる方法の解説です。見た目がゾンビじゃ世界観に合わないと言ったこともあると思うので、見た目を好きな敵に変えてみたいといった人は是非参考にどうぞ。

①Verseでコードを作る(コピペでOK)

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


Creature_Spawner := class(creative_device):
    @editable ZombieSpawners :[]creature_spawner_device = array{}
    @editable CustomProp1 : creative_prop_asset = DefaultCreativePropAsset
    @editable CustomProp2 : creative_prop_asset = DefaultCreativePropAsset



    OnBegin<override>()<suspends>:void=
        for(Spawner : ZombieSpawners):
            Spawner.SpawnedEvent.Subscribe(OnSpawned)
            Spawner.EliminatedEvent.Subscribe(OnEliminated)


    OnEliminated(Result : device_ai_interaction_result) : void=
        block:



    OnSpawned(ZombieAgent : agent) : void=
        if(FC := ZombieAgent.GetFortCharacter[]):
            FC.Hide()
            if:
                NewProp := SpawnProp(CustomProp1, FC.GetTransform().Translation, FC.GetTransform().Rotation)(0)?
                NewProp2 := SpawnProp(CustomProp2, FC.GetTransform().Translation, FC.GetTransform().Rotation)(0)?


            then:
                spawn:
                    TrackZombie(NewProp, NewProp2, ZombieAgent)
               
    TrackZombie(Prop : creative_prop, Prop2 : creative_prop , Agent : agent)<suspends> : void =
        if(FC := Agent.GetFortCharacter[]):
            race:
                block:
                    FC.EliminatedEvent().Await()
                    Prop.Dispose()
                    Prop2.Dispose()
                    return


                loop:
                    Sleep(0.0)
                    ZombiePos := FC.GetTransform().Translation
                    ZombieRot := FC.GetTransform().Rotation
                    ClosestPlayer := GetClosestPlayer(FC)
                    for(Player : GetPlayspace().GetPlayers() , PlayerFC := Player.GetFortCharacter[]):
                    NewDistance := Distance(ClosestPlayer.GetTransform().Translation, ZombiePos)
                   
                    if(NewDistance < 200.0):
                        Prop2.Show()
                        Prop.Hide()
                   
                    else:
                        Prop.Show()
                        Prop2.Hide()
               
                    spawn{Prop.MoveTo(ZombiePos,ZombieRot, 0.1)}
                    spawn{Prop2.MoveTo(ZombiePos,ZombieRot, 0.1)}


    GetClosestPlayer(FC : fort_character) : fort_character=
        ZombiePos := FC.GetTransform().Translation


        var ClosestPlayer : ?fort_character = false
        var ClosestDistance : float = 99999.0


        for(Player : GetPlayspace().GetPlayers() , PlayerFC := Player.GetFortCharacter[]):
            NewDistance := Distance(PlayerFC.GetTransform().Translation, ZombiePos)
            if(NewDistance < ClosestDistance):
                set ClosestPlayer = option{PlayerFC}
                set ClosestDistance = NewDistance


        if(NewClosestPlayer := ClosestPlayer?):
            return NewClosestPlayer
        return FC

※"Creature_Spawner"の部分だけはVerseコードを作成したときの名称に変更すること

②ブループリントを作成&設定

ブループリントを作成

自分が管理しやすい場所にブループリントを作成します。
名前も自由に決めてしまってOK。

ブループリントを作成すると最初にこの画面が出ると思いますが一番上の「Building Prop」を選択してください。

スケルタルメッシュを追加

ブループリントを開いたら画面左上辺りにあるメニューからスケルタルメッシュを追加してください。(Addと表示されてる+マークから)

追加したらスケルタルメッシュの表示をクリックした状態で次に進んで下さい。

アセットとアニメーションを割り当てる

画面右からMeshとAnimationを割り当てます。
今回は「走る動作」と「攻撃する動作」を実装したいので2つブループリントを作ってます。(走る用のブループリントと攻撃する用のブループリントを作る)

クリーチャースポナーとブループリントをそれぞれ割り当てる

画像のようにそれぞれブループリントを追加します。
見切れていますが以下のように設定してます。
CustomeProp1→Runのブループリント
CustomeProp2→Attackのブループリント

ゲームを起動して動作チェック

問題が無ければゲーム上で指定した敵が反映されてると思います。
後は自由に体力や移動速度、出現する数などを調整しましょう。

とは言え、謎のエラーが出てそもそも起動しないこともあると思います。
なので観測出来た範囲内ではありますが、自分が実際に出たエラーの解決法も載せておきます。

③UEFNを起動した時に出るエラー・不具合対策(※観測出来た範囲で記載します)

①不適切な◯◯(データ)がある

UEからアセットをインポートした時にUEFN内で利用できない?データが入ってることがあります。不適切なデータに関しては赤文字のエラー文で警告されるので該当するデータを削除しましょう。(インポートした時に!マークの付いたデータがエラーに引っかかるケースが多い)

ちなみに今回の記事で紹介してるQuadrapeCreaturesの場合、Mapsに入ってるデータが原因でエラーが出たと思うのでそれを削除すればOK。

②Physics Asset~◯◯のポリゴン数が超過してる

「使ってるモデルの◯◯ポリゴン数が超過してる」といった内容のエラーが出る時があります。このエラーが表示されたら「Physics Asset」と名のついたアセットを開くと上の画像の項目が表示されるので「Max Hull Verts」の項目の数字を少し下げる→Generate All Bodiesを選択すればOKです。(モデルを覆ってたコリジョンの形が球体になると思う)

③敵の向きがおかしい

「マップ上に出てきて動いてるけど自分のキャラの方向を向いてない」場合、ブループリント内のモデルを弄る必要があります。

上の画像のようにモデルが向いてる方向を「左下のX軸」と同じ向きに修正すればOKです。

④敵の位置が上下ズレている

この解決策も③と同じで、ブループリント内のモデルの位置情報を弄る必要があります。

モデルが地面に対して浮いている→Z軸の数値を下げる
モデルが地面に対して埋まっている→Z軸の数値を上げる

ここは数値を弄りつつゲーム内で確認する必要があります。


またオリジナルの敵を作る上で新しいエラーが出たらその都度追記しようと思います、それでは。

いいなと思ったら応援しよう!