透明なミックステープ

ゲーム創り。

「Unityではじめる2Dゲーム作り」1通り終わらした10日目まで

 前回のブログ更新からもちょくちょく進めておりました。おおよそ10日目。

 

Chapter6からChapter14までを読み進めました。

 

流れに沿って読むことで、考え方や応用方法は「なるほど!」と思いながら進められました。ただスクリプトや各設定項目を、自分ひとりで何も見ずにやれるかと言われるとだいぶ怪しい(ほぼ無理)。 

 

何か気になった時、わからなくなった時にどの項目を読めばいいかわかるようになっただけでも大きな収穫だったと思う。あとは、ヒエラルキーやプロジェクトで多数の素材が作られた場合でも混乱しないようなフォルダ分けなどの知識は、自分ひとりでやっていても中々きづけない部分だったかと思う。

 

スクリプトの一連の考え方については、ゴールデンウィーク中にもう一度初めから通して読むことでおさらいしたいと思う。そうすれば今よりも理解が深まるだろう。

 

これで一旦この教本は卒業して、何か作成もしてみたいと考えている。

 

「Unityではじめる2Dゲーム作り」を再開した5日目

毎日が本当に眠いと感じる5日目。

 

Chapter5.2を読む。

プレイヤーキャラクターを動かすためのスクリプトについて説明された項だ。

 

スクリプトを黙々と写経。書かれていることを流れに沿って読むと、理解が出来るというレベル。 ただこれを自分で1から書けるかというと全く自信がないので、繰り返し今日学んだ事を意識しながら、スクリプトを記述していく必要があるのだろう。

 

今日の学び

 

■「コントローラーの入力を取得し、プレイヤーキャラを動かす」という場合、1つのクラスで完結するのではなく。下記例のように分けると変更があった際の対応・管理がしやすい。

 

  • 基本クラス:プレイヤーだけではなく動く敵を含めたキャラ全体で、共通の「パラメータ」「動作」などをまとめたクラス。
  • プレイヤークラス:プレイヤーキャラに特化したパラメーターや動作などのクラス。「基本クラス」を継承する。
  • 入力管理クラス:パッドやキーボードの入力を取得するクラス。プレイヤークラスの関数を呼び出して、プレイヤーキャラを操作する。

「Unityではじめる2Dゲーム作り」がペースにのってきた4日目

4日目(プライベートで、唐突に聞いてない情報を前提に文句言われると本当にダルイなと感じた4日目)。

 

chapter4~5.1の項目を読む。

ここから、実際にゲームを作りつつ、様々なテクニックが説明されるようだ。

 

明日は用事があるためあまり時間を作る事ができないので、新しい項目には進まずここまでの復習にあてる予定。

 

今日の学び

 

■キャラクターなどのゲームオブジェクトを階層化する。物理エンジンとアニメーションでの移動を両方とも反映させるための方法。(これは本を読まなければ、なかなかきづけなかったのではないかと思っている。他の教本でもこのようなやり方をまだ見たことがなかった)。空のゲームオブジェクトに「スプライト(キャラ画像やアニメーションを設定)」「コライダーを設定したゲームオブジェクト」を子要素として持たせて、1つのキャラクターのセットを作る。

 

■接地判定は、1つよりも3点でとったほうが判定ミスが起きにくい。点で取らない場合は線や矩形で設定する方法もある。

 

■移動の足元当たり判定は、四角だけではなく、丸を複数設定して、ゲーム的な見え方での不自然さを無くすことと、摩擦や不自然な動きを対応することを両方解決することができる。

 

■アニメーションに使うスプライトサイズがバラバラな場合、サイズの違いを吸収するために、pivotプロパティを適時変更する。例えば下辺で足元がそろっているなら、pivotプロパティをbottomで設定することで高さのずれは吸収することができる。※横方向は手動で設定する必要があり。

「Unityではじめる2Dゲーム作り」を進めた3日目

3日目(春なのに雪が降った地域もあったし、昼間は昼間で、ずっと居眠りしそうだった。久しぶりに寝落ちをした。なので翌朝に書く3日目)

 

Chapter3.4~.5の項目を読む。

物理エンジンを使った移動、アニメーションについて学ぶ。

 

以前のゲーム制作の経験から、概要については特に詰まることなく理解できた。

(自分のことながら成長を感じる・・)。

各設定項目の内容と、物理エンジンと単位の問題(理解)は都度都度見直す必要がある。

 

概要は理解できたが、スクリプトの書き方で苦戦している箇所がある。


//地面チェックのスクリプトです

Transform groundcheck = transform.Find("groundcheck");   【①】

grounded = (Physics2D.OverlapPoint(grounded.position) != null) ? true :false; 【➁】 


 

【①】は、次のような理解

「groundcheck」のtransform を取得して、 transform型の変数 groundcheck に代入 

参考:Transform-Find - Unity スクリプトリファレンス

 

【➁】が・・次のような理解。

grounded.positionの座標に、コライダーがある場合(nullじゃなければ)。

それがtrueであれば、falseになる。

grounded(これは別の場所で、bool型で宣言済みの変数)に、 代入。

 

参考:その場所にコライダーがあるか確認する - ぱふの自由帳

Unity - スクリプティング API: Physics2D.OverlapPoint

 

と思っているのだが、

特に【➁】の後半部分「 != null) ? true :false;」こういう書き方をあまり今まで学んだ事がなかったので、だいぶ苦戦した。

 

11日は少しこの記述について、調べようかと思っている(bool型の記述方法をしらべればいいだろうか?「?と:でつなぐ書き方」を知りたい)。

 

追記:教えて頂きました

3項演算子という記述方法でした。

docs.microsoft.com

 

今日の学び

 

■updateで入力やプレイヤーキャラの表示切替を、FixedUpdateで物理エンジンをつかったキャラの移動計算を行う。時間を利用した計算を行う時は、それぞれ「Time.deltaTime」「Time.deltaFixedTime」と対応する。

(メモ:本には「Time.deltaFxiedTime」と書かれているが誤字だと推測。そもそも調べると Time.fixedDeltaTime なのではないか説がある)

https://docs.unity3d.com/ja/current/ScriptReference/Time-fixedDeltaTime.html

 

■【昨日の範囲だけど見直して】

public変数
インスペクターから初期値を変更できる。
→ただこれをするとスクリプトの値を変えても、インスペクターの初期値は変わらない。⇒はまる!!!

 

どうするか?
⇒右上設定ボタンからResetを押す。すべてのパブリック変数が初期化される。

⇒public 変数の前に
[System.NonSerialized]という属性を追加する。
この記述によって、直後のpublic変数はInspectorに表示されなくなる。 他のスクリプトから参照するだけならこの方法がいいかも。

 

「Unityではじめる2Dゲーム作り」を続けた2日目

2日目(今日は本当に何もしてねぇなと感じながら昼間をすごした2日目)

 

Chapter3.1~3の項目を読む。

3.3からスクリプトを入力し、自分で操作して動かせるゲーム画面を作り始める。

 

自動で横に移動し、障害物をジャンプでよけるサンプルゲームを作成して学ぶ。

練習用の素材も用意されていたが、楽しさを出したかったので

 イラスト屋さんの素材をつかって、まさに今がピークの花見感を出したステージに。

かわいいフリー素材集 いらすとや

 

↓ 作ったゲームの様子

f:id:Uwan:20190410002555p:plain

横にすばやく進む。多幸感に包まれる犬。

f:id:Uwan:20190410002647p:plain

飛ぶ時は真顔。

f:id:Uwan:20190410002712p:plain

はなさかじいさんのもとにたどり着いて満面の笑みでゴール。

ここまでの説明内容であれば、スクリプトを読みながら理解できた。

※古い方法で記述されていた箇所も対応できた。

明日は物理エンジンを使っての作成方法を進めていきたい。

 

今日の学び

■ゲームビューの「FreeAspect」は落とし穴あり。
自動的に現在のゲームビューのサイズに合わせて表示してくれる。が、ターゲットプラットフォームと画面サイズが違う。そのため見えちゃいけないものが見えたり、見えないといけないものが見えなかったりする。

一番最初にゲームを作った時、落とし穴にはまったわ・・原因もよくわからず困った思い出。

 

■ソーティングレイヤーで、整理する。
スプライトの表示を整理する!最初は設計のコツがつかみづらいかもだけど、やっておくと後半の作業が楽になる。これからも意識してやっていくようにする。

「Unityではじめる2Dゲーム作り」をはじめる1日目

 1日目(今度こそ最後までやり切るという決意の1日目)

Chapter2「Unity2D入門」の項目を読む。

何度目かの挑戦なので、覚えている部分が多かった。

本日はP57まで進みました。明日はChapter3.1~3のまで進みたい。

 

今日の学び 

オブジェクトをきれいに並べたいときの「Vキー」押し。

【GameAWeek】素人がUnityでビデオゲームを作る【12週目】

【12週目の目標】

 unityRomeの1週間ゲームジャム「あつい」に向けてゲームを制作する。

【完成したゲーム】

極あつ氷柱割 | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

※使用させて頂いた素材・ツール

【反省・感想など】

良かったこと
  • 期限内に完成させられた事。
  • 難しくはなったが、タイミングを赤・青の2種類にしたことで、少しゲーム性が増したこと。
ダメだったこと
  • アイディアのまとめ方が、スマートフォンのクリックゲームのような形になってしまったこと。マウス・キーボードが使えるPCでは、もっとアクションゲームのようにしても良かった。
学んだこと
  • 日本語を含まないフォントでは、webGLで書き出しネット上で公開したゲームでは日本語が表示されない。

 
ダメだった事の内容にも関わるが、学び始めた当初より本などを見ずに、自分でプログラムをうちゲームを完成出来るようになってきた。ただその成果物が、自分ができる事・理解できている事の大部分である「ボタンをクリックするタイミングゲーム」に収束しがちになってしまっている。 

知識を更に身につけていくという観点からも、できることだけを繰り返すのではなく、新しい事出来ない事に積極的に挑戦するようにしなければいけない。

そのためにこれからは、「学びたいこと」だけではなく、「アクション」「シューティング」といったように作るゲームのジャンルも様々なものに挑戦するような姿勢が必要な気がしている。

 

以上。