Shooting Game チュートリアル 第12回
すすめていきます。
12.1 Waveの作成
とりあえず、インポートしてみる。
もっと自作のWavesを作って入れればいいのだろうけど今回はしない。
ここのSizeの値を増やせばそれだけ入る。
12.2 スコアの実装
スコアなどの値の保存はPlayerPrefsクラスで行えるらしい。
(NSUserDefault的なもの?)
とりあえず、完成!!
Shooting Game チュートリアル 第11回
すすめていきます。
ゲームバランス的な部分だね!ちょっと緊張。大事なところだからちゃんと覚えたい。
でも単なる記録なので読んでる人の役に立てるか謎。。
まずはコーヒー。
11.1 HP(ヒットポイント)と攻撃力(power)の実装
OK!
11.2 ダメージを受けた時の表現
こちらはアニメーション。
だいぶ苦戦してメモも取れなかった。苦戦というのは理解に苦戦ということでチュートリアルをそのまますすめていけば問題ない。
11.3 プレイヤーの無敵時間
これもアニメーション。
アニメーションってけっこう難しい。慣れが必要かも。。
あれ?無敵のまま止まらなくなった!これはExitTimeの問題か?
と思い確認するもうまくいかない。なぜだ。。
さらに起動しなくなった。
急に、Titleまわりでエラーが起こっている様子。
サンプルファイルと見比べるも違いがわからず、お手上げ状態に。
というわけで、サンプルファイルをそのまま使って進めていくことにしました。
あれ、プレイヤー、ずっと無敵のままじゃない??
Shooting Game チュートリアル 第10回
すすめていきます。
10.1 タイトルの表示
そういえばGUI関係が大幅に変わっているときいた。
EmptyのGameObjectを作って、そこにComponent→Rendering→GUIText
10.2 タイトル -> ゲームスタート ( -> 死んだら ) -> タイトル のマネージャークラスを作る
特に特記事項なし。といいたいけど、表示非表示を切り替えるって方法がここにあった。タイトルを
title.SetActive (true); //falseで非表示
で表示非表示切り替えしてる。
このやり方とは全然違う。学び多い。
10.3 他のスクリプトからマネージャーを呼び出す
ぽちぽち。
おおお!ちゃんと動いた!
そろそろ完成するのかなと思うと感慨深い。
続きます。
Shooting Game チュートリアル 第09回
すすめていきます。
そうそう気になってたの。プレイヤーがはみだして消えるの。
9.1 プレイヤーに移動制限つける
今回は移動の制限にカメラのビューポートとMathf.Clampを使用します。
Mathf.clampってどういう意味?
Mathfとは数学的な関数を使用するクラス。clampは固定とかそういう意味。ということで範囲制限をMathf.Clampで行うということらしいと理解。
9.2 Spaceship.csとEnemy.csの修正
そうだった、Moveメソッドを消さないと。
というわけで修正修正。
Enemy.csはこうした。
using UnityEngine;
using System.Collections;
public class Enemy : MonoBehaviour {
Spaceship spaceship;
private Transform tran;
private Rigidbody2D rb2;
void Start () {
spaceship = GetComponent<Spaceship>();
tran = GetComponent<Transform> ();
rb2 = GetComponent<Rigidbody2D>();
// spaceship.Move (tran.up * -1);
Move (transform.up * -1);
StartCoroutine ("shotCoroutine");
}
IEnumerator shotCoroutine(){
if (spaceship.canShot == false) {
yield break;
}
while (true) {
for(int i = 0; i < tran.childCount; i++){
Transform shotPosition = tran.GetChild(i);
spaceship.Shot(shotPosition);
}
yield return new WaitForSeconds (spaceship.shotDelay);
}
}
public void Move (Vector2 direction){
rb2.velocity = direction * spaceship.speed;
}
void OnTriggerEnter2D(Collider2D c){
string layerName = LayerMask.LayerToName(c.gameObject.layer);
if (layerName != "Bullet(Player)") {
return;
}
Destroy (c.gameObject);
spaceship.Explosion ();
Destroy (gameObject);
}
}
続きます。
Shooting Game チュートリアル 第08回
すすめていきます。
8.1 BGMを付ける
なるほど、ちゃんとドロップしてもオブジェクトができない!と思ったらBackGroundにアタッチされていたことが発覚。
うしろのグレーのところにドロップでOK。
8.2 プレイヤーにショット音をつける
using UnityEngine;
using System.Collections;
public class Player : MonoBehaviour {
public float speed = 5;
public GameObject bullet;
Spaceship spaceship;
private AudioSource audiosource;
void Start() {
spaceship = GetComponent<Spaceship>();
audiosource = GetComponent<AudioSource>();
StartCoroutine ("FirstCoroutine");
}
IEnumerator FirstCoroutine ()
{
while (true) {
spaceship.Shot (transform);
audiosource.Play ();
yield return new WaitForSeconds (spaceship.shotDelay);
}
}
void Update () {
float x = Input.GetAxisRaw("Horizontal");
float y = Input.GetAxisRaw("Vertical");
Vector2 direction = new Vector2(x, y).normalized;
spaceship.Move (direction);
}
// ぶつかった瞬間に呼び出される
void OnTriggerEnter2D(Collider2D c){
string layerName = LayerMask.LayerToName (c.gameObject.layer);
if (layerName == "Bullet(Enemy)") {
Destroy (c.gameObject); //c == bullet etc,,
}
if (layerName == "Bullet(Enemy)" || layerName == "Enemy"){
spaceship.Explosion ();
Destroy (gameObject); //gameobject == player
}
}}
8.3 爆発音を付ける
なるほど、Explositonは生成と共に音がなるから、アタッチだけでいいんですね。
OK!
続きます。
Shooting Game チュートリアル 第07回
すすめていきます。
しかしタイトルからして意味がわかりません。Wave型って?陣形の一つと理解していいの?よくわからない。
7.1 Waveの作成
とりあえず3機あわせてWave!
7.2 Waveを呼び出すEmitter (エミッター)を作成する
Emitterって何?制御装置みたいに理解。
そして、はい、エラー。
でもこれは、スペルミスがほとんどでした。
ここのElement()は、Sizeを入力すると出てくるよ。
とりあえず、完成。
続きます。
Shooting Game チュートリアル 第06回
すすめていきます。
6.1 3枚の画像を表示させる
Quadにテクスチャをはりつける…
Quadって何?4個入りのもの、とかいう和訳が出てくるけど。
そんなときのオフィシャル。
6.2 Frontを作る
Quadは3DObjectの中にあった。
6.3 MiddleとBackを作る
複製。
6.4 3枚の位置を調整する
6.5 背景をスクロールさせる
む、またもエラー。
そして修正。
using UnityEngine;
using System.Collections;
public class Background : MonoBehaviour {
public float speed = 0.1f;
private Renderer ren;
void Start(){
ren = GetComponent <Renderer> ();
}
void Update () {
// 時間によってYの値が0から1に変化していく。1になったら0に戻り、繰り返す。
float y = Mathf.Repeat (Time.time * speed, 1);
// Yの値がずれていくオフセットを作成
Vector2 offset = new Vector2 (0,y);
// マテリアルにオフセットを設定する
ren.sharedMaterial.SetTextureOffset ("_MainTex",offset);
}
}
実行!
わーい!!
すごいや!!!
背景が時差をもってスクロールするだけでこんなにゲームっぽくなるなんて、と感動しちゃいました。
続きます。