スキンの切り替えについて

Modを作ろう

スキンを切り替えるサンプルコードです。

Actor Property PlayerRef Auto
Armor Property NewSkin Auto

Int NeckDelta = 0.5

Function UpdateSkin()
    ; スキンを設定する
    PlayerRef.GetActorBase().SetSkin(NewSkin)

    ; 表示を更新する
    PlayerRef.QueueNiNodeUpdate()

    ; 首の隙間を補正する
    PlayerRef.UpdateWeight(NeckDelta)
EndFunction

SetSkin関数を実行するとNeckDeltaがリセットされるようです。

ActorのWeightを変更していて首の隙間を補正している場合、首の隙間が復活します。

再度補正する必要があります。Actorが抜刀していると、抜刀アニメーションが発生します。

おそらく内部的にアニメーション処理が初期化されるのでしょう。

そこで、抜刀しているのであれば、納刀まで補正を遅らせます。

Function UpdateSkin()
    ; (略)

    if PlayerRef.IsWeaponDrawn()
        RegisterForAnimationEvent(PlayerRef, "weaponSheathe")
    else
        UnregisterForAnimationEvent(PlayerRef, "weaponSheathe")
        PlayerRef.UpdateWeight(NeckDelta)
    endif
EndFunction

Event OnAnimationEvent(ObjectReference akSource, string asEventName)
    UnregisterForAnimationEvent(PlayerRef, "weaponSheathe")
    PlayerRef.UpdateWeight(NeckDelta)
EndEvent
タイトルとURLをコピーしました