忍者ブログ

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

敵キャラクターの動作

昨日作ったやつにボーンとアニメーションを付けて、
Unityに入れてみた。

弾の発射地点もモデルの砲台にあわせて弾を出すようにした。
pic15

Blenderのマテリアルの設定は複雑なので、Unityの方がシンプルで
個人的には使いやすかったりする。
Blenderの方でマテリアルの割り振りを決めてやれば、
Unityの方でマテリアルを割り振りに合わせて変えることもできる
Unityの方で迷彩風にマテリアルを変えた↓
pic16

四体だしてある程度の密度の弾幕を張らせると、使ってる低スペックPCでは処理が重くなり、
30FPSぐらいまで落ちることが分かった。
弾を出させずに表示させてみたところ、
八体くらいまでは60フレームを維持できる感じだった。
pic17
無駄の多いスクリプトなので、スクリプトの処理を軽くしたり、
レンダーの設定を変えてやれば
ある程度改良することは可能だと思う。
まあ、5,6年前のPCなのでスペック的にいろいろときつい
最大の改善方法はPCを買い替えることだと思われる。
PR

モデリング

今気づいたんだが、ファイルパスがウインドウのところに表示されるんだった。
ひどいミスをした。
とりあえず、
3dmodelのファイルはCのすぐ下に置いて、
すぐ昨日のスクショを置き換えたお。・゚・(ノ∀`)・゚・。

Blenderのモデリングをやり始めて、
まず敵キャラクターその一として、4脚戦車的なものを作った。
pic14
PCのスペック的にもきついので、ローポリで適当に作った。
後は、ボーンを入れて、アニメーションを付けてやろうと思う。

Blenderからのインポート

BlenderのモデルをUnityに移す際の設定等のまとめ
Blenderのバージョンは2.49b

まずBlenderからのエクスポートは、
ファイル->エクスポート->Autodesk FBX でエクスポートする。

pic12

設定に関しては、
まずBlenderでは上方向をZ軸としているのでRotX90を押しておくことで
Y軸を上方向にすることができる。
カメラやライトはエクスポートする必要がないので、アーマーチュアとメッシュだけでいいはず。
アーマチュアの動作などでmodifierを使っている場合はmodifierも

後はアニメーションの設定なのだが、Unityの方が特殊な感じになっているので、
一つのアニメーションに複数のアニメーションをフレームごとに入れる必要があるようだ。
0~20フレームは歩きモーション、21~40は走りモーションなどのように。

pic13

次はUnityの方だが、インポートしたモデルのインスペクターを見ると、インポートの設定があるのだが、
GenerateColliderでMeshColliderで使われるColliderを作れる
Normal&Tangentsで自動スムース角の設定など
SplitAnimetionのところでアニメーションを分割して入れることができる

まともなモデルやアニメーションを作った時にちゃんと設定をしようと思ってたので、
アニメーションの細かい設定やUVとかはよく分からなかった。
今度書き直す




ゲーム内ポーズ等

昨日書き忘れたことなのだが、
ブログのテンプレートを変更してみた。
公式テンプレの中から気に入ったやつをもらってきた
コメントやトラックバックの表示はテンプレート側の設定だったようだ。

Unityのほうはゲーム内ポーズを作った。
スクリプトの処理を止めただけのものだが・・・
ただRigidbodyで速度の管理をしている場合は、
ポーズ前の速度を記録して
RigidBody.Sleepで処理を止めてやる必要があった。

それ以外に、STGにおけるオプション的なものを作った
pic10
敵弾だけでなく自弾にもライン表示をつけているのだが、
無いと弾が目立たなかったりするので、演出の一部的につけてある

画面の中心に黒い点をつくっておいた
ちゃんとしたクロスヘアーを作るまではこれを表示しておこうと思ってる。

そろそろスクリプトいじるのも飽きてきたのでBlenderの方をこれからはやろうと思ふ。

GameObjectまとめ

Free版、C#使用で、スクリプト+αをまとめてみる

エディターからは,
GameObject->CreateEmpty で空のオブジェクト、
GameObject->CreateOther で基本的なコーポネント付オブジェクトが作れる

pic11

GameObject共通のインスペクターの詳細だが、
オブジェクト名左のチェックボックスでアクティブ/非アクティブの変更
右のチェックボックスで静的かどうかの設定
静的クラスとかわからんが、基本はチェックを外しておけばいいと思う

その下はタグとレイヤーの変更ができる。
タグはスクリプトからオブジェクトを探すときなどに使い、
レイヤーはカメラやRaycastで使う。

さらにその下はTransformだが、位置や回転、スケールの情報が入っている。
関数とかもいろいろあるので次にでも詳しくやろうと思う。

スクリプトから参照するときは、空のGameObjectを宣言しておいて、
Find等のクラス関数で入れてやるというのが基本みたいなので↓のようにやるといいみたいだった。


public GameObject Test ;
void Awake () {
Test = GameObject.FindWithTag ("Player") ;
}



GameObjectのクラス関数

GameObject .CreatePrimitive (PrimitiveType)
・・・CreateOtherのCubeなどのような基本的なメッシュとコライダーをGameObjectに取り付ける

GameObject .FindWithTag(string)
・・・入れたタグ名をもつGameObjectを返す。ない場合はnullが返される。

GameObjectを 。FindGameObjectsWithTag (string)
・・・入れたタグ名を持つGameObjectをすべて返す。GameObjectの配列に

GameObject .Find (string)
・・・入れた名前のGameObjectを返す。

スクリプトでGameObjectを参照するときは、上で書いた方法以外に
インスペクターで設定することもできる。
スクリプトに
public GameObject GameObjectTest ;
などと宣言してやれば、エディター上から値を変えることができる。
pic18
シーンとアセットにあるGameObjectを入れることができる。
ただ、アセットのプレハブのスクリプトの場合、シーン上のGameObjectを設定することができないみたいだった。

後は変数と関数をまとめようと思う

GameObjectの変数

GameObject.isStatic
・・・静的かどうか
GameObject.layer
・・・設定されているレイヤー番号[0~32]
GameObject.active
・・・アクティブかどうか
GameObject.tag
・・・タグ名
以下の変数はGameObjectに接続されたコーポネントが入っている。
接続されてない場合はnullが返される。読み取りのみ
GameObject.transform
GameObject.rigidbody
GameObject.camera
GameObject.light
GameObject.animetion
GameObject.constantForce
GameObject.renderer
GameObject.audio
GameObject.guitext
GameObject.networkView
GameObject.guiTexture
GameObject.collider
GameObject.hingeJoint
GameObject.particleEmitter

GameObjectの関数

GameObject.GetComponent(Type)
・・・GameObjectに接続された入力したタイプのコーポネントが返される。
C#の場合、GameObject.GetComponent<transform>()みたいにする必要がある
また、接続されたスクリプトを得ることもできる
ScriptName other = GameObject.GetComponent<ScriptName>() ;
ほかのオブジェクトのスクリプトの変数とかを得ることができるので便利。

GameObject.GetComponentInChildren(Type)
・・・GameObjectの子オブジェクトを含めて入力したタイプのコーポネントを返す。
複数ある場合階層が浅いものが優先。

GameObject.GetComponents(Type)
GameObject.GetComponentsInChildren(Type)
・・・複数Ver、配列で返される

GameObject.SetActiveRecursively(bool)
・・・子オブジェクトを含めて一括でアクティブ/非アクティブの変更

GameObject.CompareTag(string)
・・・GameObjectのタグ名が入れた文字列と同じであるかどうか

GameObject.AddComponent(Type)
・・・GameObjectに入れたタイプのコーポネントを付け加える

カレンダー

10 2025/11 12
S M T W T F S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

 

プロフィール

HN:
Khellion
性別:
非公開

 

カウンター

 

最新記事

 

最新TB

 

最新CM

[05/17 backlink service]

 

ブログ内検索

 

フリーエリア