今までのように、毎回ググっているようですと、バージョンの違いや、説明不足だなと感じるサイトもあり、なかなか進むことができないと思ったので、結局本を買いましたw
本の紹介はまた今度させていただければと思います(まだ読み終わってないので・・・)
そして、今日の放送でやっとまともに弾丸が打てるようになりました!
そこで勘違いしていた部分があったのでここにメモします。
transformコンポーネントについて
- このコンポーネントは自身(オブジェクト)の位置と大きさを表す
- 位置を取得するためには下記のように取得する
transform.position.x // x座標
transform.position.y // y座標
transform.position.z // z座標
単純に「ふぅん。当たり前じゃん。」って思っていたのですが、MonoDevelopToolのデフォルトプロポーザルに騙されました。(よく見ていれば気付けたのに、デフォルトプロポーザルなら間違ってないだろうという先入観に騙されました。。。先入観って怖いですねw)
自分は位置を取得していると思っていたのですが、記述していたコードは
transform.localScale.x // x座標
transform.localScale.y // y座標
....
となっていたのです・・・いやはや、気づきませんでした。
ちなみに、positionとlocalScaleの違いは読んで字のごとくです。
- position:位置。座標
- localScale:大きさ。サイズ
こんなことに気付かなかった自分が恥ずかしいです。
これで弾がプレイヤーと同じ座標から打ち出せるようになったのですが、またひとつよくわからない現象が発生しました。
機体から発射される弾が、何故か少し右寄りに発射される・・・
なぜなのか、考えた結果、コライダー(当たり判定領域)が関係していることに気づきました。
どういう事が起きていたかというと
- 弾丸オブジェクトがプレイヤーオブジェクトと同じ座標に作成される
- (当たり前だが)それぞれの当たり判定領域に接触してしまう
- 重なりを回避するため(接触判定されてしまったため)に弾丸オブジェクトの座標がズレる
という状況でした。これは正直盲点でした。
それぞれのコライダーは下の画像の緑の領域です。
この状況を回避するためには、プレイヤーオブジェクトのコライダー領域に接触しない部分に弾丸オブジェクトをインスタンス化する必要があります。
Instantiate(gameObject
, new Vector3(transform.position.x, transform.position.y + 0.1f)
, lotation);
といったようにY座標に+0.1した場所へ出現させるようにしました。その結果が下の画像です。
いろいろハマりましたが、どれもこれも簡単なことですねww
こんなところでつまずいているわけには行かないので、これからもっと勉強して行きたいと思います!!!