q1jUnity

anchan828:

http://unity3d.com/unity/whats-new/unity-3.5

目玉機能

  • Shuriken Particle System
  • Built-in Pathfinding
  • Upgraded Occlusion Culling & new LOD
  • Google Chrome Native Client deployment
  • Linear Space Lighting and HDR

主な新機能

  • Flashが書き出せるようになった(SWF形式)
  • 新しいパーティクルシステム「シュリケン」
  • 経路探索や回避サブシステム
  • LOD管理
MeshColliderをメモ。

scene上に配置したGameObjectに合った当たり判定が欲しくて調べていたら、MeshColliderを使えば簡単に出来ると、iPhoneアプリをつくりんぐ さんで知りました。

[Unity]外部オブジェクトに形状に添ったコライダーを付ける方法~Mesh Collider~

MeshColliderを使えば、指定したMeshの形状に沿ったコライダーを作成してくれるので、複雑な形状のオブジェクトの形に沿ったコライダーも簡単に作る事ができます。
MeshColliderの仕様で、MeshColliderは他のMeshColliderオブジェクトと衝突することができないのです!!

非常に簡単に出来ました。
でもなんか、オブジェクトの形に当たり判定作るとか重くなりそうなので適当に省略してくれないかなと思ったら、そういう属性がありました。

Octagonal Roomさんで紹介されていました。

衝突判定処理(Collider)の種類

Mesh Colliderの設定にあるConvexをチェックすると、3Dオブジェクトの凸部分だけをつなげるようにColliderの形状が設定されるので、比較的処理が軽めのMesh Colliderを設定することはできる。

もちろんあまり使いすぎない方がいいのでしょうが、ここ!ってとこでは絶対使うのでメモメモ。

ぴたっと止める。

Rigidbody(剛体)に係った力をリセットする法を探したら、HAPPY*TRAPさんの記事でそのままの記事が有ったのでメモ。

[Unity] 物理演算で動いているオブジェクトを停止させる

rigidbody.velocity (速度)とrigidbody.angularVelocity(回転速度)の2つに、Vector3で「0」をセットすることで、ぴたっと止まりました。

【関連リファレンス】

高橋 啓治郎さんの本『Unity入門 ~高機能ゲームエンジンによるマルチプラットフォーム開発~』の追加記事で、フレームの概念と、UpdateやFixedUpdateの役割について丁寧に説明してあります。

Unityにおいて「フレームの進行」と「物理シミュレーターの進行」が独立している点と、FixedUpdateが物理シミュレーター用のUpdate関数だという話で成る程と納得。参考となりました。

『Unityでシーン遷移を作る。ついでにGUIも』をメモ。

tuedaさんの日記にて、シーン遷移の方法を拝見したのでメモ。

Unityでシーン遷移を作る。ついでにGUIも

ProjectビューでSceneディレクトリを掘ってから「File」-「New Scene」で新規のシーンを追加。

この時付けたフィル名(“TitleScene”)が、後でこのシーンを参照するときの名前になる。

さらに作ったシーンを「File」-「Build Settings」でビルドに追加する。これをやらないとシーンをApplication.LoadLevel()でロードできない。

これ、ステージクリア型のゲームで大活躍の予感。

ちなみにLoadLevel()でロードすると古い方のシーンは破壊される。

とのことなので、ザッピング・システム(懐かしい)のように行き来するためには、状態を保存しておく仕組みを別途用意する必要があるのかな。

Unity には 3 つの Update 系関数がある。
Update
LateUpdate
FixedUpdate

Unityでの最適化の話。最適化の話は読んでおくと方針付けが出来て、コーディングが楽しくなります。

『UnityのJavaScriptで継承を表現するには?』をメモ。

tuedaさんの日記にて、Unityのjavascriptでクラス継承する方法を拝見したのでメモ。

UnityのJavaScriptで継承を表現するには?

class MyCoolObject extends MonoBehaviour {
    var myCoolInt : int;
    var myCoolFloat : float
}
どうように派生クラスは基底クラスを継承すればいい。
class MyCoolerObject extends MyCoolObject {
    var myCoolerInt : int;
    var myCoolerFloat : float;
}

見慣れた書き方。

あれ、そもそもJavaScriptにclassキワードはなかったような。
確かプロトタイプベースのクラスだったはず。
Unity拡張か。

なるほど。

勉強になりました。

『うにばな(講座みたいなもの 第一回)』をメモ。

akinowさんのブログで、Unity講座を拝見したのでメモ。

うにばな (講座みたいなもの 第一回)

スクリプトを使う際の細かな説明が色々と参考になります。 この後、何度も見直しながら覚えていきたいと思います。

Unityエンジン内ではparentで一つ上の階層のオブジェクトを指定することになっているようです。(階層の一番上に移動したい場合はrootを指定します)
transform.root  =ツリーのトップ
transform.parent =一つ上のオブジェクト

parent、便利ですよね。読めないコードにならない様に気をつけないとダメだけど。parent.patent.parent・・・とか。
rootも使えるのか。

手続きを経ずにファンクションコールをする方法として(略)SendMessageという関数が用意されています。SendMessageの欠点として引数をひとつしか取れない点が上げられます。
似た関数に BroadcastMessage() がありますそちらはゲーム中に存在する(子のオブジェクトを含む)全てのスクリプト中にあるファンクションに対してメッセージを送信します。
var player = GameObject.FindWithTag(“Player”);
OnTriggerStay()はコリジョン内に存在するゲームオブジェクトの判定をします
FindObjectOfType()を使用して as HingeJoint(=HingeJoint型にキャスト(変換))

後で全部使うと思うものばかり。 あと、キャストは「as」。

Debug.DrawLineメソッドを使えば、2点間を結ぶラインを簡単に表示することができます。
HAPPY*TRAP様