MOD作成日誌-20130916-[スクリプトでズームする方法] | Withe01のブログ

Withe01のブログ

プレイしたゲームに関するあれこれを書いたBlogです。
PC版SkyrimにおけるMOD作成に関する記事がメインとなります。

もし作成したMODについてご意見等ございましたら、コメント欄に気軽にコメントしていただけたら幸いです。

MOD作成日誌
-20130916-
[スクリプトでズームする方法]

20130919追記

現在GunArts Rifleに「シャープシューティング」にズーム機能を組み込み中。
というのも狙撃用の技でありながらSkyrimにもともと備わっているズーム機能(perk「鷹の目」)が使えなかったため。
*perk「冷静沈着」は作用するのになぜ
perk「鷹の目」使えないんだろうか?よくわからない。というかMOD作成初期のころはズームできていたような覚えがある…。

----------------------------------------
-追記-
ニューゲームすると一時的に無条件で「鷹の目」が使えるようになる模様。
ただし一度でも弓やクロスボウを装備すると弓・クロスボウ限定かつperk「鷹の目」の習得が必要になる。
鷹の目の適用条件を弄って両手武器にも太陽させることができれば、わざわざスクリプトでズーム機能加えないでもいいんだが…。
アニメーション(BowLeftAttackのBowZoom)の発動条件を弄っても効果なし。
perk「鷹の目」自体は発動条件を指定していないので弄りようがない。
「modify bow zoom」の条件を弄れるか?と探してみたが見つからない。
手詰まりか?
----------------------------------------

もともと似たような機能を持つMODとして望遠鏡MOD「KWTelescope」があったので、それのスクリプトをベースに作成。
このスクリプトは基本的にはFOV(視野角)を変更するだけで、視野角を狭くすることで擬似的にズームを表現している。
ただ視野角を変えるだけだとゲームに反映されないので、いろいろ小細工がいる。
下記は具体的な内容。

手順1.FOVを変更する。
value = Utility.GetINIFloat("fDefaultWorldFOV:Display") ; FOVの現在値を取得する。
Utility.SetINIFloat("fDefaultWorldFOV:Display", 18) ; FOVを大幅に下げる。ちなみにFOVの基本値は60くらい(のはず)。

手順2.そのままではFOVの変更が適用されないのでTweenMenuを開いて即座に閉じる。
Input.TapKey(Input.GetMappedKey("Tween Menu",0)) TweenMenuを開く
Utility.WaitMenuMode(0.0003) ; 極短時間待機
Input.TapKey(Input.GetMappedKey("Tween Menu",0)) TweenMenuを閉じる

手順3.このままだとメニュー画面が表示されてしまい見栄えが悪いため、一時的にメニュー画面を透明化する。
UI.SetNumber("TweenMenu", "_root.TweenMenu_mc._alpha", 0.00)

ズーム自体は以上だけで可能。
以下はスコープ画面の表現。必要ならする。

手順4.現在の視点が1人称か否かチェックし、3人称なら強制的に1人称視点にする。
If(Game.GetPlayer().GetAnimationVariableInt("i1stPerson") != 1)
 Game.ForceFirstPerson()
 firstperson = 0
EndIf

手順5.ヘルスや方向などの画面上の情報を非表示にする。
Game.ShowFirstPersonGeometry(false)

手順6.視界にスコープ画面のエフェクトをかける。もとMODだと天候が雨や雪だと専用のエフェクトをかけていた。
ZoomEffect.Play(PlayerActor)

以上。
ズームを解除するときにはこれの逆をする。

;--------------------------------------------------------------------------------

-バグ-
showracemenuを開いて種族や性別を変更するとズーム画面の表示がおかしくなる。
どうも視点の中心座標がずれるみたいで、ズーム時の視点が上下逆になり、ほとんど操作不能に陥る。
弓かクロスボウを装備すると治る模様。とりあえず対策は見つかった。