ブルーノのC#プログラミング & unity勉強日記

プログラミング素人、ブルーノの自主勉強ノートです。他のプログラミングを勉強したい方の助けになれば幸いです。その他趣味の雑記もしていきたいです

Unity / ゲームオブジェクトとは?

f:id:covory10101101276:20180213162113j:plain

サリナス・グランデス

 

みなさんこんにちは🌚

春休みで生活のリズムがあまりよろしくないブルーノです。テニスとゲームは全ての予定を狂わせる...

さて今回は、前回やったことのおさらいとともに、実質何が起こっていたのか、その仕組みを簡単ながら勉強していきます。

 

ゲームオブジェクト

前回使ったオブジェクトは、元からあった光、カメラの他には大地や植物を内包するTerrain、湖のデータのWaterProDaytime、そして自身の代わりを務めるFPSControllerがありました。これらは全て別々の情報をもともと持ったGameObjectですが、このGameObjectというのは様々な情報(コンポーネント)を入れた入れ物のような存在だそうです。コンポーネント(Component)は英語で「成分」とか「部品」とかですね。つまり部品を備えた箱がその機能を様々に発揮している....なんかC#の時のクラスやオブジェクトの時と似てますね。

UnityではこのGameObjectを生成する方法として主に、Assetメニューから自作したりインポートしたアセットを呼び出す方法と、Unityに元々備わっている基本的な情報を持ったGameObjectメニューからクリエイト(Create)するという2通りがあるようです。

 

では、また新しいプロジェクトを作成して、詳しく調べていきます。

f:id:covory10101101276:20180213231434p:plain

また帰ってきましたね。最初に、前回Terrainを作った要領で今度はCubeを生成してみます。

f:id:covory10101101276:20180213231611p:plain

現れました。インスペクターがどうなっているのか見てみましょう。

f:id:covory10101101276:20180213231722p:plain

初期からUnityにあるこのCubeには5つのコンポーネントが備わっていました。

Transformは前回やりました。位置、向き、大きさをもつコンポーネントで、これを無くすことはできません。

Mesh Filterは、このオブジェクトのメッシュの形状を表します。メッシュというのは形状のことで、Cubeのメッシュが適応されているため、このオブジェクトはキューブの形に見えます。

Box Colliderは、コライダーと言われるゲームには欠かせない要素を持っており、これは衝突の判定をします。判定だけなのでこのコンポーネントにはそれ以外に機能はありません。デフォルトではこのオブジェクトと同じ大きさのBox状のColliderを持ちます。コライダーは各ゲームオブジェクトに一つずつ持つことができます。

Mesh Rendererは先ほどのメッシュの見た目や質感の情報を編集することができます。デフォルトではUnityにあるDefault-Materialが適応されているため真っ白なのです。このMesh Rendererに適応させるマテリアルの情報が次のMaterialの部分なのです。

 

さて、このまま再生してもこのCubeは落ちたり動いたりしません。なぜ落ちないのか、それはこのデフォルトのゲームオブジェクトには物体としての性質が備わっていないからです。当たり判定はありますがこれ自身が全く動かず、他に物体もなければ何の意味もありませんね。そこで、実はUnityにはこの物体としての性質を持たせるコンポーネントも存在するのです。それが、RigidBodyになります!!

 

RigidBody

RigidBodyはComponentメニューのPhysicsにあります(Physicsは「物理」という意味ですね。先ほど触れたコライダーもこのPhysicsにあります)。

追加したいオブジェクトの「Add Component」か、オブジェクトを選択した上で画面上のComponentからRigidBodyを追加することができます。

f:id:covory10101101276:20180213235255p:plain

こんなのが追加されました。これにもまた色々な値があります。

Mass:重さです

Drag:移動への抵抗のことで、空気抵抗のようなものです

Angular Drag:回転への抵抗になります。

Use Gravity:これこそが重力であり、適応するとY軸をマイナスに重力が発生します。つまり下に落ちていく

Is Kinematic:ここにチェックを入れると落っこちません。それがなんだと思いますが、私にもわかりません....どうやら固定したい物等に適応するそうです。また、これを適応していてもスクリプトから操作はできるみたいです。

Interpolate:その前後のフレームを考慮して動きを制御するもので、動きを滑らかにしたいときなどに使用します

Collision Detection:直訳すると「衝突検出」。とても速く移動する物体の場合、衝突判定が間に合わない場合があります。そこの機能を強化して、正常に判定を機能させます。しかしそれは同時に処理を少し重くすることにもなるので、別の方法で解決した方が良い場合もあるようです。

Constraints:英語で「制約」。移動や回転に制限をかけられます。

 

では、このCubeの下にPlaneを敷いてどんな感じになるのか見てみましょう。

f:id:covory10101101276:20180214002014p:plain

いい感じですね。しかしこのCube、一体材料は何なんでしょうか。跳ね方からするとスポンジみたいな感じですが、鉄の箱っぽく実装したかったり、ゴムっぽく実装したかったりする場合はどうしましょう。先ほどの重さや空気抵抗をいじるのでしょうか。みんながみんな物理学者ではありません。少なくとも私にそのような知識はないので、そこでもう一つ便利なコンポーネントがあります。それが物理マテリアル(Physic Material)です

 

物理マテリアル

なんかFF7にありそうですね。これを設定するにはProjectメニューのAssets以下を右クリックしてCreateから選択します。

f:id:covory10101101276:20180214002957p:plain

New Physic Materialができました。名前は編集できるんですが今回はそのままで。

Friction(摩擦係数)やBounciness(反発係数)などを設定することができます。このままではこれはAssetsの中にあるだけなのでゲームオブジェクトに適用しなければなりません。先ほどのBox ColliderのMaterialに適用しましょう

f:id:covory10101101276:20180214003922p:plain

Bouncinessを1にして再生すると...

f:id:covory10101101276:20180214004213p:plain

ちょっと跳ねるようになりました!

 

物理的な要素についてもあらかじめこんなに用意されているんですね。これなら物理演算ゲームなどはとても作りやすそうです!!今回はここまでにしておきます。

 

バイトの予定を把握してなくてサボってしまいました...場所が場所なので忘れると到着が一時間遅れるめんどくさい人材なのにこれはやってしまいました....この程度もこなせないで万人に受けるゲームなんて作れるわけない!店長には今日怒られてきましたがまた次回取り返す!!!😡😡😡😡