ゼロから始めるUnity
2017/10/06
Webデザイナーが #Unity 始めてみるllminatoll.icon イシュー:わかばちゃんのゲームを作るllminatoll.icon
---
Unityを始める前の湊川の心境
UnityってあのGUIでいじれるっぽいやつ?risacanが仕事してるのちょっと見せてもらったことある
コードも書く?よね? → 基本はC#、JavaScript
物理演算的なのもやるのかな?
勉強しながらだな
「UnityちゃんをUnityで踊らせてみた」みたいな動画見たことあるからMMDみたいな感じなのかなー
HTMLちゃんのMMDモデルは兄師匠が作ってくれたのがあるから、それをUnityにそのままよっこらしょと突っ込むことができるといいんだけど
とにかくわかばちゃんたちが出てくるゲームアプリを作りたい
絵は自分で描けるし
書籍版「わかばちゃんと学ぶ」シリーズと、ストーリーとか裏設定が絡んでたりすると面白そう
---
10/4 Unityをインストールして立方体を出す
https://gyazo.com/56f01643cd6a6837891b513d6fbd6c1c
https://gyazo.com/a7ecbe2149ccd558e04b83a117f0ab7e
https://gyazo.com/f6d9fcba2905496465e360b92a16aa0c
立方体を出してみた
操作感はMMDみたいな感じ!MMD触ったことがあるからとっつきやすいllminatoll.icon
Sceneタブが、いわゆる神の目。上から見たり下から見たり、ズームイン・ズームアウトできるllminatoll.icon
altを押しながらマウス操作すると、自分の目線を変えられるllminatoll.icon
Gameタブが、実際のゲームの画面llminatoll.icon
Gameタブで見ることができるのは、カメラのマークから撮影された世界llminatoll.icon
@ppworksさんにUnityの入りを教えてもらった
衝突判定はCollider
衝突した時にアイテムなのか敵なのか判断させられる
シューティングゲーム感ありますね。判定まで考えてゲームしてなかった(必死 hackapell_manda.icon
たし🦀 llminatoll.icon
@monryさんよりありがたいアドバイス
Unity はコンポーネント志向なわけで、スクリプトのレイヤも疎結合に書くことで、より変更に強くテストフレンドリーなプロジェクトを作れるワケだ。
学習コストはソコソコ高いと思うけど、それに見合う以上の価値がある。
この本がいいらしいので買ってみた
---
10/6 C#のキホン
作成したスクリプトをオブジェクトにアタッチする
(A)Projectウインドウ内で右クリック→CreateでC#を選択
(B)ヒエラルキーウインドウのCreateタブから、空のオブジェクトを作る(Create Empty)
(A)を(B)にドラッグ&ドロップして紐付ける、これをアタッチすると言う
なるほでぃんぐーllminatoll.icon
オブジェクトにそれぞれ対応するスクリプトを書いて紐づけてあげるってことかllminatoll.icon
スクリプトをダブルクリックで開こう
public class Test : MonoBehaviour { ・・・クラス名
スクリプト名だと思っとけばいい、と書いてある。わかりやすい解説llminatoll.icon
void Start () { }・・・Startメソッド
void Update () { }・・・Updateメソッド
スクリプトを実行すると、StartやUpdateのブロック内に書かれた処理が実行されるんだねllminatoll.icon
ゲームの画面は、パラパラ漫画方式で動いているように見せている
フレームの時間はTime.deltaTimeに代入されるんだっておllminatoll.icon
今の段階ではよくわからんがそういうものらしいllminatoll.icon
たとえばキャラクターを右へ歩かせるには
スクリプト起動
→Start(一度だけ実行 ex.キャラクターを表示する処理)
→Update (1フレームごとに繰り返し実行 ex.キャラクターを少し右に移動する処理)
なるほど〜llminatoll.icon
Startメソッドは最初の一回だけ、その後の繰り返し処理はUpdateメソッド内に書けばいいのねllminatoll.icon
激しく理解llminatoll.icon
Unity(というかC#)でHello World
スクリプトを書いたら
ゲームを実行(▶︎ボタン)して、下方にある「Console」タブを押す
https://gyazo.com/d4e62220a333e7c8edc54ace600207fe
ちっちゃいけどHelloWorld出てる!
型名と変数
float height1 = 160.5f;
このfってなんだ?
float型の変数に小数を代入する時は、数字の末尾に必ずfをつけること!llminatoll.icon
fをつけることで浮動小数点型になるらしい、へーllminatoll.icon
C#では、double型の値をfloat型に代入するのは禁止されている
なぜ?
double型をfloat型に代入できてしまうと、float型におさまらない範囲は切り捨てられてしまうから
便利な書き方
answer = answer + 5 ・・・ちょっと冗長だよね、そこで
answer += 5 ・・・楽に書いちゃう。上の書き方とまったく同じ結果が得られる
同じように -= *= /=
インクリメント演算子 変数名++
answer++; 変数の値を1だけ増やす
デクリメント演算子 変数名--
answer--; 変数の値を1だけ減らす
文字列でもできるよ〜(実際に本に載ってたサンプルコード)
https://gyazo.com/65535bd0e523c20999b180ba33eb34b6
https://gyazo.com/f57e8543d0bb79028062495e9c42985f
誕生日をコンソールに祝われる湊川🍰 ウケる・・ おめ🎉
おめでとうございました!hackapell_manda.icon
ありがとうございます!llminatoll.icon
https://gyazo.com/404f56fcc2a72ca003c3e93c4396f8dd
このScrapboxの存在をTwitterでつぶやいてみた
配列〜
たとえば5つの箱を用意したいときは
int[] points = new int[5];
先頭から3つ目の箱を使いたいときは
points[2]
なぜpoints[3]じゃないのか?
配列は0番から数える決まりだから
うんうん、他の言語でも一緒だねllminatoll.icon
配列型の変数名.Lengthで配列の持つ長さを取得できる
ex. points.Length
クラス
クラスはメソッドと変数をまとめたもの
ex. 変数(HP、MP) メソッド(攻撃、防御、魔法)
これらをひとまとめにして、ひとつのクラスとして扱うことで管理しやすくする
わかる〜llminatoll.icon
---
10/9 C#のキホン 続き
Unity的なクラスの理解
code:C#
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player {
private int hp = 100;
private int power = 50;
public void Attack() {
Debug.Log (this.power + "のダメージを与えた");
}
public void Damage(int damage) {
this.hp -= damage;
Debug.Log (damage + "のダメージを受けた");
}
}
public class Test : MonoBehaviour {
void Start () {
Player myPlayer = new Player ();
myPlayer.Attack ();
myPlayer.Damage (30);
}
}
出力結果:
50のダメージを与えた
30のダメージを受けた
アクセス修飾子
変数、メソッドに定義できる
public ・・・他のクラスからアクセスできる(ex. myPlayer.Attack)
private・・・他のクラスからアクセスできない
これにより「privateメソッドは使わないでね/private変数は書き換えないでね」という意思表示ができる
なるほどllminatoll.icon
Unityにおけるインスタンスの意味
よくわからんと思ってたら書籍にちゃんと説明書いてたllminatoll.icon
int型のnum変数には「2」など数値を代入するように
Player型のmyPlayer変数には「プレイヤの実態」を代入します。(ex. new Player(); )
この「実態」の事をインスタンスと呼ぶ
へー、わかりやすい解説だllminatoll.icon
---
10/9 ルーレットゲームを作る
ゲーム制作の流れ
1 画面上のオブジェクトをすべて書き出す
2 オブジェクトを動かすためのコントローラスクリプト(台本)を決める
3 オブジェクトを自動生成するためのジェネレータスクリプトを決める
4 UIを更新するための監督スクリプトを用意する
5 スクリプトを作る流れを考える
スマートフォン用に設定する
File -> Build Settings -> iOS -> Switch Platform
Gameタブからアスペクト比も設定できる
オブジェクトを配置する
https://gyazo.com/ac521282b7e912db4418874ce4e96c09
ルーレットの部品が配置できた🌟llminatoll.icon
XYZで配置の位置が決められる( MMDぽい感じで私はとっつきやすかった )llminatoll.icon
動かすためのスクリプトを書く
code:C#
//回転速度分、ルーレットを回転させる
transform.Rotate(0, 0, this.rotSpeed);
Z軸回転ってことね!理解llminatoll.icon
https://gyazo.com/983bea61f0feeb24173b864640387272
code:C#
if (Input.GetMouseButtonDown (0)) {
this.rotSpeed =10;
}
めちゃくちゃ短いコードで回った!llminatoll.icon
これJavaScriptでやろうと思うと、もっと長々と書かなきゃだよllminatoll.icon
Unityすごいllminatoll.icon
減衰係数を掛けてだんだん遅くなるようにしよう
this.rotSpeed *= 0.96f;
摩擦や空気抵抗など様々な場面で使われている
https://gyazo.com/54c0f4f3e35e0bd8c5baf68faa7e0fc7
できたllminatoll.icon
10/13 車ゲームを作る
https://gyazo.com/27e00055fddfca81bb86bf458198ae19
スワイプの長さを求める
マウスを離した座標 ー マウスをクリックした座標
スワイプの長さを初速度に変換する
this.speed = swipeLength / 500.0f
500.0f の部分を変えることで初速度を変化させられる
音をつけよう
音をつけたいオブジェクトを選択
右窓(Inspector)からAdd Componentを選択
Audio -> Audio Source -> プロジェクトウィンドウからAudioClip欄に音楽ファイルをドラッグ&ドロップ
Play on Awake(ゲーム起動時に音を流す)のチェックを外しておく
車にアタッチされてるスクリプトを開いてvoid Update内に以下のコードを追加
GetComponent<AudioSource>().Play();
AudioSourceコンポーネントを取得して、AudioSoureコンポーネントの持つPlayメソッドを呼び出している
Unityを使えば効果音をつけるのも簡単!!
---
MEMO:
デバイスをiOS会員センターに登録する(アプリ配信時に必要)