だれかBlender+MakeHumanでラブプラス作ってください(ウソ)
っていうか、遊んだことないので、ジャンルが恋愛シミュ、という以上のことがよくわからず。
Blenderゲームエンジン(BGE)で日本語表示
Blenderには、本格的な3Dゲームを作る機能が付いています。 しかし、残念ながら、日本語を表示するのは難しかった。。。
なので、ドラクエ風RPGやノベルゲームを作れるように、日本語を表示できるスクリプトを書きました。
(Blenderで文字主体のゲームを作ることに意味があるのか、という疑問は、さておき)
しくみの説明
- Rasterizer.drawLineメソッドを使用
毎秒60回、、文字の形に線を書いているので若干重いかもです。
【Py】 KSTストロークフォントを展開
こちらのモジュールを少し改造。
BGEの詳しい説明は、今回は割愛して最小限の説明だけ
必要なファイル
- blender
- KST32B 極めてコンパクトなJIS第1水準漢字他のStrokeFont(KST)
今回も、こちらのフォントを使用。
vectorでフォント本体をダウンロード。
アーカイブ中のKST32B.TXTを、blendファイルと同じフォルダに置く。 - jtext.zip
日本語表示テスト用サンプルファイル一式。こちらのzipファイル中の - blendファイルおよび、kst.pyをKST32B.TXTと同じフォルダに。
- blendファイルを開いて、キーボードのPを押すと表示開始
(ホントに日本語を表示するだけ)
ここから下はエイプリルフールになるのですが
ひさしぶりに、超小粒なゲームでも作って、BGEなコンテストに応募してみようかしらん?と思ったり、、、
でも、海外のコンテストに応募するなら、メッセージに日本語は要らないですー
自分がどこかに応募するまでナイショにしておこうかと思ったのですが、その前にファイル一式を紛失しそうな気がしたのでblogにメモ。
日本語を表示するためのPythonコントローラは、こんな感じに書きます。
blenderのTextウィンドウでは日本語が直接入力出来ないので、適宜エンコードしたり、外部ファイルから読み込んだりします。
import kst
import Rasterizer
from message import msg
cont=GameLogic.getCurrentController()
own=cont.owner
pos=own.getPosition()
color=[1,0,0]
txt="""\u300c\u30e2\u30e4\u3055\u307e\u300d\u304c
\u56db\u6708\u304b\u3089
\u30b4\u30fc\u30eb\u30c7\u30f3\u306b\u266a"""
txt=txt.decode("raw_unicode_escape")
x,y,z=pos
for moji in kst.k.getstroke(txt,(x,y,z+2)):
for st in moji :
last = st[0]
for p in st :
Rasterizer.drawLine( last, p, color)
last=p
Tags: 3DCG, Blender, Python