Blenderで3Dゲーム作ろうぜ
■ このスレッドは過去ログ倉庫に格納されています
ないようなので立てました。
おまえらオープンソースの3Dソフト「Blender」のゲームエンジンで遊びませんか。
マルチテクスチャからGLSL、Bulletライブラリによる物理演算、けっこう何でもできますよ。
作ったゲームはBlender同梱のPlayerでWin/Mac/Linux対応品として配付できまっせ。
.exe/.appも吐けます。
スクリプト言語はPython。マイナー気味ではありますが、何気に小粋な言語ですよ。
関連スレとかは2以降で。 >>250
全てを完全に保っておくならならsceneをpauseするしかないと思いますが、
一部分のフラグやプロパティだけを裏方シーンやglobaldict等に保存しておいて
その情報を使ってシーンを復元するというのが妥当だと思います。
完全な復元は無理ですが、一般的なゲームのエリア移動も
全て完全に記憶しているのはあまりないですよね。 「Track to」を設定した物体までの距離を表示させるにはどんなことが必要でしょうか? TrackToの対象オブジェクトの名前が分かってれば
自分側オブジェクトに次のスクリプトをつければできそう。
controller = GameLogic.getCurrentController()
player = controller.getOwner()
distance = player.getDistanceTo(相手オブジェクトの名前) 値の表示はプロパティテキスト表示を使うしかなくて
ttp://www.tutorialsforblender3d.com/Game_Engine/Tutorials_index.html
の下のほうのText Tutorialを参考にすれば出来ると思う。
あとは先ほどの「distance」の値を
messageとか何らかの方法を使って
テキスト表示用オブジェクトのプロパティ「Text」に
コピーしてやれば距離の表示ができるはず。 ニセ・メシア に関する預言
ヨーロッパが巨大な軍事国家になり、10人の王があらわれる。
ニセメシアがフランスから、あらわれヨーロッパ連合を軍事力で支配する。
ニセ・メシアはキリストのような顔をして白い衣装をまとう。
キリスト教に悪魔の教えをまぜて信者たちを洗脳する。
木曜日を祝日にする世界統一ニューキリスト教を世界にひろめる。
ローマ法王を惨殺し、キリスト教会をのっとる。
この男の正体は、サタン 黙示録の獣と預言された男である。
にせ救世主は、不思議な技(トリック)をつかい
キリスト教徒をだます。
恐怖政治をしき、逆らうものは惨殺していく。
獣の数字を全人類につけ、コンピューターで人類を監視する。
中東で、核戦争をひきおこし、世界の都市に死体の山を築く。
サタンは人間の死体を好むサディストである。
キリストの生まれ変わりを名乗るメシアの姿をした男にキヲツケロ!!
>>254-255
どうもです。
質問したこと以外にもいろいろなことがわかり、知識がふえました。
オブジェクトの座標とかってどう取得したらいいんですか?
一括でなく個別で取得したいんです。
x座標 y座標・・・と別々に
できればrotateも取得したいです。 MMDみたいにBoneに剛体を設定して髪揺れとかできますか? >>259
BGEのAPIはここ
http://www.blender.org/documentation/249PythonDoc/GE/index.html
オブジェクト.worldPosition で list[X,Y,Z]
オブジェクト.worldOrientation で 3x3 Matrix [[float]]で返ってくると思う
X座標がほしい場合は
position = オブジェクト.worldPosition
position[0]で取得できるはず
>>260
boneを物理エンジンで揺らすことは現状できないっぽいです
2.5ではできるとかできないとか・・・
>>261
>>>260
>boneを物理エンジンで揺らすことは現状できないっぽいです
>2.5ではできるとかできないとか・・・
>
>
ええ!!2.5ではできる予定なのか!?
こりゃたのしみだ(^^) 263ですが、
もう少し例を書いていただけますか?
未だにpythonの使い方がよくわかりませんw
APIも読んだのですが、いまいち・・・ >>264
俺は >>261 じゃないけど、
>オブジェクト.worldPosition で list[X,Y,Z]
>オブジェクト.worldOrientation で 3x3 Matrix [[float]]で返ってくると思う
これが元質問に対する例というか答えそのものだと思う。 と言うか、
>未だにpythonの使い方がよくわかりませんw
>APIも読んだのですが、いまいち・・・
そういう種類の話となると、最早スレチかもしれない。Python 自体は別にBlenderとなんの関係もない
純粋にプログラミングの為の言語なので、「使い方」 じゃなくて、コーディングそのものを勉強
(と言ってもそんなに大変じゃないが) しないと、多分入門者がわかるような説明も例も解説も出来ないかも
詳細に書いたら、丸々スレチなまま、結構なレス数を消費してしまうぜ?
とりあえずBGE用に書かれたスクリプトを読んで参考にするのが近道かも。
Cとかの基礎をなぞったことがないと難しいとは思うけど・・・ >>265 >>266
他人にたより過ぎるのはよくないので、
勉強してみます。
いろいろとありがとうございました。 >>267 あんまり突き放すのもアレだから、簡単にだけ書いとく。
入門サイト読む前の、基本的なポイントだけな。 ただし Python 限定。 目的が Blender/Python だろうからそれでいいよね?
さらに箇条書きで、ノイズカットして要点だけに絞る。 詳細はググるなりして追いかけて調べてくれ
1.ソース中にある # で始まる行はコメントと呼ばれる。 Pythonエンジンは # で始まる行の右以降を全て無視する
2.ただし Blender/Python の Script 中、冒頭の数行のコメントは特別扱いされている。
… これは 「Python さんには関係ないけど、僕(Blender)には用がある」 ということで、コメントの機能を利用しているってこと
例)
#!BPY ← Blender/Python のお約束
# coding: utf-8 ← 「この *.py ソースは日本語を含む多国語で書かれてます」 という文字コードの指定。省略した場合、多分 iso-8859-1 (ラテン英数文字) として認識される
#""" ← 続く文字列の開始。下の ※ まで
#Name: 'This is my test' ← Python には関係無いが、Blenderが読み取る要素その1 「このスクリプトの表記名」
#Blender: 249 ← その2 「対象Blenderのバージョン名」
#Group: 'Object' ← その3 「Blender内での機能区分」 BlenderUI上で、どこの scripts に登場させるか
#ToolTip: 'Test Script' ← その4 見たまんまツールチップへの表示文字列
#Version: v0.1 ← その5 この自作スクリプトのバージョン名
#Author: foobar ← その6 この自作スクリプトの作者名。 例は俺
#""" ← ※ 文字列の終了。ここまで
import re ← ここから Python の世界。 Pythonが持っているライブラリ、あるいは自作のライブラリなどを輸入する
import os
import math
from Blender import * ← この1行も import。 意味は 「Blenderという名前のライブラリの中から、* = 全部 を輸入する」
:
3.変数の考え方として、C言語系(C、C++、Java、C# などなど)の場合、大抵そこには 型が必要。
例) int abc; // abc という名前を付けたこの変数は int 型(整数型)です。
しかしPython の場合は、意識的にこれを記述する必要が無い。(abc に整数が放り込まれたら、abc は以降整数を持っている人として振舞う、みたいな)
なので、「知らない内に想定外の内容が放り込まれたりしないように」 注意すること
4.Pythonのプログラムはとても独特。 特に目立つ部分としては、「インデントの数で、処理の塊を表現してる」 って部分。
例)
for ob in object_list:
if ob.getType() == "Mesh":
print "メッシュきたこれww"
上の例は、「for で繰り返す処理、の中に if で判断する処理があり、if の結果が "その通り!" ならば、print を実行している、って事。
C系言語の場合、{ } で囲んで現すが、Python はこれをインデントで現す
5.さりげなく4で登場した、for や if や プログラムの動きを制御する為の制御構文。 繰り返したり、条件判断したりする。
他、print とか書いたのは、Python が内部で持ってる組み込み関数。 他にも Python自体が判断している予約語などもある。
それら以外の import されて始めて使えるものは、ざっくりと ライブラリとか呼んだりする。 ちょうど、図書館から必要なものを借りてくるようなイメージだ
6.処理の単位には、単純に上から下へと流れて実行される本線と、他に 「何かを受け取って、何かして、何かを返す」 処理を一塊にした 『関数』 と言う単位のほか、
その関数をまとめた クラス という単位もある。 詳細は切りが無いのでググって
とりあえず俺の長文鬱陶しいので、この辺で。スレチスマソ あ、あと一個だけ。 特に Blender/Python などの実際に動いているソースを見た時、よく目にするものの説明だけ
7.ソース中にある 「AAどっとBBどっとCC()」 のような記述の意味は、6に挙げたクラスの概念と関係している。
端的に言うと、「AAの中にあるBB、そのBBが持っているCCという処理を実行する」 という意味。 これが
「AAどっとBBどっとCC」 となっていた場合、それは 「AAの中にあるBB、そのBBが持っているCC」 という意味になる。※括弧が無い点に注意
ここでのキーワードは、オブジェクト。ただし Blender で言うオブジェクト、じゃなく、プログラミングの世界で言うオブジェクト。
これの意味は、「なんらかの一塊の処理」「一塊のデータ」 みたいなもの。 それを、「実際に動作させる事が出来る状態にしたもの」 みたいな感じ
Blender/Python では、ホストになるBlender側が、「自分の中にあるデータ類」 を、Pythonのオブジェクト機構を通じて渡してくる、
自分はそれを介して使い、Blenderの中のデータに触っている、と思っとけばおk
以上スンマセン
>>268~271
わざわざサンクスです。
実はCはほんの少しだけかじってますので
こういう風に説明されるとわかりやすくてすごく助かります。 yo_frankieのゲームってどうしてあんなにメモリー食うのかね
PS2なんかは32MBぐらいで動いているのにね...。
仕組みが解らんです。 何方か、>>211のやり方を詳しく教えていただけませんか?
直接Boneにペアレントする事が出来ないでいます…。 Blender 2.5 Alpha 0 がリリース しましたね。
と、いつも参考にしてるサイトに書いてありました↓
http://bmania.blog70.fc2.com/ 2.5、まだGEの部分はロジックしか組めないような
当たり判定の設定とか重力設定の項目どこかにある? dofのスクリプトってグラボとかに影響されるのか?w
なぜか、実行されないぜ・・・orz オブジェクトにパスアニメーション設定してゲームで動かすってことできますか? 2.5のBGE内でラグドールの動きをboneに設定できるみたいだ
個人的には嬉しい限りだ >>280
これできるらいいですけど...やり方が解りませんw うわさは聞くものの実際に動いてるものを見ないことには・・・
今の実装じゃまだ無理なのかなぁ ttp://www.youtube.com/watch?v=kTdRQwbaf4I
これが一応動いてるやつね。
もう見てるかもしれないけどw >>283
thx!
コメント見た感じalpha0でできるっぽいね
これはやってみるしか >>283
細かい説明が....
まぁ!だれかできたら教えてちょ★ http://www.youtube.com/watch?v=xEhK0BaQ8gc
Blender armature ragdoll video tutorial
http://www.youtube.com/watch?v=BXeeA_RJEMk
Blender armature ragdoll
前のバージョンで同じような事をしている人みつけた
とりあえずArmatureがリアルタイムに剛体の位置、回転に同期して
スキンがAmratureに応じてちゃんと動いてくれることは確認できた。
ただ、ジョイントはまだ2.5ではpivotの位置で回転してしまってまともに使えない。
また、BGEのUIが2.5では大部分が未実装なので
以前のバージョンでシーンを作ってから
2.5で開いてArmature Actuatorを設定してやる必要があるみたい >>286
それはラグドールのIPOをArmatureにベイクして
アニメーションで使えるようにするやつ。
今回はBGEでリアルタイムに動くようになったわけだ >>285
すまんw
今、GUIに今頑張ってなれようとしてるw このソフトて有名人の顔取り込んで身体作って交尾させるゲームとか
作れる?
本気で聞いてます。 やっぱりゲームを作るのって大変ですよね。1個1個コマンド?
撃ち込まないといけないぽいし 3Dおっぱいをまさぐったりするサンプルは御座いませんか? アプリウィンドウ全体をドラッグで上下させるとアプリ内のおっぱいがぷるんぷるんなんです >>292 一個一個コマンドを打ち込む、って感じよりも、
やりたい事をどうすれば出来るかを論理的に分解して考えて整理して、
日本語ではない言葉に翻訳しながら文章で一つも漏らさずに、説明していく感じ
=プログラミング
人間同士の交尾のゲームていろんな動作(笑)があるけどあんなの素人じゃできないよねw IKになってるボーン(?)のアニメーションををbakeして普通のボーンのアニメーションとしたいのですがうまくいきません。
IK付きのモデルアニメーションをXファイルに出力して使用したいのですが、ご存知の方がおられましたら教えていただけないでしょうか。
1人の最強ボスを倒すゲーム作りたいんだがどうしたらいい?
そのボスは体力がほぼ無限で倒すことすら不可能
三国無双で言ったら呂府みたいな存在。 ははーんゼビウスのバキュラは256発で倒せるとかそういう設定のことですね?
わかります >そのボスは体力がほぼ無限で倒すことすら不可能
じゃあ倒せないじゃん。 …って突っ込みはおいといて、
要はバトルシーンのテストを作ってみたいって話でおk?
自キャラ、敵キャラがいて、とりあえず攻撃当てられる、みたいな とりあえずゲームのジャンルは何なのかはっきりさせようぜ
弾の撃ち合いとかなら割と簡単だ できるけどいろいろ無駄な気がする
もちろん描画3Dで実質2Dゲームってのもあり AIってみんなどうしてる?
AIがめんどうなんだよな
ロジックだけだとつまらないのものしかできないし・・・
パス検索とかそういうのがもう少し簡単にできるといいんだが・・・
やっぱりプログラム組むしかないか >>301
ターミネーターのシュワちゃんをやっつけるって設定どう?あいつ1のときやたら強かったし >>304
>やっぱりプログラム組むしかないか
圧倒的にその方が早い。そして普通そうする
結局やることは同じなんだし
複雑なことやるならPythonで書いた方が楽なはず rigidbodyを設定したものをグループ化して他の.blendファイルから引っ張ってきて
emptyのdupligroupして使おうとしたのですが
バラバラになってしまいます
バラバラにしない方法ってありますか?
それともこれは不可能なことなんでしょうか? >>308
グループってObject and LinksのGroup?
バラバラにっていうのが一つの剛体にならないって意味なら
それは直接は関係ないよ
Object and Linksの「Par:」に親となるオブジェクトを設定すると
子オブジェクトは親にくっついて動くようになる。
さらにLogic PanelのBoundsで
子オブジェクトの「Add to Parent」と
親オブジェクトの「Compound」を有効にすると
子の接触も有効になる。
親子関係にしたオブジェクトを他の.blendファイルから持ってくる場合には
親子両方を同じGroupにしておく必要がある。 そういやこのスレの人間は blender2.5 とか使ってるひといるのかな
まだAlphaってか、奇数verは開発版らしいけど つい最近になって2.49b でBGEにハマり、色々作って遊んでる人間だけど、
これあれだね。 結局センサーはイベントトリガなのでほぼ必須だけど、
コントローラは最終的にほぼ全部 Python / Module にしてしまいたくなるねww
いや勿論アクチュエータも便利だから使うは使うが。カメラとかサウンドのタイミングとか
あと Action再生とか。
てかひょっとしてあれかな、全部Python側で実装すると、Logicで指定して実行するより遅くなるかな? logic brickだけじゃ痒いところに手が届かないし
すぐ複雑になっちゃうからね。
速度はちゃんと比較しない限りわからないけど
単にAPIを呼び出すのに使うだけなら
そう変らない気もする >>313 レストンクス! なるほど… そうか
Blender内の処理は Embeded Python でバイナリ実装されてるだろうから、
そういう意味だと Pythonオブジェクトに変換される際のオーバヘッドは多少あるかもしれないが、
実際の内容として、それが問題になるほどオーバスペックな事するくらいなら、
むしろその部分だけCで記述して含めてしまえばいいが、
※参考:C/C++とPythonの、"相互な"連携方法資料
http://www.python.jp/doc/2.3.5/ext/intro.html
http://d.hatena.ne.jp/Wacky/20060103/1136292735
しかし Blenderをホストにして大半の表示処理やオブジェクト管理をしてもらってる状態で
そこまでしなきゃならない状況も無いような気がするので、結局全体として
そう変わらない気も確かにするww
俺は普通の開発環境と同じ捉え方で、基本的に必要なアルゴリズムは全部Pythonで書くから
API呼ぶだけなんて事は無いんだが、それにしても
上に書いたようなブリッジの時のオーバヘッドさえ問題にならなければなんでもいいや
てか、問題になったとしても面白いからいいやww
BGEで作ったゲームを販売するのって可能でしょうか? 販売は可能です。
ただexeに固めた場合は
ソフトのライセンスがGPLになるかもしれないらしいです。 って
このスレの>>34あたりからのレスに書いてあるよ 最近Blenderに興味を持って、ゲームを作ってみたいんですけど
わかりやすい日本語ドキュメントありませんか?
閉鎖されてるところとかあって情報が入らない・・・ 日本語のサイトはないんじゃない?
ゲームは英語わからないときついかもね >>322
そうですか〜残念orz
英語は苦手なのであきらめることにします デジタルロケが無料ならいいんだけどな
EXEファイル化のときだけ課金制にすりゃユーザー増えるだろうに 外部.blendファイルをリンクすると、絶対パスでリンクしているようで
ゲームのファイル全部を動かしたときに読み込まれないんですが
相対パスでリンクするのってどうやるんでしょうか・・・ Digital Loca の1だったら昔ワゴンセールで2000円で買ったなww
使ってないけど pure pythonな感じで組んだ自作エンジンがあるんだけど
キー入出力とアップデートのモジュールを差し替えれば、そのまま使えるかな 使えないと思う。主語が無いのでわからないが。
少なくともそのキー入力他と、あとメインループはBlender側の仕事になるから(PythonはEmbededと言う事)、
丸ごとPureに書かれてるとしたら、モジュールの関数単位で使える物があれば使えるかもね、って感じ BGE内でdraw extraのx-rayみたいなのってできますか?
常にオブジェクトを見えるようにしたいです。
もちろんオーバーレイとかではなくて。 >>290
市販ソフトに、顔写真から 3D キャラクターを作成できるというやつがある。
名前は iClone( アイクローン ) 3。http://www.ah-soft.com/iclone/
残念ながら、Blender にデータを持ってくることはできないようだ
(とむりやり Blender の話題にしてみる) BGEではデフォルトで裏面描画しないと思ってたけど・・・? MMDみたいに髪揺れとか剛体の物理演算でできないのかな..。 2.5では>>283を使えば一応揺れる物が作れると思うけど
MMDみたいに部分的なsoftbodyが使えるって話は出てない >>333-334
MMDってBulletで言うRigidbodyしか存在しないと思ったが違うの?
MMD関連については俺はC++でBulletとDirectX使って自己満クローン作って遊んでたが、
部分的にsoftbodyとか初耳。具体的にどこ?そんな設定やトリガ自体あのソフトに無くね?
てか、BGEいじろうって人間ならBlenderでもBGE側にしかないRigidBodyJointConstraintsで
なめらかな剛体多関節表現くらい知ってて使ってるよな?
MMDの物理演算も同じだぞ?お互いに同じライブラリの機能で実現してるし
Boneを剛体で動かしてBAKEができれば..。
揺れ物もできそうだけど..。 softbodyは関係なかったか。
なら多関節剛体でスキンメッシュを動かせる2.5では
MMDと同等の動きをリアルタイムで実現できると言えるね >>338
え?剛体多関節がRigidbodyJointの事なら、俺が知る限り2.48からずっとあるぞ?
お前本当にBlenderユーザ?
>>340
RigidbodyJointはずっと前からあったけど
そのRigidBodyJointで接続された剛体オブジェクトにArmatureを同期させて
そのArmatureでスキンメッシュをリアルタイムアニメーションさせるのは無理だったはずなんだが
2.48で単一メッシュの髪をリアルタイムに揺らせるって言うんなら
ぜひ動作デモを見せてくれ >>341
できるのは2.5からだ
過去ログ読んでみろ
たしかそれっぽいのがあったはずだ
なかったらスマソ 多分 ID:zghN0sYx が書いてるのは Blenderの剛体多間接なら前から出来るよってだけの話で、
単一メッシュでどうこうって話はしてないと思われ
結局ID:zghN0sYxが338をよく読まず
しかも煽り口調で発言しちゃった結果なんだよね DAZのサイトから無料のVictoriaってのもらってきて無料のDAZ 1.0でインポートしてobjファイルでエキスポートして
BlenderでインポートしたらグレーのVictoriaがグイングイン回ってます
これから服とか着せていこうと思ってる新参ですがどうかご指導お願いします >316 :名前は開発中のものです。:2010/01/24(日) 21:39:09 ID:oiPQt8Gh
>BGEで作ったゲームを販売するのって可能でしょうか?
>317 :名前は開発中のものです。:2010/01/24(日) 22:41:22 ID:zaZn8Q9M
>販売は可能です。
>ただexeに固めた場合は
>ソフトのライセンスがGPLになるかもしれないらしいです。
>318 :317:2010/01/24(日) 23:21:08 ID:zaZn8Q9M
>ってこのスレの>>34あたりからのレスに書いてあるよ
私は316ではないですが、結論は以下で正解なのでしょうか?
>38 :名前は開発中のものです。:2007/04/12(木) 22:42:45 ID:aDiQn4c4
>スタンドアロンに含まれた全てのデータはGPLでカバーされることになる。
>それが嫌なら外部の.blendファイルを読み込むようにして配布すること。
もし.exe化しない場合は、GameEngineファイル(?)と.blendファイルの2つを
用意して、ユーザーの操作で.blendファイルをGameEngineファイル(?)に読み込ませれば
ゲームが動くわけですか?
この時、.blendファイルの中が見られない様にしたりできますか?
Blenderの.exe化機能を使わなくても、見かけ上ひとつのファイルから
(ファイルの中はGameEngineと、.blendファイルに分かれていても)
ゲームが起動したら.exe化されているとみなされ、GPL が適用されるのですか? >>349
ライセンスの件については識者に委ねるけど、とりあえず
>GameEngineファイル(?)と.blendファイルの2つを
>用意して、ユーザーの操作で.blendファイルをGameEngineファイル(?)に読み込ませれば
そんな意味わかんない事出来るの?API上にblendファイルのロードとかあったっけか
出来たとしてもその入り口は当然自分で書かないといけないよね。
>この時、.blendファイルの中が見られない様にしたりできますか?
この時も何も、そもそもblendファイルを見えないようになんて出来ません。
それはただのBlender上での標準の保存形式ファイルです。
GameEngineって曖昧な言い方ではあるけど、正体として出来上がる exe はそのプラットフォーム
(exeで言えばWindows)上での一般的なメインループと、中に(Pythonコード、あるいはLogicでの指定内容など)が
書かれた内容の解釈と実行、またそれに伴う関数呼び出しだけで、Packされるにしてもされない(外部ファイル状態)にしても
それを利用するという観点では同じになるんじゃね? 違うのかな。
その辺識者に判断を委ねるか、自分でライセンス確認した方がいいね
■ このスレッドは過去ログ倉庫に格納されています