UnityNovelProj Unity で VisualNovel を作成する
url: https://github.com/ganyariya/gnovel/pull/32
title: "21-6: 条件文を導入する by ganyariya · Pull Request #32 · ganyariya/gnovel"
description: "if expression を評価できるようにするif のサンプルチュートリアルを用意するConditions クラスの UnitTest を追加するSummary by CodeRabbit新機能対話スクリプトでif/elseの条件分岐をサポート。真偽値・整数/小数・文字列の比較およびAND/ORに対応し、変数や選択結果に基づいて適切なブロックを実行。学習用サンプルを追..."
host: github.com
favicon: https://github.githubassets.com/favicons/favicon.svg
image: https://opengraph.githubassets.com/c5d295c89c1bad8283d36d6ccd039f870ece5c70a23a7623013f37a345059ca2/ganyariya/gnovel/pull/32
url: https://www.youtube.com/playlist?list=PLGSox0FgA5B58Ki4t4VqAPDycEpmkBd0i
title: "Make A Visual Novel in Unity 2023"
description: "作成した動画を友だち、家族、世界中の人たちと共有"
host: www.youtube.com
favicon: https://www.youtube.com/s/desktop/589d7fcc/img/favicon_32x32.png
image: https://i.ytimg.com/vi/cO6NzrvTrkY/hqdefault.jpg?sqp=-oaymwEXCOADEI4CSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLBDRaue_g8d_MtAx30B62nLpMezdw&days_since_epoch=20375
Logical Line Condition
Logical Line
の仕組みを利用して、 if(){} else {}
をダイアログファイルで導入できるようにします。
choice "Do you like cat?"
{
-Yes
$catliked = true
-No
$catliked = false
}
if ($catliked)
{
ganyariya "Oh, you like cat!"
}
else
{
ganyariya "Oh, you don't like cat."
}
$x = 50
if ($x > 40)
{
ganyariya "x is greater than 40, $x = 50 > 40"
}
if ($any)
if という keyword かつ条件文を表す ()
があった場合は LL_Condition という Logical Line として扱います。
そして、 ()
の中を式 Expression として評価し true か false かを計算します。
true/false だけでなく、 if ($catLiked)
のように変数が利用されます。
また、 10 > 50
のように単項演算子のみであれば扱えます。
これらのことから、
- 変数については TagManager の InjectVariables でリテラル値 (int, float, string, bool) に変換する
を事前に行ってから、式の中を計算し true/false を得ます。
改善点
$catLiked && (10 > 5)
といった複雑な条件式は評価できません。
これらのことからやはり lua などのスクリプト言語を利用し Unity と連携させることによって、自前の構文解析を取りやめる、というのが大事だなとおもいました。