Papyrus による世界の創造 - Skyrim MOD 制作

石碑の周りを周るスキーヴァー - 簡単な Papyrus サンプル群

最終更新: 2015-04-02 (木) 21:36:12 (2397d)

MOD 本体

fileExampleSkeeverAroundStone.zip

  • ExampleSkeeverAroundStone.esp
  • Scripts
    • ExampleSkeeverAroundStone.pex
    • Source
      • ExampleSkeeverAroundStone.psc

インストール方法

解凍して Data フォルダにコピーもしくは NMM での導入も可能です。

アンインストール方法

アンインストールは、導入したファイルを全て削除すれば完了です。Data フォルダを「Example」で検索すれば該当ファイルが全て検索できるので簡単です。

NMM で導入した場合は、NMM が全部やってくれます。

概要

本サンプルは、

の応用編です。

CenterOnCell - coc(セル移動) コンソールコマンドにて部屋に行きます。

tdetect
coc example

スキーヴァーがのんきに中央の石碑を周る姿を観察しましょう。

ToggleDetection - tdetect(敵AI索敵モード切り替え) コンソールコマンドを再度実行し、スキーヴァーの索敵機能をオンにし、石碑から注意を逸らして戻るのを観察しても良いでしょう。

設置物の概要を以下にまとめます。

記号設置物種類
NorRmSmMid01
石碑WETempActivator
スキーヴァーEncSkeever
マーカーXMarker

以上が初期配置です。

元となったサンプルを踏襲し、中央の石碑が定期処理を担っています*1

スキーヴァーを動かすのに Actor.PathToReference メソッドを使います。目標地点はマーカーとします。

そのため石碑はスキーヴァーとマーカーをプロパティとして持っています。

定期処理にて目標地点にスキーヴァーが近づいたら、石碑を周るようマーカーを石碑を中心にぐるぐると回していきます。

スキーヴァートとマーカーとの距離は ObjectReference.GetDistance で計算できます。

また、石碑を中心としたマーカー設置位置の計算式は以下の通りです。

マーカーのX座標「石碑のX座標」+「石碑からの距離」× cos(「角度」)
マーカーのY座標「石碑のY座標」+「石碑からの距離」× sin(「角度」)
石碑からの距離256 ユニット
角度45 度ずつ増やして回していく。

マーカーを駆使すれば、NPC の移動先を自由自在に操れます。

スクリプト概要

余計なデバッグコードは記載から除外しました。

Scriptname ExampleSkeeverAroundStone extends ObjectReference  

Actor Property skeever Auto
ObjectReference Property destination Auto
int angle = 0

Event OnCellLoad()
	RegisterForSingleUpdate(1)
endEvent

Event OnUpdate()
	float distance = skeever.GetDistance(destination)
	if (distance < 64)
		angle = angle + 45
		destination.SetPosition(x + 256 * Math.cos(angle), y + 256 * Math.sin(angle), z)
	endIf
	skeever.PathToReference(destination, 0.5)

	RegisterForSingleUpdate(1)
endEvent

ダウンロードしたサンプルには、距離やマーカーの位置や角度を表示するデバッグコードが含まれています。

ポイント

PathToReference は毎回実行する必要がある

Actor.PathToReference を1度実行したからといって、オブジェクトを自動でずっと追ってくれるようにはなりません。

Actor.PathToReference は呼び出した時点のオブジェクトの場所へ向かうよう指示をだすだけです。

従って、マーカーを移動したら再度呼び出す必要があります。

今回のサンプルではマーカーの移動に限らず毎回呼ぶようにしています。

もしも、戦闘等によりスキーヴァーが他のものに注意を奪われると、マーカーを見失うからです。