Unity5.5 勉強中、ジャンル:車、Car、矢印キーで動く2017年2月
探したプロジェクトや勉強した内容をメモしておく。
また、参考にしたユーチューブを貼っておく。
Unityでゲームを作りたいが遅々として進まない。
理由は何から手を付けてよいのかわからないのと、C#がよくわからないし、UnityのAPIがよくわからないということだらけ。
ということは、まずはサンプル版をいろいろといじって使えるところを探してみるしかない。
続きを読む
ブレンダーBlenderにLightwave9のLWOオブジェクトを読み込むインポート、やってみた
Unityの学習中で、ボーンが設定されたオブジェクトを読み込み、アニメーションの設定を学習中です。
用意された素材を使用したので、どのようにして3Dモデルにボーンを設定するのか、ボーンの名称やボンの数、親子関係はどうなのかを知りたくなりました。
そこで、
ブレンダーでUnity用のモデルデータの作成はどうするのかと思って、ユーチューブを閲覧中です。
そこで、かつてLightwaveで作成した人体モデルをブレンダーにインポートすれば良いと思いつきました。
ブレンダーには、各3Dソフトで作成したモデルデータをインポートする機能が付いています。
LWの場合は、設定でチェックを入れる必要があります。
早速、昔使っていた東芝のノートPCを引っ張り出しました。結構でかいです。ノートの利点は、いつでもどこでもすぐに使えることです。マウスがないとちょっと不便ですが、このノートは小さなタッチパッドがついているので、なんとかマウスがなくても操作できます。
LWファイルの日付をみると2005年に作成したモデルデータです。サブパッチありの人体モデルです。
とりあえず、なにもせずにそのままブレンダーに読み込んでみました。ブレンダーはMacOSのバージョン2.66です。起動はほぼ瞬間です。3秒くらいで立ち上がります。
LWモデラーでみるのと、たぶん同じ構成で表示されました。すごいとびっくり感心。LW画面との比較を載せたいところですが、LWはドングルが必要で、このドングルを探さなければならないので、LWは起動してません。
(画像)
ポリゴンの破綻もありません。しかもサーフェースの色、スカートの青、クツの赤、シャツのピンクがそのまま残っています。すごいよブレンダー!!
フリーの3Dソフトでありながら、ここまでできるなんて。
たいてい、他の3Dソフトのファイルを読み込むとエラーが頻発して、つかえないことがほとんどなんですが。
実際に使用したモデルデータの容量は、小さいものは、200kB、大きいものは約2,4MBになります。
特に問題なく読み込めました。
LWモデラーのレイヤーも読み込めました。
おそらく、パスとかベジェラインとかは読み込めていないかもしれません。
ブレンダーは高機能ですが、操作がけっこう難しいというか、Lightwaveでのキー操作に慣れているので、すぐに思い出せません。
しかも、操作パネルやメニュー、プルダウンメニューがあっちこっちに配置されているので、どこをどう使えば良いのかさっぱりです。
そこで、数ヶ月後にまた、使うときのためにメモを残しておきます。
右クリックで選択し、マウスを移動すれば、オブジェクト等が移動します。
右クリックで選択というのを覚えましょう。右で選んで左で解除です。設定でキーは変えられるようですが、マニュアル本やユーチューブとかのチュートリアルをみてわからなくなるので、設定は変えずに、右クリックと覚えます。
左クリックで解除
aで全選択、選択状態で再度 a で解除
bで領域選択、投げ縄ではありません。
投げ縄選択Ctrlキー+左ドラッグ
ビューは数字キー1とかを押します
r 回転
s 拡大縮小
e 押し出し、頻繁に使います。
f 面張り、エッジ張りできます
ctr+r 分割、スクロールで分割数を設定
ctr+j 一つのオブジェクトにします。ポイントの結合ではありません。
ctr+z ,y やり直し
Shit+Alt を押しながら、エッジを選択すると、これで、輪郭、周囲を選択してくれます。とれもべんりです。
ポリゴンを分離したいときに、使うコマンドキーY
例えば、ポリゴンを選択して、Yを押すと、選択したポリゴンが元のオブジェクトから分離します。
IF I select a polygon, push key Y, separate that polygon from original object, its position.
This command key is comfortable. I think.
便利なコマンドです。
厚みをつける
Ctr+F でプルダウンメニューが表示、そこから厚み?を選択
//追記 ブレンダー2.72bでの機能が含まれています
Shift+A でメニューをプルダウン表示(メニューを選択しなくても良いので時間の節約)
Shift+C 3Dカーソルを原点
ctrl+FでFaceメニューを表示し、 EditModeのとき、Intersect(交差)が使えます。ブーリアンみたいなものです。面が重なっているところをいわゆる分割です。
ctrl+Uでレイアウトを保存
ctrl+Lで連続したポリゴン全体を選択します。
Alt+Cでカーブをメッシュに、メッシュをカーブにします。パスやベジェを使ってポリゴンにするときに使います。
・離れたポリゴンを接合
2つのポリゴンの接合した端の部分のエッジを選択して、WキーでBride Edge Loopsを選択
・2面を結合して1面にする
2面を選択してXキーでDessolbe Face
G 移動
W subdev ポリゴン数を増減
V ポイント、ラインの結合解除、面はエラーになる(顔の口を作ったり穴のようにしたいときに便利)
Y 分離(Vと似ているが、こちらは、切り離された状態になる)
//更に追記
ピリオド オブジェクトの中心点を3Dカーソルへ移動
カンマ オブジェクトの中心点を解除?(違ってるかも)
ミラーコピー移動(軸対称コピー) Sift+D(コピー複製)、X(X軸対称)、S(スケール)、−1(ハイフンと1で、逆向きに)
親子関係 Ctr+p(複数選択可)子、親の順で選択します。
親子関係解除 Alt+p(単独選択での作業が望ましい)、複数選択もありですが、解除した子供だけ選択することで解除できます。間違った使い方は子とその親まで選択してしまって、その親の更に上の親子関係まで解除してしまうことです。
Ctr+pが親と子を選択するので、解除についても親と子を選択しなくてはならないと先読みしてしまって、つい選択してしまいます。
ポーズモード
Shift+Ctr+c、IK設定、IK設定するボーンを選択
<ブレンダープラグイン>
木のモデリングはUser Preferenceでsapで検索するとAdd Curveが表示されます。これが、ツリー木のプラグインです。名称にTreeが含まれていませんので探しにくいです。
F2 ポイント、ラインから面を手間が少なくてはることができます。標準でも搭載されていますが、Userpreferenceで追加する必要があります。
使い方は、通常面は4点を選択する必要がありますが、このF2をONにすると3点で面になり、使い方は最後の4点目の対角線のポイントの1点を選択してFキーで面になります。
また、例えば、格子状になったポリゴンにおいて、格子に囲まれた内部の面に、穴が開いた状態であり、複数の面を貼りたいときに、1ラインを選択してFキーですぐに面が生成できます。(通常は2ラインを選択する必要があるので、1ライン手間が減ります。)
Align selection to Gpencile stroke(フリーの外部プラグイン)
Grease Pencilで描いたラインに沿ってポイントが整列します。使い方はGrease Pencilで描いて、ポイントを選択して、シフトキーと左ダブルクリックです。
グチャグチャになったポイントを一括して綺麗にしたいときに便利です。
紹介ページ
http://www.blenderartists.org/forum/showthread.php?332160-Addon-Align-Selection-to-Grease-Pencil
ShiftーCでカーソルを原点に、ピリオド・るのキー
Shift-d、S、X、−1
で鏡面コピーです。
文章だけでは意味不明ですが、オブジェクトを作っていると中心点が離れてしまうことがあります。そのときに、中心点をポリゴン側の方に移動させたいときに使います。
Objectメニュー(下の方の)、Transform,origin to Geometry
浮き輪みたいなアイコン名がわかりません。この浮き輪の方にオブジェクトを移動させたいときに使います。
ポリゴン側を選択して、Shift+Sでプルダウンメニューが表示されて,select to cu,,,
説明画面では、Shift+a と間違って表示されているかもしれません。
Shit+ s が正しいです。あとで、差し替えます。差し替えました。
Lightwaveでも同様の機能がありますが、ブレンダーの方がちょっとだけ使いやすいかも。
Alt+c
ctr + r 分割 スクロール
shift + a amatur
オブジェクト、ボーンの順で
選択して
ctr + p IK設定
エッジを選択
左側UV Mapping
Mark Seam
u Unwrap
下側Export unwrap
テクスチャを描く
テクスチャの読み込み
(注意点、レンダリングルまで、UVにテクスチャが設定されているか画面上ではわからないときがあります。描画モードによって、テクスチャが表示されていない設定になっている場合があります。そのときは、レンダリングを実行しましょう。描画モードを変更することによって、レンダリングしなくとも画面上で確認できる場合があります。)
LW9では、中心軸のポイントはマージされていないので、結合が必要でしたが、ブレンダーは設定すれば、マージされています。
オブジェクトモディファイアーツールを選択
原点からオブジェクトが離れても、鏡面できます。
・エッジの複数選択、便利な選択方法
とりあえず、これだけわかれば、モデリングはできそうです。
3DCG Blenderブレンダー2.7.2、平面ライトの作り方
—
ショルダーバッグ・ウエストバッグ・セカンドバッグ 3wayミニショルダーバッグ アメリカ製|吉田カバン ビジネスバッグ ポーター ラゲッジレーベル ニューライナー|Otias オティアス
【ハローキティ】×ワンピースのチョッパー ダイカットリール付きパスケース|くまのがっこう のびのびパスケース ジャッキー |【ニックナック】POPPINSカードケース
G&P AEG039C TROY M7A1(C) 完成品電動ガン エアガン|リボルバー COLT PYTHON コルトパイソン.357マグナム 4インチ|マルゼン M870 ショット
IODATA LEDバックライト フルHD 21.5型ワイド|アイ・オー・データ機器 LEDバックライト採用 超解像技術搭載 23型ワイド液晶ディスプレイ|水平多関節液晶モニターアーム
Unityピンポンゲーム学習中 6Aから6C 動画テクスチャ、マテリアル、パーティクル
ポンゲームたんに、ボールが跳ね返るだけで、ブロック崩しゲームではありません。でも、サーバにアップすると動かせるようになりますので、簡単です。
Webで作成しながら、アイフォン向けにもできそうです。Unity
Unity tutorial – Pong Game – How To Make Mobile Games – part 6A
テクスチャ、マテリアル,Photoshotp elementsで作成したPSDファイルをそのまま保存してもUnityは読み込んでくれる。
Editメニュー−>Rendering Optionを選択して、AmbientLightでWhiteにする
materialを追加します。
そして、textureフォルダを作成して、そこに画像を保存します。ファインダーからファイルをUnityアプリ側へドラッグしてもOKです。
すると、いままでボールが黒かったのが、白くなります。
画面は、設定後です。
ーー
Unity tutorial (beginner) – Pong Game – How To Make Mobile Games (iphone and android) – part 6B
MainCameraオブジェクトを選択して、Backgroundの色を黒に変えます。
パーティクルを追加
パーティクルを使わなければ、必要は無いようです。
次は、MainCamerのバックグラウンドの色です。
すると、バックが青色から黒に変わりました。
次は、ParticleSystemです。
パーティクルシステムを追加すると、画面で確認できます。
ここらへんは、つかうときにいろいろとためすしかなさそうです。
—
パーティクルの続き
Unity tutorial (beginner) – Pong Game – How To Make Mobile Games (iphone and android) – part 6C
>ちょっと説明が長くて、眠くなります。特に必要ないかもね。
スパークするようなパーティクルの設定
ここで、ボールがバーに当たったタイミングで、パーティクルが表示されません。プレーするとずっとパーティクルが表示されたままです。
どうやら、設定がなにか足らないようですね。
次は、ボールが壁に当たったときに、パーティクルが動作するスクリプトです。
パーティクルはプレハブを使用します。そうしないと、画面中に無関係のパーティクルが表示されてしまいます。
ball.js
var mainGameScript:MainGame; //add var particle_splash:GameObject; function Awake(){ rigidbody.AddForce(4,4,0,ForceMode.Impulse); //4c InvokeRepeating("IncreaseBallVelocity",2,2);//2sec,2sec= start time, repeat time } function Update(){ if(transform.position.y<-5){ //Application.LoadLevel("menu"); mainGameScript.GameOver(); } } //4c function IncreaseBallVelocity(){ rigidbody.velocity*=1.05; Debug.Log("velocity:"+rigidbody.velocity); } //add function OnCollisionEnter(collision:Collision){ Instantiate(particle_splash,transform.position,transform.rotation); }
前回の学習は5Aから5C
Unityピンポンゲーム学習中 5Aから5C 動画
今回は、シーン間の変数を保持するPlayerPrefsとスコアです。
Unity tutorial – Pong Game – How To Make Mobile Games – part 5A
—
Unity tutorial – Pong Game – How To Make Mobile Games – part 5B
scoreの表示、PlayerPrefs 変数保持プロパティ
MainGame.js
CreateEmptyで作ったオブジェクトに設定します。
Scoreの点数を増加させます。
var score3DText:TextMesh; private var score:int=0; function Awake(){ InvokeRepeating("UpdateScore",0.05,0.05); } function Start () { } function UpdateScore () { score+=1; score3DText.text="Score:"+score.ToString(); } function GameOver(){ //ball.jsで、使用する関数になります。 if(score>PlayerPrefs.GetInt("highScore")){ PlayerPrefs.SetInt("highScore",score); } Application.LoadLevel("menu"); }
—
Unity tutorial – Pong Game – How To Make Mobile Games – part 5C
ゲーム画面でハイスコアになったときに、最初の画面にハイスコアを表示させる。
つまり異なるシーン間で変数をやりとりする。
ballオブジェクトにGeneralScriptをかぶせる
ball.jsとMainGame.jsは相互関係になります。
ここがみそです。
menuシーンに、highScore3DTextを作成します。
ball.js var mainGameScript:MainGame; function Awake(){ rigidbody.AddForce(4,4,0,ForceMode.Impulse); //4c InvokeRepeating("IncreaseBallVelocity",2,2);//2sec,2sec= start time, repeat time } function Update(){ if(transform.position.y<-5){ //Application.LoadLevel("menu"); mainGameScript.GameOver(); } } //4c function IncreaseBallVelocity(){ rigidbody.velocity*=1.05; Debug.Log("velocity:"+rigidbody.velocity); }
MenuScene.jsも書き換えます。そして、MenuシーンのGeneralScriptのhigh Scrore 3DTextに3DTextであるhighScore3DTextを選択します。
ここがみそです。
private var ray:Ray; private var rayCastHit:RaycastHit; var highScore3DText:TextMesh; function Awake(){ highScore3DText.text="High Score: "+ PlayerPrefs.GetInt("highScore").ToString(); } function Start () { } function Update () { if(Input.GetMouseButtonDown(0)){ ray=Camera.main.ScreenPointToRay(Input.mousePosition); if(Physics.Raycast(ray,rayCastHit)){ if(rayCastHit.transform.name=="playButton"){ Application.LoadLevel("pon2"); } } } }
ポンゲームたんに、ボールが跳ね返るだけで、ブロック崩しゲームではありません。でも、サーバにアップすると動かせるようになりますので、簡単です。
Webで作成しながら、アイフォン向けにもできそうです。Unity
とりあえず、2A、2Bまで学習しました。
ここまでのpaddle.jsスクリプトです。
RaycastHitの必要性が始めはわかりませんでした。
private var ray:Ray; private var rayCastHit:RaycastHit;//Ray,cast,Hit :"c" of cast is small c // function Update () { if(Input.GetMouseButton(0)){ ray=Camera.main.ScreenPointToRay(Input.mousePosition); if(Physics.Raycast(ray,rayCastHit)){ transform.position.x=rayCastHit.point.x; }//if }//if }
CubeオブジェクトTabDetectionBoxを見えないように、マウスのイベント座標の取得用に配置するというのはテクニックだなと思いました。
まさに、3Dならでは手法でしょう
—
Unity tutorial – Pong Game – How To Make Mobile Games – part 3A
Sphere球にrigidbodyを追加します。
重力gravityは解除。
ball.jsを作成します。
function Awake{ rigidbody.AddForce(4,4,0,ForceMode.Impulse); } //4C メニューシーンを作成したときに必要です。メニューシーンを作成していないときはまだ必要ではありません。 function Update(){ if(transform.position.y<-5){ Application.LoadLevel("menu"); } }
4cでの変更点です。
#pragma strict function Awake(){ rigidbody.AddForce(4,4,0,ForceMode.Impulse); //4c InvokeRepeating("IncreaseBallVelocity",2,2); } function Update(){ if(transform.position.y<-5){ Application.LoadLevel("menu"); } } //4c function IncreaseBallVelocity(){ rigidbody.velocity*=1.05; Debug.Log("velocity:"+rigidbody.velocity); }
ただし、今のままでは、壁がないので、ボールが動いて画面(カメラ)から消えます。次の3Bで壁を作ることが必要です。
--
Unity tutorial - Pong Game - How To Make Mobile Games - part 3B
sphereにPhysicsのBouncyをMaterialにドラッグします。
次に、壁をコピペして囲い壁を作ります。
ボールのスピードが遅いので、Edit,project setting,physicsから2を0.1にします。
また、4cでせつめいしますが、ここで壁にもBouncyを与えておきます。Paddole(バー)にも与えます。
設定についてもBouncyは、DynamicFriction、StaticFrictionとも0です。
--
Unity tutorial - Pong Game - How To Make Mobile Games - part 4A
現在のシーンをmenuシーンとして別名保存します。別名保存の前に、現在作業中のシーンは保存しておきます。
3D textを追加します。
そしてBOX Colliderを設定します。これが、ボタンのようになります。
次で、メニューのスクリプトを入力します。
ーー
Unity tutorial - Pong Game - How To Make Mobile Games - part 4B
menuScene.js
private var ray:Ray; private var rayCastHit:RaycastHit; function Start () { } function Update () { if(Input.GetMouseButtonDown(0)){ ray=Camera.main.ScreenPointToRay(Input.mousePosition); if(Physics.Raycast(ray,rayCastHit)){ if(rayCastHit.transform.name=="playButton"){//3Dtext name Application.LoadLevel("pon2");//scene name } } } }
Create Emptyを追加、「GeneralScript」にします
menuScript.jsをこの「GeneralScript」にドラッグします。
つまり、3Dtextにはドラッグしません。
実行したときに、BuildSettingに追加するのを忘れないようにしてください。そうしないと警告になります。
--
Unity tutorial - Pong Game - How To Make Mobile Games - part 4C
ball.jsに追加します。すでに、Update()を記載している場合は、不要です。
--
前回の学習状況
unityのお勉強をユーチューブで、学習part 1A -2Byoutube動画 HowtoMakeMobileGamesさんの動画です。
とりあえず、動画の5か6までの部分を作成し、Webでビルドしました。
ポンゲームたんに、ボールが跳ね返るだけで、ブロック崩しゲームではありません。でも、サーバにアップすると動かせるようになりますので、簡単です。
Webで作成しながら、アイフォン向けにもできそうです。Unity
ブロック崩しのようなゲームをUnityで作る。といってもブロックは作らずに、ボールをどれくらい長く打てるかというゲームになります。
イギリス人でしょうか、非常に丁寧に解説しながら、ピンポンゲームの作り方を説明してくれています。
1本あたり、約10分程度です。
1Aから9Cまで 全部で約20本です。単純に200分で、3時間半くらいでしょうか。
5Cまで見ればだいたいのピンポンゲームができるようです。
Unityの制作手順をみると、オブジェクトに対して、スクリプトコードを記述してアプリを実行するタイプです。
さすがに、3Dオブジェクトを扱い、ゲームを作るためにオーサリングソフトです。
しかも、直感的に設定をすることもできれば、JavaScript、C#を使ってもできるようです。
言語を覚えることも必要だし、Unityの操作を覚えることも必要です。
全体の構成です。すべての設定は含まれていませんけど。
Unity tutorial – Pong Game – How To Make Mobile Games – part 1A
Unity tutorial – Pong Game – How To Make Mobile Games – part 1B
—
2A
//paddle.js #pragma strict private var ray:Ray; private var rayCastHit:RaycastHit; function Start () { } function Update () { if(Input.GetMouseButton(0)){ ray=Camera.main.ScreenPointToRay(Input.mousePosition); if(Physics.Raycast(ray,rayCastHit)){ transform.position.x=rayCastHit.point.x; } } }
—
2B
—
次の動画へ
—
—