LoginSignup
0
0

More than 5 years have passed since last update.

[備忘録]2D&3Dスマホゲーム入門 part3 開発ステップ

Posted at

ゲームの設計

①画面上のOBをすべて書き出す
②OBを動かすためのコントローラースクリプトを決める
③OBを自動生成するためのジェネレータースクリプトを決める
④UIを更新するための監督スクリプトを用意する
⑤スクリプトを作る流れを考える

<詳細>
①:ゲームに出てくるオブジェクトを羅列する。
②:①のなかから動くオブジェクトを探す。動くOBにはコントローラースクリプトが必要。
③:ゲームプレイ時に生成されるOBを探す。プレイヤの移動や時間経過によって出現するものがこれに当てはまる。
④:ゲームのユーザーインターフェイスを操作したり進行状況を判断したりするために、ゲーム全体を見渡せるスクリプトが必要。
⑤:②→③→④の順。

UnityOfficial
Transform.Rotate
public void Rotate (Vector3 eulerAngles, Space relativeTo= Space.Self);
パラメーター
eulerAngles 適用する回転
relativeTo  回転はオブジェクトに対してローカルか、ワールド

説明

Z 軸で eulerAngles.z 度回転、X 軸で eulerAngles.x 度回転、Y 軸で eulerAngles.y 度回転します (順番は説明した順)

If relativeTo is not specified or set to Space.Self the rotation is applied around the transform's local axes. If relativeTo is set to Space.World the rotation is applied around the world x, y, z axes.

using UnityEngine;

public class ExampleClass : MonoBehaviour
{
    void Update()
    {
        // Rotate the object around its local X axis at 1 degree per second
        transform.Rotate(Vector3.right * Time.deltaTime);

        // ...also rotate around the World's Y axis
        transform.Rotate(Vector3.up * Time.deltaTime, Space.World);
    }
}

※引数に渡すx,y,zは、それぞれx軸、y軸、z軸を示す。つまり、x軸指定はバイクのハンドルを回すときの方向、y軸は右ねじの法則の親指が上のときに動かす方向、z軸は2Dならば左回転になる。

UnityOfficial
Input.GetMouseButton
public static bool GetMouseButton (int button);
説明
マウスボタンが押されているかどうかを返します

ボタンの値は左ボタンは 0、右ボタンは 1、中ボタンは 2 になります

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void Update() {
        if (Input.GetMouseButton(0))
            Debug.Log("Pressed left click.");

        if (Input.GetMouseButton(1))
            Debug.Log("Pressed right click.");

        if (Input.GetMouseButton(2))
            Debug.Log("Pressed middle click.");

    }
}

※ちなみにGetMouseButtonUpはクリックを離した瞬間で、GetMouseButtonなら押している間、GetMouseButtonDownはクリックした瞬間にtrueを返す。

あるスピードで回転してるものを少しずつ減算していくだけだと、一定の速さで減速するので不自然にみえてしまう。そのため、フレームごとにスピードに減衰係数(例えば0.96)を掛けてみると良い。この場合、線形でなく指数関数的に減速するので、自然に減速しているように見える。

ルーレット
public class RouletteController : MonoBehaviour {

    float rotSpeed = 0; //回転速度

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        //マウスが押されたら回転速度を設定する
        if (Input.GetMouseButtonDown(0))
        {
            this.rotSpeed = 5;
        }

        //回転速度分ルーレットを回転する
        transform.Rotate(0, 0, this.rotSpeed);

        //ルーレットを減速させる
        this.rotSpeed *= 0.96f;
    }
}

OBを指定の位置まで移動させたい場合
transform.Translate(x,y,z)を使用する。引数に指定した値は、その場所に移動するのではなく、現在地からの移動ベクトルを表す

サンプル
public class CarSwipe : MonoBehaviour {

    float speed = 0; //車のスピード

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        if (Input.GetMouseButton(0))
        {
            //マウスがクリックされたら初期速度0.2f
            this.speed = 0.2f;  
        }

        transform.Translate(this.speed, 0, 0); //移動
        this.speed *= 0.98f; //徐々に減速
    }
}

難しいスクリプトでも、最初は簡単な動きから初めて徐々に機能を追加していくこと!

UIとは、ゲームの状態や進行状況を表示するもの。UnityではuGUIというUI部品のライブラリが提供されているので、簡単に作ることができる。

UIの作り方
①UIの部品をシーンビューに配置する。
②UIに書き換える監督スクリプトを作成する。
③監督スクリプトを作り、作成したスクリプトをアタッチする。

Uiを使うときは頭に「using UnityEngine.UI; 」が必要だから忘れないように!

GOの座標は「GO名.transform.position」で取得できる。

ToString関数を使ってある2点間の距離を小数点第2位まで表示できる。数値を文字列に変換する関数。引数には数値を表示するときのフォーマットを指定することができる。

ToStringで使う書式指定子
整数型 D[桁数] 整数を表示する場合に使える。指定した桁数に満たない場合は、左側に0が挿入される。 
【例】(456).ToString("D5") → 00456

固定小数点型 F[桁数] 小数を表示する場合の小数点以下の桁数を指定する。
【例】 (12.3456).ToString("F3") → 12.345

自分以外のOBの持つコンポーネントにアクセスする方法
①Find関数でOBを探し出す。
②GetComponent関数でOBのもつコンポーネントを取得する。
③コンポーネントの持つデータにアクセスする。

効果音再生
Obにコンポーネントを追加してクリップに再生したい音源をアタッチ。
スクリプトに

 //効果音再生
            GetComponent<AudioSource>().Play();

Play()関数を呼び出して完成。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0