Blender Game Engine 〜まとめ〜
前回は、BGEでのゲームコントロールの作成方法をやりました。
正確には、右ボタンを押下した時にオブジェクトを動かす。というものでしたが
前回やった工程を増やして、上下左右のボタンに対応した動きを設定すると以下のようになりました。
試した部分は「Physics」と「Liner〜」「Loc」「Rot」の部分を試しました。
回転したり移動したりとちょっと面白かったです。
ポイントとしては「Loc」の値を設定して移動する時にはオブジェクトの向きを基準に
移動するというところです。その部分は実際にいじってみるのが一番良いと思います。
← 右端のパネル
ロジックエディタの右端(Actuator)
それぞれの値を調節してやれば、キャラクターの操作はできそうです。
大雑把にアクションの作成方法を学習しました。
Blender Game Engine 〜キューブを動かす〜
前回は、チュートリアル動画のはじめの部分をやってみました。
今回はその続きをやります。
参考動画はこちら
前回は、キューブを上に持ち上げて、重力をかけるとこまでやりました。
上記の画面で(重力をかける設定をしてます。)「P」ボタンを押下
と、ここまでが前回。
ここからキューブの向きを変えて落とします。
まぁ何も起こりませんなぁ(笑) ※動画より引用
自然な動きを与えるには、「コリジョンバウンド」を設定するようです。
チェックを入れるだけですね。。。
落下した後に地面の上に止まりました。(刺さっていません)
そして、ここからが本番
画面を上下の二つに分割します。新しいビューを使用するためです。
Open The Game Logic Editor
開いたロジックエディタの一番左から、センサーを追加します。
センサーというのは、コントローラーの事と今は思っておきましょう。
そして「Controller」はすっ飛ばして、「Actuator」の変更を行います。
ついでに飛ばした「Controller」は右です。
そして、今回はキーボードでコントロールしてキューブを動かしたいので
Actuator -> Motionを選択します。
余談ですが、選択しているキューブに重力設定をしていないと2行くらいしかない
※重力設定が「Static」の状態
重力設定を「Static」から「RigidBody」に変更します。
ちょっと分かりづらいですが、プロパティが増えています。
Key: の「Right Arrow」と表示されている部分をクリックしたら「PressKey」と
表示されるので使用するキーを押下する
今回は、「右→」Right Arrowを選択しました。
そして、一番右のプロパティを以下のように変更します。
Yの値を「3.0」に設定する
そして、ゲームを実行します。「P」ボタンを押下します。
右にしか移動しないのでキューブがおっこちます(笑)
今日はここまでにします。
Blender Game Engine 〜他のゲームエンジンとの比較(感想)〜
紆余曲折を経て Blenderに戻ってきました。
OpenCvによる機械学習も進めたいのですが。。。
まずは「動くもの」を作るのを優先したく、ちょいと保留です。
経緯として以下のような状況です。
1. ゲームを作りたいのでどの言語(もしくはツール)を使用して開発するか検討
「UnrealEngine」→ほぼプログラミングがいらない感じで、プラグインを作るにも
時間がかかりそうなので却下(使用しないことにしました。)
※プログラミングをメインにしないなら最高だと思います。
ただし、GPUのスペックがある程度高くないと使用できない
「Swift」 →Xcodeを使用してiPhoneアプリの作成ができる、3Dモデルや
各部品(イメージファイルなど)をAsetとして読み込み使用できる
※プログラミングの習得難度は低い、C++,Python等アクセス可
「Unity」 →3Dモデルの作成など簡単なことはUnityのみでOK, C#を使用
iPhoneなどの入力キーボードを使用するときは対象の言語
(Swiftなど)での修正作業が必要になる
「Blender」 →3Dモデルを作成するのに使用する他のゲームエンジンでも
作成した3Dモデルを使用できる
「Blender Game Engine」
→Pythonを使用できる、作成したゲームをコンパイルツールでiPhone用に起動ファイルを出力できる
これを使えばBlenderのみの実装でiPhoneアプリも行けるのではないだろうか?
と思っている
というわけで、BelderGameEngineの使い方を勉強します。
参考にするのは、以下の動画です。
www.youtube.com
初めに、レンダーを切り替えるようです。
右側のパネルにある「Start」ボタンを押下するとゲームが起動します。
ゲームを起動するとマウスが見えなくなってしまうので「esc」ボタンでゲームを終了します。
とりあえず、地面(のようなもの)を作成します
Plane(板)を選択して広げます。初期表示されているキューブは上に持ち上げます。
「S」押下してマウスで広げます。
そして、キューブを選択した状態で以下のように「Physics」を選択します。
そして「RgidBody」を選択
そしてゲームを再生
空中にあった、キューブが地面(?)に落下します。
今日はここまでにします。
次回は、キューブを動かしてみます。
Blender python UI開発メモ 〜 ユーザ入力〜
blenderでユーザー入力を行うにはダイヤログを使う事にする
複数行テキストフィールド
https://developer.blender.org/D622
Eclipse セットアップ
- Java Install Eclipse〜開発ツールのインストール〜
- TensorFlow C++環境〜EclipseにCDTをインストール〜
- Setup OpenGL with Java〜JOGLを使う準備 for Eclipse〜
- Eclipse Meven 開発手順〜プロジェクトの作成〜
- Java OpenCV 環境セットアップ(on Mac)
- Java Basic
- Java Basic Level 1 〜Hello Java〜
- Java Basic Level2 〜Arithmetic Calculate〜
- Java Basic Level3 〜About String class〜
- Java Basic Level 4〜Boolean〜
- Java Basic Level 5〜If Statement〜
- Java Basic Summary from Level1 to 5
- Java Basic Level 6 〜Traning of If statement〜
- Java Basic Level8 〜How to use for statement〜
- Java Basic Level 8.5 〜Array〜
- Java Basic Level 9〜Training of for statement〜
- Java Basic Level 10 〜While statement 〜
- Java Basic Swing〜オブジェクト指向〜
- Java Basic Swing Level 2〜オブジェクト指向2〜
- サンプル実装〜コンソールゲーム〜
- Java Basic インターフェース・抽象クラスの作り方
- Java Basic クラスとは〜Step2_1〜
- Java Basic JUnit 〜テストスイートの作り方〜
Blender Python 開発メモ 〜パネルの仕様〜
英語のサイトですが。。。
Panel(bpy_struct) — Blender 2.79.0 855d2955c49 - API documentation
日本語にすると
- クラス(bpy_struct )
bpy.types.
Panel
-
UI要素を含むパネル
bl_category
-
タイプ: 文字列、デフォルト ""、(決してなし)
bl_context
-
パネルが属するコンテキスト。(TODO:可能な組み合わせの説明bl_context / bl_region_type / bl_space_type)
タイプ: 文字列、デフォルト ""、(決してなし)
bl_idname
-
これが設定されている場合、パネルはカスタムIDを取得します。それ以外の場合は、パネルの定義に使用されるクラスの名前が使用されます。たとえば、クラス名が "OBJECT_PT_hello"で、bl_idnameがスクリプトによって設定されていない場合、bl_idname = "OBJECT_PT_hello"
タイプ: 文字列、デフォルト ""、(決してなし)
bl_label
-
パネルラベルは、三角形の右側のパネルのヘッダに表示パネルを収納するために使用しました
タイプ: 文字列、デフォルト ""、(決してなし)
bl_options
-
このパネルタイプのオプション
DEFAULT_CLOSED
Default Closed パネルの作成時にパネルを開くか折りたたむ必要があるかどうかを定義します。HIDE_HEADER
Hide Header、Falseに設定されている場合、パネルにはヘッダーが表示されます。このヘッダーには、パネルとラベルを折りたたむためのクリック可能な矢印が含まれています(bl_labelを参照)。
タイプ: {'DEFAULT_CLOSED'、 'HIDE_HEADER'}に設定された列挙型、デフォルト{'DEFAULT_CLOSED'}
bl_region_type
-
地域パネルがで使用されようとしています
タイプ: ['WINDOW'、 'HEADER'、 'CHANNELS'、 'TEMPORARY'、 'UI'、 'TOOLS'、 'TOOL_PROPS'、 'PREVIEW']、デフォルトの 'WINDOW'
bl_space_type
-
パネルが使用される空間
EMPTY
空の。VIEW_3D
3Dビュー、3Dビューポート。TIMELINE
タイムライン、タイムライン、再生コントロールGRAPH_EDITOR
グラフエディタ、ドライバの編集、キーフレーム補間DOPESHEET_EDITOR
ドープシート、キーフレームのタイミングを調整します。NLA_EDITOR
NLAエディタ、アクションの結合とレイヤー。IMAGE_EDITOR
UV /イメージエディタ、画像とUVマップの表示と編集を行います。CLIP_EDITOR
ムービークリップエディタ、モーショントラッキングツール。SEQUENCE_EDITOR
ビデオシーケンスエディタ、ビデオ編集ツール。NODE_EDITOR
ノードエディタ、ノードベースシェーディングおよび合成ツールのエディタTEXT_EDITOR
テキストエディタ、スクリプトの編集、およびファイル内のドキュメント。LOGIC_EDITOR
ロジックエディタ、ゲームロジック編集。PROPERTIES
プロパティ、アクティブオブジェクトおよび関連するデータブロックのプロパティを編集します。OUTLINER
Outliner、シーングラフの概要、利用可能なすべてのデータブロック。USER_PREFERENCES
ユーザー設定、永続的な設定を編集します。INFO
情報、メインメニューバー、エラーメッセージのリスト(ドラッグ&ドロップで下にドラッグ)FILE_BROWSER
ファイルブラウザ、ファイルとアセットを参照します。CONSOLE
Python Console、高度な編集とスクリプト開発用のインタラクティブなプログラムコンソール。
タイプ: ''、 ''、 ''、 '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' 、 'PROPERTIES'、 'OUTLINER'、 'USER_PREFERENCES'、 'INFO'、 'FILE_BROWSER'、 'CONSOLE']、デフォルト 'EMPTY'
bl_translation_context
-
タイプ: 文字列、デフォルト "*"、(決してなし)
layout
-
UIのパネルの構造を定義します。
タイプ: UILayout
、(読取り専用)
text
-
XXX todo
タイプ: 文字列、デフォルト ""、(決してなし)
use_pin
-
タイプ: ブール値、デフォルトFalse
- classmethod
poll
(コンテキスト) -
このメソッドがnull以外の出力を返す場合は、パネルを描画できます
戻り値の型: ブール値
draw
(コンテキスト)-
パネル UIレイアウトにUI要素を描画する
draw_header
(コンテキスト)-
UIエレメントをパネルのヘッダUIレイアウトに描画する
Blender Python Addon 〜チュートリアル2-3〜
前回は、カーソルの位置までコピーを作成するスクリプトを作成しました。
今回は、アドオンの部分を写経、ちょっといじります。
赤色になっている部分はちょいといじって名前を変えてみました
Addon Tutorial — Blender 2.78.0 e8299c8 - API documentation
bl_info = {
"name": "Cursor Array Practice",
"category": "Object",
}
import bpy
class ObjectCursorArray(bpy.types.Operator):
"""Object Cursor Array"""
bl_idname = "object.cursor_array"
bl_label = "Cursor Array Practice"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
scene = context.scene
cursor = scene.cursor_location
obj = scene.objects.active
total = 10
for i in range(total):
obj_new = obj.copy()
scene.objects.link(obj_new)
factor = i / total
obj_new.location = (obj.location * factor) + (cursor * (1.0 - factor))
return {'FINISHED'}
def register():
bpy.utils.register_class(ObjectCursorArray)
def unregister():
bpy.utils.unregister_class(ObjectCursorArray)
if __name__ == "__main__":
register()
アドオンスクリプトを作成して実行すると以下のように動きます。
起動後に、3D画面上でスペースを押下します。
そして「Cursor Ar」まで入力すると作成したアドオンの名前が見つかります。
実行結果はこんな感じ
今までの勉強で
一つのスクリプトファイル上で作成するにはどうすれば良いか?
が理解できました。
ただ、作成したスクリプトがどの部分に表示されるのか?がわかりません。
全て、スペースで検索した時に表示されるものなのでしょうか?
前に作成したものはタブで選択することができました。。。
うーむ、この部分がわからない。。。
今回はここまでにします。
Eclipse セットアップ
- Java Install Eclipse〜開発ツールのインストール〜
- TensorFlow C++環境〜EclipseにCDTをインストール〜
- Setup OpenGL with Java〜JOGLを使う準備 for Eclipse〜
- Eclipse Meven 開発手順〜プロジェクトの作成〜
- Java OpenCV 環境セットアップ(on Mac)
- Java Basic
- Java Basic Level 1 〜Hello Java〜
- Java Basic Level2 〜Arithmetic Calculate〜
- Java Basic Level3 〜About String class〜
- Java Basic Level 4〜Boolean〜
- Java Basic Level 5〜If Statement〜
- Java Basic Summary from Level1 to 5
- Java Basic Level 6 〜Traning of If statement〜
- Java Basic Level8 〜How to use for statement〜
- Java Basic Level 8.5 〜Array〜
- Java Basic Level 9〜Training of for statement〜
- Java Basic Level 10 〜While statement 〜
- Java Basic Swing〜オブジェクト指向〜
- Java Basic Swing Level 2〜オブジェクト指向2〜
- サンプル実装〜コンソールゲーム〜
- Java Basic インターフェース・抽象クラスの作り方
- Java Basic クラスとは〜Step2_1〜
- Java Basic JUnit 〜テストスイートの作り方〜
Blender Python Add-on 〜チュートリアル2-2〜
前回は、アドオンのチュートリアルを始めました。(Your Second Add-on)
今回は、Your Second Add-onの2回目をやります。
→次のスクリプトの写経です。
Addon Tutorial — Blender 2.78.0 e8299c8 - API documentation
今回のスクリプトは、選択したオブジェクトをカーソルの位置までに
オブジェクトを作成して並べるスクリプトでした。
import bpy
from bpy import context
# よく使うものを変数に取り出します。
# this scene => in this 3dview
scene = context.scene
# cursor position of circle which red and white stripe
cursor = scene.cursor_location
# object of selected
obj = scene.objects.active
# 選択しているオブジェクトからカーソルの位置まで5個作成
total = 5
for i in range(total):
obj_new = obj.copy()
scene.objects.link(obj_new)
# Now place the objection between the cursor
# and the active object based on "i"
factor = i / total
obj_new.location = (obj.location * factor) + (cursor * (1.0 - factor))
以上、ちょっと計算が入るスクリプトでした。
次回は、アドオンとして作成します。
Blender Python Add-on 〜チュートリアル2-1〜
前回は、ハローワールドのアドオン→パネルに「Hello Wold」を表示する
を作成しました。
今回は、前回の続きをやります。Blenderのチュートリアルサイトの写経を始めます。
Add-on Tutorial — Blender Manual Your Second Add-on
こんな感じです。ダウンロードはこちら
import bpy
from bpy import context
# Get Current Scene
scene = context.scene
# Get 3D Cursol
cursor = scene.cursor_location
# Get active object (assume we have one)
obj = scene.objects.active
# Now make a new copy object
obj_new = obj.copy()
# The object won't automatically get into a new scene
scene.objects.link(obj_new)
# Now we place the object
obj_new.location = cursor
このスクリプトは以前行っていたようなオブジェクトコントロールでした。
合わせてこちらの記事も参考にしてくだ
今回はここまでにします。
Eclipse セットアップ
- Java Install Eclipse〜開発ツールのインストール〜
- TensorFlow C++環境〜EclipseにCDTをインストール〜
- Setup OpenGL with Java〜JOGLを使う準備 for Eclipse〜
- Eclipse Meven 開発手順〜プロジェクトの作成〜
- Java OpenCV 環境セットアップ(on Mac)
- Java Basic
- Java Basic Level 1 〜Hello Java〜
- Java Basic Level2 〜Arithmetic Calculate〜
- Java Basic Level3 〜About String class〜
- Java Basic Level 4〜Boolean〜
- Java Basic Level 5〜If Statement〜
- Java Basic Summary from Level1 to 5
- Java Basic Level 6 〜Traning of If statement〜
- Java Basic Level8 〜How to use for statement〜
- Java Basic Level 8.5 〜Array〜
- Java Basic Level 9〜Training of for statement〜
- Java Basic Level 10 〜While statement 〜
- Java Basic Swing〜オブジェクト指向〜
- Java Basic Swing Level 2〜オブジェクト指向2〜
- サンプル実装〜コンソールゲーム〜
- Java Basic インターフェース・抽象クラスの作り方
- Java Basic クラスとは〜Step2_1〜
- Java Basic JUnit 〜テストスイートの作り方〜
Blender Python アドオン作成〜ハローワールド〜
前回までは、家紋の作成用スクリプトを作成しようとしておりました。
そして、色々と考えた結果「機械学習」が必要だというところに行き着き
上記をやりました。機械学習を始めるのにちょっとBlenderを離れなくてはなりません。
Blenderを離れる前に、キリのいいところまで仕上げてしまおうというわけです。
というわけで、毎度おなじみの写経をいたします。
捨てる神あれば拾う神あり(笑)
いいサイトを見つけました。
Blender Reference Manual — Blender Manual
そして、今回の写経もとは以下になります。
Quickstart Introduction — Blender 2.79b f4dc9f9d68b - API documentation
そして、写経の結果 ダウンロードはこちら
※タブが入っていないのでコピペでは動きません。
# 必要なインポートを行います。
import bpy
from bpy.types import Operator, Panel
# bpy.contextを引数に受けてobjectsを一覧表示します。
def main(context):
for obj in context.scene.objects:
print(obj)
# クラスの定義開始
class SimpleOperator(Operator):
# この名前がbpy.ops.objectに登録されます。
bl_idname = "object.simple_operator"
#ラベルはよくワカりませんでした。
bl_label = "Simple Object Operator"
# 不適切な操作時にエラーを投げる
@classmethod
def poll(cls, context):
return context.active_object is not None
# オペレータ起動時に呼ばれる
def execute(self, context):
main(context)
return {'FINISHED'}
# パネルクラスの作成
class HelloWorldPanel(Panel):
"""Creates a Panel in the Object properties window"""
#パネルの名前が表示される
bl_label = "Hello World Panel"
bl_idname = "OBJECT_PT_hello"
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "object"
def draw(self, context):
layout = self.layout
obj = context.object
row = layout.row()
row.label(text="Hello world!", icon='WORLD_DATA')
row = layout.row()
row.label(text="Active object is: " + obj.name)
row = layout.row()
#上記のobj.nameを登録(表示)
row.prop(obj, "name")
row = layout.row()
#bpy.ops.mesh.primitive_cube_add()を呼び出す
row.operator("mesh.primitive_cube_add")
def register():
bpy.utils.register_class(SimpleOperator)
bpy.utils.register_class(HelloWorldPanel)
def unregister():
bpy.utils.unregister_class(SimpleOperator)
bpy.utils.unregister_class(HelloWorldPanel)
#よく使うコードのようだ
if __name__== "__main__":
register()
# 実際に呼び出す
bpy.ops.object.simple_operator()
大まかな流れとしては、
1. SimpleOperator、HelloWorldクラスを作成
2. 「よく使うコード〜」の部分「__name__」の値が「__main__」の時に
register()を実行する処理
3. 続いて、作成した「SimpleOperator」を実行する
コマンドよりBlenderを起動した状態でソースをダウンロードしたファイルを
テキストエディタより起動します。
コマンドには以下のような感じでオブジェクトの値が出力されました。
画面上では、こんな感じです。
右下の部分に作成したパネルが表示されています。
コマンドで起動するなどに関しては以下を参照してください。
コマンドプロンプト(大雑把ですが。。。)、ターミナルでの起動方法を記載しました。
今日はここまでにします。
Eclipse セットアップ
- Java Install Eclipse〜開発ツールのインストール〜
- TensorFlow C++環境〜EclipseにCDTをインストール〜
- Setup OpenGL with Java〜JOGLを使う準備 for Eclipse〜
- Eclipse Meven 開発手順〜プロジェクトの作成〜
- Java OpenCV 環境セットアップ(on Mac)
- Java Basic
- Java Basic Level 1 〜Hello Java〜
- Java Basic Level2 〜Arithmetic Calculate〜
- Java Basic Level3 〜About String class〜
- Java Basic Level 4〜Boolean〜
- Java Basic Level 5〜If Statement〜
- Java Basic Summary from Level1 to 5
- Java Basic Level 6 〜Traning of If statement〜
- Java Basic Level8 〜How to use for statement〜
- Java Basic Level 8.5 〜Array〜
- Java Basic Level 9〜Training of for statement〜
- Java Basic Level 10 〜While statement 〜
- Java Basic Swing〜オブジェクト指向〜
- Java Basic Swing Level 2〜オブジェクト指向2〜
- サンプル実装〜コンソールゲーム〜
- Java Basic インターフェース・抽象クラスの作り方
- Java Basic クラスとは〜Step2_1〜
- Java Basic JUnit 〜テストスイートの作り方〜