Page 2 of 16

クリエイターズマーケットとライブモデリング

12月3、4日の土日に、ポートメッセ名古屋で開かれた「クリエイターズマーケット」にC3Dのメンバーとして参加してきました。
今回はC3Dのメンバー6人が、「未来」をテーマに作品を制作し、会場ではディスプレイを繋いでライブモデリングをやりました。
まず自分の作品から。

supersumo

未来というテーマに対してどうしてもロボット的なものを作りたくなってしまい、単純にロボットにしてもつまらないなぁということで日本の文化(国技ではないんですよね)である相撲を映画「リアル・スチール」な感じでスポーツできるロボットとしてみました。ほぼ全部ZBrushで制作。
拳はよくできてる感じがするのですが、それ以外はディテールが甘いですね・・・。時間の都合で足とか酷い。でもZBrush4の新機能を色々と使ったのでよい勉強になりました。

さてクリマ当日は2日ともライブモデリングをやりましたが、子どもがすごい食いついてきて楽しかったです。でもどちらかというと作っているモデルに対して興味があるのではなく、ZBrushというソフトの機能に興味がある感じです。モデルが気に入ってもらえるように鍛錬しないとですね。

1日目。なぜかカラスになりました。
ライブモデリング カラス

2日目は皆で「くま」を作るということになりました。
ライブモデリング くま

ライブモデリングは自前のMacbook Airを24インチapple Displayにつないでやったのですが、Macbook Airが400万ポリゴンとかになっても動いたのにはちょっと驚きました。いい買い物した。

色々と勉強になった今回のクリマでしたが、次からは別のアプローチができたらなと思っています。立体出力とかアプリとか。

UnityでWindowsのソフトを立ち上げる。C#

EXE形式のWindowsUnityアプリから、Windowsのソフトを立ち上げるやり方。ブラウザ向けにビルドしようとするとエラーになりました。Macはもちろん不可。
当初はそんなことができるか見当もつきませんでしたが、Facebookで質問したところ教えていただきました。
スクリプトはC#です。WindowsのコマンドやC、C++も入力できるようですが、そちらはUnity Proにする必要があります。

[javascript]
using UnityEngine;
using System.Collections;
using System.Diagnostics;

public class OpneExcel : MonoBehaviour {

void OnGUI ()
{
if(GUI.Button(new Rect(10,10,150,120),”Open Explorer”))
{
System.Diagnostics.Process.Start(“EXPLORER.EXE”,”C:¥¥Documents and Settings¥¥アカウント¥¥My Documents”);
}
}
}[/javascript]

上記の例では単純にボタンを押すとエクスプローラーが立ち上がります。

今回はC#なので色々とインポートしてMonoBehaviourを継承してから記述します。
まずはSystem.Diagnosticsを読込んで、後はSystem.Diagnostics.Process.Start関数で読込むだけです。

[javascript]
System.Diagnostics.Process.Start(“アプリケーション”,”ファイルのパス”);
[/javascript]

注意する点として、ファイルのパスに使う¥マークは2つ必要です。C#の仕様で、多分バックスラッシュがどーのっていう理由だと思います。
あまりWindows用のEXEファイルを起動させる機会はあまりないと思いますが、業務用であれば需要がありそうです。

ということで久しぶりの投稿でした。

Unityのワークショップやりました。

Unityワークショップやりました。

9月4日にUnityの初心者向けワークショップ、「スクリプトの「ス」から始めるUnityワークショップ」をやりました。
内容は午前中に基本的な使い方と物理演算のワークショップ、午後からはスクリプトの概念と、ウォークスルーのワークショップをやったのですが、配布したデータが古かったせいでウォークスルーがうまくできず、ちょっとグダってしまったのが悔やまれます。
またスクリプトの話に関してはできるだけ分かりやすく説明したつもりですが伝わったかどうか・・・。

またワークショップやるのであれば資料をしっかり用意するのはもちろん、やっぱり助手の方が欲しいですよねぇ・・・。色々準備するのに一人でやると時間かかりますし、しゃべる内容のことばっかり考えててATNDの確認とか写真撮るとか記録を残しておくなどの細かい所まで気が回りませんでした。

また参加してくださった皆さんありがとうございました。中には神奈川から来てくださった方もいたのに内容がアレで申し訳ない気分ですが、色んな方に出会えてよい機会になったと思います。
次回は・・・あるのかっ!?でもその時は今よりかなりスキルアップしてるはず(本もあるし仕事で使ってるし)なんでもっと質問に的確に答えられるはず。でもなにより準備が大切だなと痛感しました。

さて、上の画像がワークショップで使ったモデルの素材だったんですが、前ばりをしているの「MB」っていう、「QB」にかけたまぁその・・・ネタだったのですけど・・・うん、もっとボキャブラリーのセンスも磨かないとなぁ。

C3D勉強会で発表したかき氷Unityアプリ

かき氷Unityアプリ

7月31日(日)に行われたC3D勉強会に参加してきました。
事前に出されていた宿題は「夏」をテーマだったので、私は「夏」といったらやはりかき氷なので、Unityの物理演算を使ってかき氷マシーンを再現してみました。(実際には勉強会に間に合わなかったので調整してあります)
画面をクリックするとインスタンスとして生成されたCubeが器に入って・・・いかない、散らばりまくるアプリです。削られる氷の大きさや散りばり方、スクリプトはかなり力技です。ブラウザでも思ったよりはスピードが出てる印象ですが、低スペックのマシンだと厳しいと思います。
簡単なアプリですが、これが簡単にAndroidアプリに移植できるんですからスバラシー。

→かき氷マシーン

またUnityに関しても色々と発表させていただきました。どんなソフトか〜からunity Remote、アニメーションのやり方などなど。
今まで散々Unityいいよ〜って言いふらしてきたのに全く作品を作っていなかったので、やっとまともな発表ができて一安心です。

9月あたりにUnityの初心者向けワークショップとかやりたいな〜と思っていますが、名古屋で需要あるのかな・・・。Unityの場合3Dソフトの知識も必要なので、全てにおいて初心者の人はついていけないような・・・。

Unityでアニメーションのやり方

Unityで人間とかの有機的な3Dデータのアニメーションのやり方。
3DデータはBlenderでボーンを入れてモーションをつけ、FBX形式で書き出しています。Blenderからはモデル、ポーズ、ボーン(Armature)のデータを選択してから書き出しする必要があります。

FBX形式のデータが正常に書き出せたら、FBXのビューワー等で確認してみます。
Autodeskから「FBX Converter」というソフトが出ていますので(なんとWin・OSX対応)、このソフトのモデルビューワータブからモデルを読込んで確認してみます。
このソフト、ライセンスに関してどこにも明示されていないので使ってますが、もしフリーソフトでなかったらすいません。

FBX Converter

モデルをUnityにドラッグで読込んで、「Project」の方でモデルを選択して「FBXImporter」のアニメーションの項目を設定します。すると「Project」のモデルの階層にもアニメーションの名前が追加されます。

Unityでアニメーションの追加

後はScriptを設定してやればアニメーションされます。

[javascript]
//モデルにscriptを追加する場合
animation.Play(“アニメーションの名前”);

//外部スクリプトから動かす場合
モデル.animation.Play(“アニメーションの名前”);
[/javascript]

サンプル

オプション的な

アニメーションのスピードをscript側から変えることができます。
[javascript]
animation[“アニメーションの名前”].speed =2.0;
[/javascript]

アニメーションをブレンドして、アニメーションごとのつなぎを滑らかにします。
[javascript]
animation.CrossFade(“アニメーションの名前”);
[/javascript]

アニメーションをブレンドして、アニメーションごとのつなぎを滑らかにします。
アニメーションをループさせます。(2011.12.12修正)
[javascript]
animation[“アニメーションの名前”]. wrapMode = WrapMode.Loop;
[/javascript]

このサイトが非常に参考になったというか、後半はままだったりしますが。

UnityでAndroid向けにビルドしてもアプリアイコンが変わらない件

UnityでAndroid用にBuildする際に「player Setting」の項目でオリジナルアイコンを設定したのに端末にアプリを送るとデフォルトのUnityアイコンになっていてナゼに?って件についての対処方法。(そもそもアイコンが正常に設定されないのはバグ)
対処方法といってもこれがまかり通ってしまうとUnityのライセンス的にどうなのっていう部分もあります。起動時のスプラッシュスクリーンも変更できそうな感じですし。でもそもそもバグのせいでやらざるをえないワケで、まぁいいんじゃないでしょうか。

環境:osx 10.5、Unity 3.3、Android 2.2(Galaxy Tab)

対処方法その1:デフォルトの画像データを変えてしまう

理屈は簡単。Androidアプリのアイコン用にデフォルトで設定されている画像ファイルを見つけ出して上書きしてやります。ということはもちろんアプリを変えてビルドしたい場合はその都度変えるという・・・。

アプリケーションフォルダのUnity.appを右クリックで「パッケージの内容を表示」して、後は以下のフォルダに画像データがあります。
アイコンの場所

この画像を変えて、念のためUnityを再起動してビルドしてやります。もちろんデフォルトの画像のバックアップは忘れずに。

対処方法その2:apkファイルをいじる

→No Custom Launch Icon in Unity Android?

上記の内容を超翻訳してみました。

1.Buildして生成したapkファイルの拡張子を.zipにする。
2.zipファイルを解凍する。
3.解凍したフォルダ内のres/drawable/フォルダ内の「app_icon.png」を見つける。
4.格納されているpng画像の大きさは64×64ピクセルなので、それと同じ画像サイズのpng画像を作る。
5.ファイル名をapp_icon.pngにして元の場所に上書き。
6.zip圧縮して拡張子を.apkにしてAndroidにインストール。

しかしこのapkファイルをいじるやり方は残念ながら私の環境ではできませんでした・・・。Android側でapkファイルを認識してくれません。ていうか上記の英語サイトで解決した!って言ってるかどうかも超翻訳なため確かではないです。

このバグはUnity側も認識しているようで、3.4で修正するから待っててね!ってことみたいです(自分の超翻訳では)。

Unityでマウスドラッグしてオブジェクトを回転させるの改良版

以前のエントリーで「Unityでマウスドラッグしてオブジェクトを回転させる」を公開していたんですけど、マウスをドラッグしている時に常に動いてしまっていたし動きもなんかおかしかったので改良版を作りました。

前のscriptはRotateだったのをeulerAnglesに変更して、マウスのボタンを離した時(GetMouseButtonUp)にオブジェクトのeulerAnglesを変数に代入しています。(これだけでも自分には大変)

[javascript]
var rotatetarget:Transform;
var xspeed:float = 1;
var yspeed:float = 1;

private var sx:float;
private var sy:float;
private var dx:float;
private var dy:float;
private var tx:float;
private var ty:float;

private var RotateVectorX:float;
private var RotateVectorY:float;
private var CashRotateVectorX:float;
private var CashRotateVectorY:float;

function Update() {

//Start
if(Input.GetMouseButtonDown(0)) {
//Input Mouse position
sx = Input.mousePosition.x;
sy = Input.mousePosition.y;

}

//Drag
if(Input.GetMouseButton(0)) {
dx = Input.mousePosition.x;
dy = Input.mousePosition.y;

tx = sx – dx;
ty = sy – dy;

//Rotate!
RotateVectorX = tx / xspeed;
RotateVectorY = ty / yspeed;
rotatetarget.eulerAngles = Vector3( CashRotateVectorY + RotateVectorY , CashRotateVectorX + RotateVectorX , 0);

}

//End
if(Input.GetMouseButtonUp(0)) {
//Input Object position
CashRotateVectorY = rotatetarget.eulerAngles.x;
CashRotateVectorX = rotatetarget.eulerAngles.y;

}
}
[/javascript]

それでもObjectが後ろ向いている時のドラッグの挙動がおかしかったりしますが、まぁ・・・ね。

unityでマテリアルの設定と切り替え

unityでマテリアルを扱う場合は、外部の3Dソフトでモデリングし設定されたマテリアルをunityに読込む(インポート)のが普通かと思いますが、それとは別にunity上でマテリアルを作ることができます。

新規のマテリアルを作る

「Creat」から「Material」を選び、できたマテリアルのshaderの種類を決めて、あとは色を設定します。写真の例では単純なDiffuseマテリアルです。
新規マテリアルmaterialを作る

透明なマテリアルを作る

半透明なマテリアルを作りたい場合はshaderを「Transparent」などにして、カラーをRGBつまみの下のアルファを設定することで半透明なマテリアルができます。
半透明なマテリアルの作り方

他にもshaderの項目でスペキュラーやテクスチャを設定できます。最初からいろんなマテリアルが付いているので、大抵は大丈夫な感じです。それでも足りないという時にはasset storeのマテリアルを購入ですね。細部の内容は本家のリファレンスをどうぞ。
またスクリプトでマテリアルを作ることもできますが、個人的にはカラーなどはその場で見ながらの方がいいし、スクリプトを覚えなくて済むのでので使わないかなと。

マテリアルの切り替え

マテリアルの切り替えは単純にrenderer.materialに代入するだけ。
以下のスクリプトはボタンをクリックすることでマテリアルを切り替えています。「NewCube!」をクリックすることでCubeを生成できます。
(動作させるにはプリミティブのCubeと空のオブジェクトと最低2つのマテリアルがいります)
[javascript]
var prefabcube:GameObject;
var M_ice:Material;
var M_diff:Material;
var MS_cube:Material;

function Start () {

//Ground
var groundcube = gameObject.CreatePrimitive(PrimitiveType.Cube);
groundcube.transform.position = Vector3(0,0,0);
groundcube.transform.localScale.x = 1000;
groundcube.transform.localScale.z = 1000;

//default Material
MS_cube = M_ice;
}

function OnGUI () {

//Button
var BT_newcube = GUI.Button(Rect(10,10,120,30),”newCube!”);
var BT_changeM1 = GUI.Button(Rect(140,10,120,30),”Change Material1″);
var BT_changeM2 = GUI.Button(Rect(270,10,120,30),”Change Material2″);

if(BT_newcube){
cuberain();
}
if(BT_changeM1){
MS_cube = M_diff;
}
if(BT_changeM2){
MS_cube = M_ice;
}
}

function cuberain() {
var incube : GameObject = Instantiate(prefabcube, transform.position, transform.rotation);
incube.AddComponent(Rigidbody);
incube.renderer.material = MS_cube;
}
[/javascript]

unityをサイトに埋め込んだらかなり重くなってしまったので、これからは別ページに表示させることにしました。

【マテリアル切り替えサンプル】

物理演算は楽しいなぁ。

unityでプリミティブprimitive形状を生成する

unityでプリミティブprimitive形状を生成するやり方。
単純に生成するだけなら以下のjavascriptでよし。
[javascript]
var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
[/javascript]
これでできたcubeに対してRigidbodyやらpositionやらを設定していきます。

プリミティブ形状を生成して色々設定してみる

[javascript]
var cubenum:float = 5;
var cubeposition:float = 0;

function Start () {

for (var i= 0; i < cubenum; i++){

var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
cube.AddComponent(Rigidbody);

cube.transform.position = Vector3(cubeposition,10,0);
cube.transform.eulerAngles = Vector3(cubeposition,cubeposition*3,cubeposition*10);
cubeposition += 5;

}

//Ground
var groundcube = gameObject.CreatePrimitive(PrimitiveType.Cube);
groundcube.transform.position = Vector3(0,0,0);
groundcube.transform.localScale.x = 1000;
groundcube.transform.localScale.z = 1000;

}[/javascript]

上記ではfor文でプリミティブ形状を生成し、Rigidbodyと(物理演算ができるようになる)、positionとeulerAngles(角度?)を付けています。

もう一つは地面の形状として、cubeを生成して、大きさを1000倍にしています。Rigidbodyはつけていないけど、プリミティブの時点でcolliderはついているのでcubeが着地できます。

Random関数がよく分からなかった・・・。

unityをhtmlに埋め込むやり方

flashと同じく、unityをhtml(サイト)に埋め込むにはjavascriptを使う必要があります。もしかしたらhtmlのembedタグでできるかもしれませんが、枠ができたり一旦クリックしなくてはいけなかったりする可能性がありますし、結局たいしてコードが短いわけでもないのでjavascriptがよいかと思います。

javascriptをhead内に埋め込む

共通で使う以下のタグをjavascriptをheadタグ内に埋め込みます。
[javascript]

[/javascript]

単独の記事向けにjavascriptを埋め込む

サイト内にunityのオブジェクトが1つしかない場合はheadタグ内にもう一つjavascriptを埋め込むのですが、ブログなどの場合は記事内にjavascriptを埋め込みます。
[javascript]

[/javascript]

上記のスクリプトの各項目です。
[javascript]

[/javascript]

htmlの記述例

javascriptに続けて、htmlも埋め込みます。これはブラウザにunityのプラグインがインストールされていない場合には「インストールしてね」って表示される内容も含まれています。
[javascript]

[/javascript]

上記の例のidが「unityPlayer」となっていますが、ここは任意で決めます。javascriptの「ページでユニークなid要素名」と同じ名前にします。

上のアレは画面にプリミティブオブジェクトを生成してRigidbodyを付けて〜な感じですが、次の記事にて。

« Older posts Newer posts »

© 2017 UXIC.net

Theme by Anders NorenUp ↑