Unity のiOS, Android環境が個人・小規模開発者向け完全無料
Unityで嬉しいニュースがありましたので紹介します。
Unity, iOS と Android を含む個人・小規模開発者向けの
モバイル向け機能を完全無償化
Unity - Unity PRESS RELEASE – Unity, iOS と Android を含む個人・小規模開発者向けの モバイル向け機能を完全無償化
今までは、Unity無料版を利用している場合も、AndroidやiOS向けにビルドするためには各プラットフォームに対して有料のライセンスが必要でしたが、今回、それが無料でビルド可能なりました。
Unityのサイトからダウンロードできる無料フルバージョンの最新版では、すでにデフォルトでAndroid、iOS向けにビルドできる様になっています。
なお、Android向けのビルドではAndroid SDKが必要です。iOS向けのビルドは、Mac OS上でのみ可能です。
Unityを使ってみた
Unity Technologies社が提供しているクロスプラットフォームのゲームエンジンであるUnityを最近はじめました。
有料のUnity Proから機能限定版のUnityライセンスが、条件を満たせば無料で使うことができて、利用する人が急増しているそうです。
Unity
http://japan.unity3d.com/
詳しいライセンスやどんなことができるのかは、Unityの公式サイトで確認してください。
私はまだ無料版しか触っていないのですが、実際に使ってみての雑感など羅列してみようと思います。
はじめてUnityを使うには?
初めて触る人は、Unityのチュートリアルなどを見ながら遊んでみるとよいかと思います。スクリプトのAPIや用語などは公式のリファレンスに載っています。
http://japan.unity3d.com/developer/document/
日本語の参考書も最近充実してきていますし、参考サイトも探せば結構増えてきているので、基本的なことはGoogle等で検索すればわりと欲しい情報が見つけられると思います。
プログラミングに関して
ゲームのロジックなどはプログラムを書いて制御することができます。C#, JavaScript, Booが利用可能です。
- Boo ・・・ 使っていないので不明(Booistさんゴメンナサイ)。
- JavaScript …しばしばJavaScriptと紹介されているが、実際は文法を拡張した「UnityScript」。変数の型宣言やクラス、プロパティ、を定義することができるなど、使いまくるとJavaScriptに見えないソースコードが出来上がります(恐らくMonoVMで動作するのに効率的なのだろう)。
- C# ・・・ 個人的にC#が使いやすいと思いました。主に開発環境的な問題が理由なんですが、ソースコードの自動補完(インテリセンス)、リファクタリング等のツールが良く使えるのが大きかったです。私みたいに普段の開発でIDEにどっぷりな人はC#が良いのではないでしょうか。
ちなみに、Unityには、MonoDevelopを改造したエディタが付属していますが、多分多くの人が使い慣れているVisual Studio(ExpressもOK)と連携させて開発することもできます。
無料の範囲内でできることは?
無料版では、Windows,Mac,Linux各プラットフォームの実行ファイル形式やブラウザで実行できる形式に出力できます。Android,iOS,各コンシューマゲーム機用の実行ファイルを出力する場合はそれぞれのライセンスを購入する必要があります。
また、いずれの場合もゲーム起動時にUnityのロゴが必ず入ります。
開発に関連するところでは、Pro版専用の機能として、メモリ量などを確認できるプロファイラの利用や、Occlusion Culling、Static Batching、など、主にパフォーマンスを向上させるための機能や設定、シーンの非同期読み込み等が挙げられます。
APIに関しては、OpenGLの低レベルなラッパーを呼び出し、テクスチャにレンダリング結果を描画するなど、やや凝ったことをするときなど、Pro版が必要になってきます。しかし、最初に作る様なとこは無料でできるので、制限にイライラしないで開発を進められると思います。
どんなゲームが作れる?
基本的にどんなゲームでも大丈夫です。
FPSやTPS等、地形の上を移動するようなキャラクタの操作はUnityの得意分野でしょう。
物理エンジンを駆使する様なゲームも(リアルな物理シュミレーションというより、あくまでゲーム的な利用として)相性がいいと思います。奥行き方向の移動、回転を制御することで2Dの物理系ゲームも可能です。もちろんアクション系やアドベンチャー系以外のジャンルでも使えます。
Unityを使うと何がうれしいの?
Unityで開発して最初に感じたことは、普通に開発していてもソースコードが長くなりにくいことです。オブジェクトのレイアウト、テクスチャやマテリアルとの紐付け、パラメータの初期値の設定など、ソースコードで書くと冗長だったり直感的ではない部分はUnityデザイナに任せてしまえるので、スクリプトは、ゲームロジックの記述に専念できるのだと感じました。
ゲームのデバッグ中に、シーンビューで全体を見渡したり、オブジェクトの座標やパラメータをリアルタイムに変更したりできるのは開発が驚異的に捗ります。
その他にもUnityを使うメリットは数え切れないほどあります。
これを使いこなせれば、楽しいゲームプログラミングLifeが送れるのではないかと思います。
気が向いたらUnityの記事をちょくちょく投稿するかも(^_^)/~~
Blender Python の基本
前回に引き続き、Blener Pythonプログラミングに関しての内容です。いよいよプログラムの中身に入っていきます。
基本的なこと
2.7以前の書き方は使えません。
前回で説明した Pythonコンソール,テキストエディタのウィンドウでは日本語等2バイト文字の入力、表示はできなそうです。(2013/3/19 追記:Windows版ではできないですがLinuxでは可能だと情報をいただきました)外部エディタで編集したものを読み込んで実行する場合は、日本語も利用できます。UTF-8で書けば、コメントや文字列リテラルに日本語を含められます。*1
APIについて
Blender Pythonでは、bpyモジュールが組み込まれていて、Blenderに関する操作はその中で定義されています。
下記のようにインポートして利用できます。*2
import bpy
bpyの中でさらにいくつかのサブモジュールに分かれています。よく利用すると思われるものを下に挙げます。それぞれのモジュールがどのような役割なのか構成が分かれば、期待した処理を行うモジュールを見つけやすいのではないでしょうか。
- bpy.ops
Blenderの操作に関するもの(opsはOperatorsの意味)。opsの中でさらにカテゴリごとにサブモジュール化されています。例:オブジェクト関連の操作は bpy.ops.object, メッシュ関連は bpy.ops.meshなど
- bpy.context
今現在アクセスしている状態に依存するメンバにアクセスできます。基本的に読み取り専用
- bpy.data
すべてのBlenderおよびPythonのデータの情報にアクセスできます
- bpy.types
モードの切り替え・取得
- bpy.ops.object.mode_set(mode='OBJECT', toggle=False)
現在のモードを指定したものに切り替える
modeに指定できるのは'OBJECT','EDIT','SCULPT','VERTEX_PAINT','WEIGHT_PAINT','TEXTURE_PAINT','PARTICLE_EDIT','POSE' のいずれかの文字列です。
- bpy.context.mode
現在のモードを取得する(読み取り専用)。
戻り値は文字列で返ってきます。
オブジェクトモード → 'OBJECT'
編集モード(メッシュ) → 'EDIT_MESH'
編集モード(アーマチュア) → 'EDIT_ARMATURE'
頂点ペイント → 'PAINT_VERTEX'
等々...
上のmode_setで渡す文字列と若干違います。
モードを設定するのはBlenderに対する操作なので bpy.ops、取得は現在のコンテキストの状態を取得するので bpy.context からアクセスします。
- bpy.ops.object.add(type='EMPTY', view_align=False, enter_editmode=False, location=(0.0, 0.0, 0.0), rotation=(0.0, 0.0, 0.0), layers=(False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False))
現在のシーンにオブジェクトを追加する
Blender上からの操作では、3D ViewウィンドウでShift+Aからのオブジェクトの追加に当たるコマンドです。
すべての引数は省略可能で、指定するときは type=hogehogeのようなキーワード引数形式で指定する必要があります。
typeには追加するオブジェクトの種類を'MESH', 'CURVE', 'SURFACE', 'META', 'FONT', 'ARMATURE', 'LATTICE', 'EMPTY', 'CAMERA', 'LAMP', 'SPEAKER'のいずれかを指定します。
bpy.ops.objectにはempty_add, camera_add,armature_addなど、typeの引数だけが外れた特定の種類のオブジェクトを追加するメソッドもあります。詳しくはbpy.ops.objectのAPIリファレンスを参照してください。
- bpy.ops.mesh.primitive_xxx_add(view_align=False, enter_editmode=False, location=(0.0, 0.0, 0.0), rotation=(0.0, 0.0, 0.0), layers=(False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False))
基本形状のメッシュオブジェクトの追加
指定可能な形状は下記のとおりです。
- bpy.ops.mesh.primitive_circle_add 円
- bpy.ops.mesh.primitive_cone_add 円錐
- bpy.ops.mesh.primitive_cube_add 立方体
- bpy.ops.mesh.primitive_cylinder_add 円柱
- bpy.ops.mesh.primitive_grid_add グリッド
- bpy.ops.mesh.primitive_ico_sphere_add ICO球
- bpy.ops.mesh.primitive_monkey_add モンキー
- bpy.ops.mesh.primitive_plane_add 平面
- bpy.ops.mesh.primitive_torus_add トーラス
- bpy.ops.mesh.primitive_uv_sphere_add UV球
例: 座標(1, 0, 0)の場所にに z軸周りに45°傾けた立方体を追加する
bpy.ops.mesh.primitive_cube_add(location=(1, 0, 0), rotation=(0, 0, pi * 0.25))
情報の取得系の操作
- bpy.context.object
現在アクティブなオブジェクトを返す。
アクティブなオブジェクトが存在しないときはNoneを返す。
- bpy.context.selected_objects
編集されているオブジェクトをリスト形式で返す。
オブジェクトはbpy.types.Object型で返ってきます。
bpy.types.Object クラスのメンバーはたくさんあるので一部だけ紹介します。下記に紹介したものは取得と代入が可能です。
- name
名前
- location
座標
- scale
スケール
- select
選択されているか否か
- hide
非表示状態か否か
参考
3DモデリングソフトBlenderでプログラミング(導入編)
何故か最近3Dモデルを作成してゲームなど作る機会があって、Blenderという3Dモデリングソフトを使っています。*1
他ソフトと連携させるためにモデルのオブジェクト名を連番で並べたり、頂点の座標情報を取ってきてゴニョゴニョしたりプログラマブルなことをやりたいなと思っていましたが、Blenderには、Pythonでスクリプトを実行したり、アドオンの開発をしたりする機能が備わっていることを思い出しましてBlenderのPythonブログラミングに手を出し始めたところです。
この辺のことに関しては、まだネット上の情報は多くないので、情報共有も兼ねて(私も完全に把握できてはいませんが)、調べつつ書き留めていきたいと思います。
プログラミング開始前の設定
日本語化
現在のバージョンでは、デフォルトで日本語化に対応しています。なお、私は今まで日本語化によって不具合に当たったことはありません。
- 画面上にあるメニューからFile→User Preferencesを選択する
- Blender User Preferencesのダイアログが表示されるので、Systemタブを選択する
- 右下のInternational fontsのチェックを入れる
- Languageのリスト一覧から日本語を選ぶ
- Translateのinterface, tooltipにチェックを入れる
以上の手順を行うとメニューがすべて日本語に切り替わるので、ダイアログ下の「デフォルトとして保存」を押して次回以降、日本語のUIで起動できます。
プログラムを書く
Blender Pythonプログラムを書くための方法がいくつかあります。
Pythonコンソール
ウィンドウタイプ一覧からPythonコンソールを選択して表示させます。
Pythonコンソールは、画像の様にPythonインタプリタをインタラクティブモードで実行したような画面になっています。動作もインタラクティブモードとほとんど同じように、一行毎にプログラムが実行されて、返された結果が出力されます。
そして、このコンソールでは、入力途中でCtrl+Spaceキーを押すことで入力補完ができます。候補が複数存在するときは利用可能な変数やメソッドの候補一覧が表示されます。
dirやhelpなどのpythonのビルトイン関数*3と合わせてライブラリのクラスやメソッドを確認するのに大変重宝します。
Blender内のテキストエディタ
Pythonコンソールと同じように、ウィンドウタイプ一覧からテキストエディタを選択します。
ウィンドウのヘッダにあるNewボタンを押すと、テキストファイルが新規作成されます。スクリプトを書いて、テキスト>スクリプト実行(ショートカットキー:Alt+P) から中身を実行することができます。テキストエディタには、プリセットでスクリプトテンプレートがいくつか用意されているので、実装の参考になるかもしれません。ヘッダのテキストメニューから編集したスクリプトをファイルに保存したり、ファイルから読み込むこともできます。
外部のテキストエディタ
自分の使い慣れたエディタや、コーディングを補助する機能があるエディタを使いたい人も多いと思います。
上記のBlenderウィンドウのテキストエディタからファイルシステムに保存したもの(もしくは既存のPythonスクリプトのファイルを読み込んだもの)は、実際のファイルと関連付けられています。そのスクリプトファイルを、お使いのエディタで開いて編集・上書き保存をしてBlenderに戻ると、外部からファイルが変更されたことが検出されて下記のようなマークが出てきます。そのマークを押して再読み込み(ショートカットキー:Alt+R)して変更を反映して、上記の手順でスクリプトを実行できます。
終わりに
次回から実際にBlenderでプログラムを書いていきます。Blender自体の操作方法や3DCGモデリングの用語等については、他のWebページの解説や参考書でご確認ください。
最後に個人的におすすめのサイトや書籍を載せておきます。
次回に続く
- 解説が詳しいBlenderの入門サイトです
- ↓入門書としても内容がしっかりしていて丁寧で非常にお勧めできます
キャラクターをつくろう! 3DCG日和。 vol.3 -Blenderでつくる、ポリゴンキャラクター
- 作者: 友
- 出版社/メーカー: ビー・エヌ・エヌ新社
- 発売日: 2012/06/18
- メディア: 単行本(ソフトカバー)
- 購入: 7人 クリック: 195回
- この商品を含むブログ (3件) を見る
Play Frameworkを使ってみた
最近流行り?のウェブアプリケーションフレームワーク Play Frameworkを使うことになりました。
使い方などをメモしていきます。
今回は、まずは導入の仕方などについて。。。
ダウンロード
http://www.playframework.org/
上のURLからPlayの最新版ダウンロード。
私は現時点で最新版のPlay 2.1 RCを落としました。安定版のバージョン2.0.4とRC版の2.1がありますが、どちらでも大差はないはずです。
そして、ダウンロードして展開したものを適当な場所に置き
play.batがあるフォルダの場所にパスを通します。
早速Webアプリを作成する
コマンドラインを立ち上げます。
下記のコマンドを入力すると、現在いる位置のフォルダ直下で、プロジェクトが新規作成されます。
% play new [プロジェクト名]
今回は例としてHelloWorldという名前で作成。
% play new HelloWorld
Playのロゴが立ち上がり、いくつか質問されます。
What is the application name? [HelloWorld]
アプリケーション名を決められるらしい。
何も入力せずにEnterでプロジェクト名と同じになります。
Which template do you want to use for this new application? 1 - Create a simple Scala application 2 - Create a simple Java application
雛形のソースコードをJavaで作るかScalaで作るか聞かれます。
私はScalaに詳しくないのでとりあえず今回は2のJavaで作ります。
これで新規プロジェクトが作られました。
HelloWorldというディレクトリが新たに生成されたと思います。
% cd HelloWorld
プロジェクトのフォルダ内に移動します。
% play run
と打つと、Play Frameworkに用意されているWebサーバで現在のプロジェクトのサービスが立ち上がります。
初回はやや時間がかかりますが、Readyとなったらブラウザで http://localhost:9000/ へ行って確認してみましょう。
このように表示されたら成功です!
デフォルトでは9000番ポートで走ります。
別のポートで走らせたいときは、下記の様にポート番号を指定します(ダブルクォーテーション"~"で囲む場所に注意)
% play "run [ポート番号]"
例:8080番ポートで起動
% play "run 8080"
最後にPlayで開発する際に留めておきたい注意点をいくつか。
- Play Frameworkはバージョン2.0以降から大幅な変更があり、それ以前のネット上の情報がそのまま使えないことも多いです(当ブログではすべて2.0以降のものを使います)
実際にアプリの中身を作っていくところは次回以降!
それでは(^^)/~~~