忍者ブログ

ゲーム制作日誌

ゲーム制作日誌です。 最終的にはスーパーマリオRPGのようなクォータービューのゲームを作成できればいいと思います。

[PR]

×

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


Unity 5 2D 5日目

今までのように、毎回ググっているようですと、バージョンの違いや、説明不足だなと感じるサイトもあり、なかなか進むことができないと思ったので、結局本を買いましたw
本の紹介はまた今度させていただければと思います(まだ読み終わってないので・・・)

そして、今日の放送でやっとまともに弾丸が打てるようになりました!

そこで勘違いしていた部分があったのでここにメモします。

transformコンポーネントについて
  • このコンポーネントは自身(オブジェクト)の位置と大きさを表す
  • 位置を取得するためには下記のように取得する

    transform.position.x // x座標
    transform.position.y // y座標
    transform.position.z // z座標

単純に「ふぅん。当たり前じゃん。」って思っていたのですが、MonoDevelopToolのデフォルトプロポーザル騙されました(よく見ていれば気付けたのに、デフォルトプロポーザルなら間違ってないだろうという先入観に騙されました。。。先入観って怖いですねw)
自分は位置を取得していると思っていたのですが、記述していたコードは

    transform.localScale.x // x座標
    transform.localScale.y // y座標
    ....

となっていたのです・・・いやはや、気づきませんでした。
ちなみに、positionlocalScaleの違いは読んで字のごとくです。
  • position:位置。座標
  • localScale:大きさ。サイズ
こんなことに気付かなかった自分が恥ずかしいです。

これで弾がプレイヤーと同じ座標から打ち出せるようになったのですが、またひとつよくわからない現象が発生しました。

機体から発射される弾が、何故か少し右寄りに発射される・・・


なぜなのか、考えた結果、コライダー(当たり判定領域)が関係していることに気づきました。
どういう事が起きていたかというと
  1. 弾丸オブジェクトがプレイヤーオブジェクトと同じ座標に作成される
  2. (当たり前だが)それぞれの当たり判定領域に接触してしまう
  3. 重なりを回避するため(接触判定されてしまったため)に弾丸オブジェクトの座標がズレる
という状況でした。これは正直盲点でした。

それぞれのコライダーは下の画像の緑の領域です。


この状況を回避するためには、プレイヤーオブジェクトのコライダー領域に接触しない部分に弾丸オブジェクトをインスタンス化する必要があります。

    Instantiate(gameObject
                , new Vector3(transform.position.x, transform.position.y + 0.1f)
                , lotation);

といったようにY座標に+0.1した場所へ出現させるようにしました。その結果が下の画像です。


いろいろハマりましたが、どれもこれも簡単なことですねww
こんなところでつまずいているわけには行かないので、これからもっと勉強して行きたいと思います!!!
PR

Unity 5 2D 4日目

完全なる勉強不足準備不足でかなりgdgdな放送になってしまいました・・・大変申し訳有りません。
ぶっちゃけ何も進んでいませんw

まぁ言うなれば、タグを作成し、そのタグに紐付いたプレハブをGameObjectとして利用する~と言った方法が分かった程度ですかね?

(1)Add Tag...からタグ追加
 

(2)タグ追加ウィンドウ


(3)チェックが入るとそのプレハブとタグが関連付いていることになるようです。


(4)タグ名でプレハブを指定して、GameObjectをインスタンス化(未検証な上に、ここで記載しているコードでは動きませんでしたwwwそのうち修正します。)
    
        // スペース押した時の挙動
        If(Input.GetKeyDown("Space")){
            // タグが"tama"のプレハブをインスタンス化(?)(要検証)
            Instantiate(tama, 
                new Vector3(transform.localScale.x,transform.localScale.y,transform.localScale.z), 
                transform.rotation);
        }
    


 

以上!!まぁゆーてその程度なので、他に書くことがありませんww


と、言う事で、これだけだとしょうもないので、もう2つほど記事を書きます。

ひとつは長期スパンで見た夢です。もう一つは、最初の方に取り上げたVisual Studio Codeについてです。お暇でしたらそちらも目を通していただけると嬉しいです。


来週の水曜日までにはある程度進めて行ければと思います。



Unity 5 2D 3日目

放送後にすぐ寝てしまい、その後体調を崩し気味で更新が遅れてしまいました!

今日書くのは16日の放送分の内容です!

リスナーさんから補助をいただき、動作するのに必要なコードを頂きました!

また、自分なりにコードを読み解いていき得た知識ですが、オブジェクトに対して物理挙動を与えるためには、Rigidbody2Dクラスが必要なようです。

ですが、このRigidbody2Dクラス・・・・Unity4まではtransformのように、デフォルトで対象のオブジェクトのインスタンスを持っていたようなのですが、5からはデフォルトでインスタンスを持たないようなのです!!!なぜかは・・・分かりません。。。本当に物理挙動を与える対象にしかインスタンスを持たせないことでメモリの節約とかが目的なんですかね??かじった程度の知識でJava屋なので全く的はずれな知識な気がしますが。

上記の理由でRigidbody2Dを取得するためには、GetComponentメソッドでエイリアスにRigidbody2Dを指定することで取得することができます。


Rigidbody2D rigidbody2D = GetComponent<Rigidbody2D>();

なので、Rigidbody2Dを使用する場合は、一旦クラスの最上位でオブジェクトを宣言してスコープを広く取り、その後、StartメソッドなどでGetComponentメソッドでインスタンス化するのがいいかと思われます。
そして、取得したRigidbody2Dオブジェクトのvelocityフィールド・・・変数?(C#での言い方がわからん!!)に対応したキーの値を足してあげれば速度が付与されるので、スピードがどんどん上がっていきます。ただ、velocityに値を足しているので、初速度はかなり低く、慣性を強烈に感じます。慣性に関しては好みですが、感じさせたくない場合は、Vector2型に対応する座標を入れてあげて、それをRigidbody2Dオブジェクトのpositionに代入すれば大丈夫かと思います・・・・(未検証)

3日間かかってやっと動きましたね!!それでは、次回は弾を打てるようにできればいいかなと思います。(もしくは、移動中の画像を旋回している奴に変更できればしたいですね!)

Unity 5 2D 2日目

先ほどの放送で、かなりのグダグダを見せてしまいました。。。

と、いうのも自分の勉強不足が原因です!探り探りやろうとするとどうしても効率が悪く、簡単な事に時間を費やしてしまうなぁと・・・・

実際に放送するときには3分クッキングみたいに作るものだけでなく、その過程までもしっかりと考えてからやらなければなと思いました!

今日の実績としては入力されたキーを判別し、座標をいじる事ができるといったものです。



加速度や慣性がなく、また、グラフィックも変化しないため単調な物となってしまいました。一歩・・・と言うか半歩程度は前進したと思いますが、まだまだです。


次回までの目標として
  1. 移動時のちラつきを抑える。
  2. 移動モーション時には画像を変更する。(傾ける的な)
  3. レーザーを打てるようにする。(オブジェクトを作成する)
を掲げます。

次回はこれを実装できるほどの実力をつけていきたいと思います!!
また、引き続きAliceのシナリオも作成してまいります。

Unity 5 2D 1日目

「Unity5 2d 入門」でググった時に一番上に出てきたサイト様のサンプルを元にUnity5 2Dを使用してみました。
【Unity2D】Unityで2Dミニゲームを作るチュートリアル

さすがですね。めちゃくちゃわかりやすかったです!
こんな自分でもそれっぽいのが30分~1時間程度で作れました。
ただ、自分のPCのCライブ容量がなんかおかしいことになっていたためにVisual Studioでのコーディングはできませんでした。
サイトの著者様の2damage_jp様が作成し配布してくれているTokenというMonovihaivourのラッパークラスがとても役に立ちます!まだ自分はUnityのMonovihaivourと言うものがどういったものなのか、UnityEngineとはどのようなものなのかが理解できていないので、追々この部分に関しては理解を深めていこうと思います。

下の画像が作成したゲームで赤い機体が左右に動くだけですw
また、ほとんど上記のサイト様のチュートリアル通りに作成したので、攻撃はせず、マウスでクリックすると破壊できるといったものです。明日の放送でココらへんを改良できればいいなと思っています。


自分のゲームのグラフィックを担当してくれているtonkotsuさんが昔々作成してくれた画像を使用しています。このまま作成していければと思います!

敵機を増やすのも簡単でした!


Unity2Dの凄さを実感したとともに、これがあればクォータビューのゲーム作成もそんなに難しくはないのではないか?と思えてきました!