2015年11月6日金曜日

当たり判定を実装したい時にレイヤーチェックが役立つかも?

昼頃になにかメモ程度に書こうと思っていたのにネタが頭から飛んでしまいました。

今回は大雑把に当たり判定の実装の話を。
当たり判定を作るときにOnCollisionEnterメソッドでオブジェクト名を指定してもいいけれど、
これだとInstantiateした場合、オブジェクト名に(clone)が付いてしまう。
こうなると名前が変更されて機能しなくなってしまう。

しかし、OnTriggerEnterメソッドを用いると上記で発生する問題は解決できる。
更には少し手を加えるだけで物体に当たった時の物理挙動も無くすことができる。
(マリオがコインを取った時を想像してもらえると。)

睡魔に抗えないので今回はここまで(意志が弱い
次回は実際に簡単なコードでも書けたらなと。

2015年11月1日日曜日

MonoBehaviourを継承している場合はAddComponentで

寒くなって参りました。風邪などには注意して毎日を過ごしていきましょう。

というわけで本題に。シーンを実行するとこの警告文が毎回出てきて鬱陶しいと感じていた。
以下がそのエラー文。

「You are trying to create a MonoBehaviour using the 'new' keyword.  This is not allowed.  MonoBehaviours can only be added using AddComponent().  Alternatively, your script can inherit from ScriptableObject or no base class at all
UnityEngine.MonoBehaviour:.ctor()
LevelControl:.ctor()
MapCreator:Start() (at Assets/Scripts/Game/MapCreator.cs:40)」

何を言われているかと言うと、
MonoBehaviourを継承しているところではnewではなくAddComponentしてねということでした。

private MapCreator MC = null;

MC = new MapCreator(); ← これはダメ
MC = gameObject.AddComponent<MapCreator>(); ← こっちが正解