Bethesda Tutorial Papyrus Variables and Conditionals/ja

From the CreationKit Wiki
Revision as of 07:49, 18 June 2012 by imported>Tktk
Jump to navigation Jump to search
JapaneseFlag.pngこのページは日本語です。
リンク先ページの編集上の訂正または翻訳が必要です。
Bethesda Tutorial Papyrus Variables and Conditionals/ja
スクリプティング シリーズ、2章
チュートリアルハブに戻る
LeftArrow.png 前のチュートリアル 次のチュートリアルRightArrow.png

概要

このチュートリアルは前回のHello World Tutorial/jaが完成していることを前提とします。

このチャプターで学べること:

  • 変数の作成・使用の方法
  • 後ほどのためにスクリプトに注意書きコメントを加える方法
  • 変数の値をゲーム上で知る方法
  • スクリプトにおける条件分岐(if-then-else構文)の使用方法

変数

情報またはオブジェクトのための入れ物として変数を用いることができます。
変数はそれらの値を増加・減少し、後でそれらを取り出す事ができます。


前回の「Hello World Tutorial/ja 」で書いたスクリプトにプレイヤーが何回それをアクティベート(クリック)したかの回数を数えるのに、変数を用いてみましょう。そしてその回数ごとに違った何かをすることにしてみましょう。

石碑の「Reference」ウィンドウを再び開けて、「Script」タブ上の「HelloWorldScript」を右クリックし、「Edit Source」を選択し、「Editing Script」ウィンドウを開いてください。

前回から何も変更していないならば以下のようになっているはずです:

 Scriptname HelloWorldScript extends ObjectReference  
 {This is my very first script!}

 Event OnActivate(ObjectReference akActionRef)
    Debug.MessageBox("Hello, World!")
 endEvent

それでは変数を加えましょう。「Event OnActivate」行のすぐ上にこの文を加えてください:

 int count  ;stores the number of times this object has been activated
  • int count ;stores the number... - int は変数のタイプを定義します。この場合「Integer(整数)」を意味し、小数点のないプラスかマイナスの値を使用できます。
  • int count ;stores the number... - count はあとで私たちが参照できるように、その変数に与えている名前です。
  • int count ;stores the number... - セミコロン (;)以下はコメントとして扱われます。これはあなたのスクリプトを見ている誰か(他のモッダーや、後日の自分)の助けになるための注意書きです。これはスクリプト自体へは何の影響も与えません。

それではカウントするための文を加えましょう。「Event OnActivate.~」と「Debug.MessageBox~」の行の間に以下を加えてください:

 count = count + 1

これはその値が何であれ、名前をつけたその「count」に「1」を加え、出てきたその値を格納します。 つまり「=(イコール)」の右にある式の答えを、左に移しかえる、ということです。

実行されている時のスクリプトの変数を見る

ゲームが起動していないのを確かめ、そのスクリプトをセーブしてください。「Reference」ウィンドウでOKボタンを押して適用したら、CKであなたのプラグインをセーブしてください。

ゲームを起動して、以下のコンソールコマンドで石碑の所へ行ってください:

COC MolagBalVoiceCell

まず最初に「count」変数の値をチェックしましょう。プレイヤーがまだ何もしていならば、その値は「0」のはずです。
コンソール画面を開いて石碑をクリックし、「'WETempActivator'」の文字の表示と括弧の前の値が見られるようにしてください。

それが出来たらコンソールに以下をタイプしてださい:

ShowVars

するとコンソールで以下のような表示がされるはずです:

--- Papyrus ---------------------
HelloWorldScript:
     Script state = ""
     count = 0

コンソールで「count」の値が「0」であることを確かめる事ができました。
コンソールを閉じて、石碑を3回クリック(アクティベート)してください(この時、前回のスクリプトが実行され、「Hello World!」のメッセージボックスが3回表示されるはずです。)

次に再度コンソールを開いて「ShowVars」とタイプしてください。今度は「count = 3」と表示されているはずです。

すばらしいです。だから何だって?
これで、プレイヤーがピラーをクリックした回数に応じて、異なるメッセージを表示させるスクリプトをこの情報をもとにして作成できます。
ゲームを終了して、スクリプトをまた編集しましょう。


条件分岐(if-then-else)

次に "条件分岐conditional statement" を加えてみましょう。
スクリプト内で何が起こっているのかよくわからなくても、これを理解すれば、少しスクリプトというものの形が見えてくるかもしれません。


「Debug.MessageBox("Hello, World!")」の下の行に次の文を加えてください:

 if count == 1
    Debug.MessageBox("Hello, World!")
 elseif count == 2
    Debug.MessageBox("Hello, World. Again!")
 else
    Debug.MessageBox("Hello, World. Enough already!")
 endif

スクリプトの振舞いを変えるため、countの値を変えていきましょう。このケースでは、countに格納されている値により、異なるメッセージを表示するようにしました。ここで注意する重要なものとして、「==」が挙げられます。これは算数や数学で言う「=イコール」と同じ意味です。スクリプトでは「=」が1つの場合、変数をセットする意味だったことを思い出し、これらの意味を混同しないよう気をつけてください。例えば「count == 2」だったら「countは2である」という意味になります。

おさらい:

  • シングルの(=)の意味 : 右の式の答えを左の変数にセットさせる
  • ダブル (==) の意味: 右と左は同じもの

あなたのスクリプトは以下のようになっているはずです:

 Scriptname HelloWorldScript extends ObjectReference  
 {This is my very first script!}

 int count  ;stores the number of times this object has been activated

 Event OnActivate(ObjectReference akActionRef)
    count = count + 1
    
    if count == 1
       Debug.MessageBox("Hello, World!")
    elseif count == 2
       Debug.MessageBox("Hello, World. Again!")
    else
       Debug.MessageBox("Hello, World. Enough already!")
    endif
 endEvent

再びゲームを起動してテストしてください。 石碑をアクティベート(クリック)するたびに3つの異なるメッセージが表示されるはずです!

より詳しい情報

  • 単純変数のタイプについて知りたい場合、Literals Referenceを参照してください。(「int」は「Literals[文字どおりのもの]」と呼ばれています)
  • オペレーター(=, +=. etc.)については、Operator Referenceを参照してください。
  • if-then-elseのような条件分岐は Statement Referenceを参照してください。


LeftArrow.png Previous Tutorial Return to Tutorial Hub Next Tutorial RightArrow.png


Language: English  • français • 日本語 • 한국어 • polski • русский