Tag: script

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

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

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

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

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

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

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が後ろ向いている時のドラッグの挙動がおかしかったりしますが、まぁ・・・ね。

Gameobject名とボタンイベントの取得

ボタンのイベントを取得して、それをGameObjectに適応させるようにします。

ボタンを押したときのイベントの取得

[javascript]
var bt1width = 120;
var bt1height = 40;

var bt1x = 10;
var bt1y = 10;

//GUIの設定
function OnGUI () {

var bt1 = GUI.Button(Rect(bt1x,bt1y,bt1width,bt1height),”bt1″);

//Click Button Event
if(bt1) {
Debug.Log(“クリックされた”);
}
}[/javascript]

上記のサンプルではOnGUI()の関数内でしかオブジェクト名が指定できないので、変数を関数の外に出してやることで解決できます。でもbt1は初期化していないけどいいのかな?

[javascript]
var bt1width = 120;
var bt1height = 40;

var bt1x = 10;
var bt1y = 10;

var bt1;

//GUIの設定
function OnGUI () {
bt1 = GUI.Button(Rect(bt1x,bt1y,bt1width,bt1height),”bt1″);
}
function Update () {

//Click Button Event
if(bt1) {
Debug.Log(“クリックされた”);
}
}[/javascript]

さて私はUnityをosx環境のjavascriptでテストしているわけですが、これだとscriptの記述が「Unitron」という最初から付いているアプリケーションを使うことになります。
しかしこれがコード補完はしないし特別な機能がついているわけでもないので辛い。WindowsならUnityDevelopがありますが、Macにはありません。MonoDevelopがあるじゃないかと思いきやC#とBoo(?)にしか使えません。結局「Coda」というウェブ制作、html制作者達のアプリケーションを使っています。
そして「Coda」でUnity用のコード補完してくれるプラグインがありました。

Unity Community

やったー!と思いきや大文字と小文字を微妙に間違えてくれる厄介使用。クワー。

unityでスクリプトによるボタンの配置

unityでもGUI操作だけでゲームができるわけではなく、やはり3Dをやっている人にとっては鬼門?のscriptを記述してやる必要があります。
言語はjavascriptとC#が使えますが、手軽に使えるjavascriptは中級者まで、ちょっと記述する内容がめんどくさいけど本格的にやるならC#というイメージです。私はもちろん手軽なjavascriptで。
unityでscriptを使う時はGameObjectに追加してやらないと動きません。それがオブジェクトではなく画面に配置するボタンなどのGUIの場合でも同様です。

scriptが使えるようにする

まずはscriptを入れるために、空のオブジェクトを作成し、javascriptを追加します。

次にjavascriptを先ほど追加した空のオブジェクトにドラッグします。これで準備完了。
(画像では名前をそれぞれ変えてあります)

テクスチャをGUI用に設定する

画像はpngやjpg形式のデータを「project」エリアにドラッグすることで使えるようになりますが、そのままだと「Texture」扱いになっている筈です。
この状態だと画像が本来の縦と横の比率を無視して広がってしまって面倒くさいしそもそも使い方が違うので、instectorタブで「GUI」に変更します。項目を変えたら「Apply」を押します。

次にjavascriptを選択してinspectorタブから「Edit」を押していよいよscriptを記述していきます。

javascriptの記述

「Edit」ボタンを押して出てきたテキストエディタに以下のように記述して再生させると単純なボタンが作られます。
[javascript]
function OnGUI () {
var bt1 = GUI.Button(Rect(10,10,160,40),”bt1″);
}[/javascript]

簡単な説明としては、GUI.Buttonでボタンを生成し、Rectでボタンの種類を四角形に、その引数は(X座標 , Y座標 , ボタンの横幅 , ボタンの縦幅)、GUI.Buttonの第2引数でボタンのテキストを記述します。
画像をボタンに入れる場合は、まず以下scriptを記述します。
[javascript]
var btB1 : Texture2D;
function OnGUI () {
var bt1 = GUI.Button(Rect(10,10,160,40),”bt1″);
GUI.Button (Rect(10,120,202,42), btB1);
}[/javascript]
これだけだとボタンには何も表示されません。javascriptを入れ込んだGameObjectを選択すると、inspectorタブにTextureを選べる項目がでるので、そこでTextureを選択して初めて表示されます(これがわからなくてハマった)。
正常にjavascriptが記述できていたらこんな感じになります。

クリックすると反応してくれます。いい感じですね。

scriptについては本家のサイトのマニュアル、リファレンスが充実していますし、他サイトもありますので参考にしてください。というか参考にさせて頂いております。

unity(スクリプトオーバービュー)
Unityドキュメント
Unity Games

© 2017 UXIC.net

Theme by Anders NorenUp ↑