スキンを切り替えるサンプルコードです。
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