忍者ブログ

ゲーム制作日誌

ゲーム制作日誌です。 最終的にはスーパーマリオ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

今後の夢について

基本的に開発用のサーバをひとつ立てて、そのサーバに対してリモート接続を行い、その中で開発を行おうかなと思っています。また、Dockerか仮想化かユーザーとかで、TV録画用のサーバと、ゲーム開発用のサーバと分けようと思います。どれが一番いいのかはまだまだ検証の余地がありますね。特に、Dockerに関しての知識は皆無なので、どんなものかやってみたい気はします!!今後記事を書くかもしれませんね

その時のサーバの構成について下記に示します。

OSCentOS7
日本ではシェアが1位だから?日本語のwikiがありそう!ただ、世界で見たらUbuntuなんですよね・・・悩みどころではある!!でもやっぱり日本語でOKになりそうなのでCentOSでw

 

仮想化

→仮想化ソフト:VirtualBox

 

              Dockerよりはこっちの方がよさそう?録画にパフォーマンス取られそうだから。

              っつっても変わらんか

 

              OS1:録画用

              OS2:開発用

 

共通開発環境:Mercurial Git Eclipse etc...(悩み中)

 


個別管理できるほうがいいのでSVNのような集中型よりは分散型のほうが良いかなと思い、Gitよりは差分管理ができて評価も高いMercurialが妥当かと。

→ただし、Visual Studio Codeを使用してC#開発を行うならGitは必須になってきますね・・・前述の記事で書いていますが、この開発環境をどうするかが悩みどころです。本当に・・・C#かjavaかで悩んでいるくらいだからねww


今度また、開発環境に関する記事も書きます!!


Visual Studio Code 続

Visual Studio CodeはGitとの相性抜群!?



Unix系での共同開発環境として人気のあるGitですが、Visual Studio Codeでは、そのGitを標準でサポートしているようです。と、いうか、Gitを使用することが前提となっているのではないかという印象を受けました。と、いうのも、それ専用のメニューが固定で左ペインに出ずっぱりだからです。
コミット、マージなど、リポジトリの操作がGUIベースで簡単にできる模様・・・

ここまで紹介しておいてなんですが、私はSVNは使用したことがあるのですが、Gitは使用したことがありません。急いで紡いだ知識でなんとな~くな理解で書いていますw
初めてコミットなどが簡単にできると聞いた時には誤操作など、取り返しがつかないことになるのでは?という疑問が出たのですが、そもそもSVNとGitでは同じコミットという言葉でも指している意味合いが違うということがわかりました。

SVN:集合型共有開発環境
ソースをすべて一括で管理。編集する場合は、共有しているファイルに他のユーザーが使用できないようにロックをかけてから、作業を行い、改修を行ったソースをコミット(サーバへUP)する。
その作業を行うことで、全員が最新のコードを常に共有することができる。(誰かがコミットしたらその内容を取得、更新する必要がありますが)


Git:分散型共有開発環境
SVNとは違い、一元管理ではなく、まずは開発者のローカルで独立した構成でファイルを管理、修正することができる。ここでいうコミットは、開発者のローカル端末のファイルに対してのコミットであり、プロジェクト全体への適応ではないようだ。SVNのような、プロジェクト全体への適応のことは、コミットではなく、プッシュと言うらしい・・・。


Visual Studio Codeでは、Gitのステージリンク機能が簡単に操作できるらしい・・・ステージという概念がよくわかっていないので、ステージリンクの良さがわからないw

といったように、Visual Studio Codeに関しては、Gitを使用することで活用する意義が出てくるようです!


Gitについてももっともっと勉強しなければなと思いました!!

参考:元ネタ

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

        
  • 1
  • 2