Logo
ProjectsSpaceAbout

Script

キャラクター作成ガイド

Apricotでキャラクターを作るために使うスクリプトの仕様をまとめてみました。 キャラクターを作成する際の手助けとなれば幸いです。

Apricotのスクリプトは全てXMLで記述されています。このスクリプトで使用できるタグは、現在8個あります。

  • script
  • character
  • sequence
  • message
  • motion
  • image
  • sound
  • process

scriptタグ

<script>
...(省略)...
</script>

ルートタグです。必ず必要なものです。

characterタグ

<script>
  <character name="アプリコタン" width="240" height="320">
  ...(省略)...
  </character>
</script>

キャラクターを定義します。1個以上必要です。親要素はscriptタグです。
キャラクターを複数表示させる場合は、キャラクター分のcharacterタグを用意します。

バルーンのx座標上の位置は、width属性の値とoffset-x属性の値から決定されます。
バルーンは、width属性の値 - offset-x属性の値からwidth属性の値の間にセンタリングされて表示されます。

name属性:キャラクターの名前を設定します。
x属性:キャラクターを表示するX座標上の位置を設定します。(省略可)
y属性:キャラクターを表示するY座標上の位置を設定します。(省略可)
width属性:キャラクターを表示するための横幅を設定します。
height属性:キャラクターを表示するための高さを設定します。
origin-x属性:キャラクターを表示するX座標の原点の位置を設定します。デフォルト値は0です。(省略可)
origin-y属性:キャラクターを表示するY座標の原点の位置を設定します。デフォルト値は0です。(省略可)

sequenceタグ

<script>
  <character name="アプリコたん" width="240" height="320">
    <sequence name="Blink>
      ...(省略)...
    </sequence>
    <sequence name="Idle">
      <sequence name="Blink" />
    </sequence>
  <character>
</script>

sequenceタグは、キャラクターの動作の集合を記述します。また、sequenceタグの名前毎に状態をもつことも出来ます。
name属性はシークエンスの名前を表します。複数同じ名前がある場合は、ランダムに呼び出すシークエンスが決定されます。
state属性は状態を表します。この状態を表す値は呼び出された場所に限らず機能し、シークエンスの名前と一致する状態のシークエンスを実行します。一致しない場合は、state属性が未指定のシークエンスを実行します。
sequenceタグの名前親要素はcharacterタグ、またはsequenceタグです。

sequenceタグはネストすることも出来ます。(4.5のβ2から)

sequenceタグがネストされた状態で空要素の場合は、指定されたsequenceタグを呼び出します。state属性を指定すると設定された状態で状態遷移します。指定がない場合は現在の状態を維持します。

上記の例では、Idle状態の時に、name属性の値がBlinkのsequenceを呼び出します。

name属性:シークエンスの名前です。sequenceタグ内にタグを含む場合は、シークエンスの名前を設定します。Apricotで予約されているname属性の値についてついては、Apricotのイベントの種類を参照して下さい。
タグが空要素の場合は、呼び出すシークエンスの名前を指定します。
state属性:タグが空要素の場合は、状態を設定します。sequenceタグ内にタグを含む場合は、タグが空要素時で呼び出しの際に設定したstateの文字列にマッチした場合にsequenceが実行されます。マッチしない場合は、stateが空のものが実行されます。state属性には正規表現が使えます。

<sequence name="Activate">
  <sequence name="Apricotan.StatefulTalk" state="デレ\d">
    <sequence name="Apricotan.StatefulTalk" state="ツン1">
      <message>べっ、別に${キャラクター}なんか好きじゃないなの!</message>
      <sequence name="Apricotan.Shy" />
    </sequence>
    <sequence name="Apricotan.StatefulTalk" state="ツン1" />
  </sequence>
  <sequence name="Apricotan.StatefulTalk" state="ツン1">
    <sequence name="Apricotan.StatefulTalk" state="ツン2">
      <message>べっ、別に${キャラクター}なんか好きじゃないなのっ!</message>
      <sequence name="Apricotan.Anger" />
    </sequence>
    <sequence name="Apricotan.StatefulTalk" state="ツン2" />
  </sequence>
  <sequence name="Apricotan.StatefulTalk" state="ツン2">
    <message>べっ、別に${キャラクター}なんか好きじゃないなのっ!</message>
    <sequence name="Apricotan.Anger" />
  </sequence>
  <sequence name="Apricotan.StatefulTalk" />
</sequence>

上記の例(4.5のβ2から)では、Apricotan.StatefulTalkシークエンスの状態(state)が「デレ1」、「デレ2」、「ツン1」、「ツン2」という4つある場合を想定しています。
Apricotan.StatefulTalkシークエンスの状態が「デレ1」または「デレ2」の場合に、このsequenceタグが実行されると「デレ\d」のシークエンスを実行後、「ツン1」に状態が遷移します。「ツン1」の場合は、「ツン1」のシークエンスを実行後、「ツン2」に状態が遷移します。「ツン2」の場合は「ツン2」の状態を維持します。

messageタグ

バルーンに表示されるテキストを設定します。親要素はsequenceタグです。

speed属性: メッセージスピードを設定します。(デフォルト値:30)
duration属性: バルーンの表示している時間を設定します。単位はミリ秒です。(デフォルト値:5000)

motionタグ

<script>
  <character name="アプリコタン" width="240" height="320">
    <sequence name="Start">
      <motion loop="False" fps="10" z-index="1" iterations="30">
        <image x="10" y="20">Images\Apricotan-Face-02.png</image>
      </motion>
      <motion loop="False" fps="10" z-index="1">
        <image x="10" y="20">Images\Apricotan-Face-01.png</image>
      </motion>
    </sequence>
    ...(省略)...
  <character>
</script>

キャラクターの動きを定義します。motionタグには画像の並び順を設定します。
パラパラ漫画のコマの集まりのようなものです。
z-indexの値が同じmotionタグがある場合は、上のmotionタグから順に処理されます。
imageタグを子に持ちます。親要素はsequenceタグです。
着せ替えを使用するには、type属性を設定して下さい。

loop属性:Trueの時、レイヤー(z-index)が上書きされるまでループします。(省略可。省略時False。)
type属性:着せ替えを使用する場合に、着せ替えのメニューに表示する名前を設定します。(省略可)
fps属性:FPS値を設定します。
z-index属性:レイヤーを設定します。0以上の整数値が入ります。
iterations属性:繰り返し回数を設定します。繰り返しを設定することにより、その回数分繰り返すことが出来ます。

<sequence name="Sample">
  <motion fps="30" z-index="1" iterations="2">
    <image>Animation01.png</image>
    <image>Animation02.png</image>
  </motion>
</sequence>

上記のXMLは、

<sequence name="Sample">
  <motion fps="30" z-index="1" iterations="2">
    <image>Animation01.png</image>
    <image>Animation02.png</image>
  </motion>
</sequence>

と、同じ実行結果になります。

<sequence name="Sample">
  <motion fps=>"30" z-index="1" iterations="2">
    <image>Animation01.png</image>
    <image>Animation02.png</image>
  </motion>
  <motion fps="10" z-index="1" iterations="3">
    <image>Animation02.png</image>
  </motion>
</sequence>

待機しているように見せるには、3秒間同じ画像を表示するXMLを上記のようにfps属性とiterations属性を記述します。

imageタグ

画像ファイルのパスを設定します。親要素はmotionタグです。
画像ファイルは、PNG推奨です。

x属性: 画像を表示するX座標上の位置を設定します。(省略可)
y属性: 画像を表示するY座標上の位置を設定します。(省略可)
width属性: 画像の幅を設定します。(省略可)
height属性: 画像の高さを設定します。(省略可)
opacity属性: 画像のアルファ値を0から1までで設定します。0で透明になります。1が不透明になります。(省略可)

soundタグ

音声ファイルのパスを設定します。親要素はsequenceタグです。
音声ファイルは、WAVEフォーマットです。

processタグ

実行ファイルのパスを設定します。親要素はsequenceタグです。

args属性: 実行ファイルのパラメータを設定します。(省略可)

イベントの種類

Apricotでイベントが発生すると、Apricotスクリプト内の該当するsequenceタグが呼び出されます。該当するタグとは、システムで予約済みの値とname属性の値がマッチしたものです。

Start

<sequence name="Start">
  ...(省略)...
</script>
プログラム開始時に呼び出されます。

Stop

<sequence name="Stop">
  ...(省略)...
</script>
プログラム停止時に呼び出されます。終了処理などに使用します。

Idle

アイドル状態の時に呼び出されます。

Tick

時間が変わった時に呼び出されます。

DoubleClick

<sequence name="DoubleClick">
  ...(省略)...
</script>
キャラクターがダブルクリックされた時に呼び出されます。

DrawClipboard

クリップボードにテキストがコピーされた時に呼び出されます。

Learn

単語を覚える時/忘れる時に呼び出されます。

Alert

<sequence name="Alert">
  <message>新着のエントリーがあります。</message>
</script>
RSS/Atomフィードを取得後、新着のエントリーがあった時に呼び出されます。

Trend

話題になっているキーワードを算出後、呼び出されます。

Search

検索が実行された際に呼び出されます。

Suggest

関連エントリを抽出した際に呼び出されます。。

Activate

<sequence name="Activate">
  <message>べっ、別に${人名|キャラクター}なんか好きじゃないなの</message>
</sequence>
キャラクターが勝手に喋る時に呼び出されます。
${キャラクター}を使用すると、キャラクターの名前に置き換わります。「|」を使用して複数指定することも出来ます。${キャラクター|人名}とすると、キャラクターまたは人名のいずれかに置き換わります。
キャラクターのように指定できる値は、下記のようになっています。

  • キャラクター
  • する事
  • テクノロジ
  • モノ
  • 人を表す言葉
  • 人名
  • 問題
  • 時間を表す言葉
  • 現象
  • 生物
  • 症状
  • 着るもの
  • 組織
  • 聞くもの
  • 職業
  • 行く所
  • 見るもの
  • 読むもの
  • 食べ物
  • 飲み物
Up