6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[超初心者向け]変数の基本:Unityでクリックされた回数を数える

Last updated at Posted at 2015-05-21

Unityで何か処理するときに、回数を数えて処理を変えたいときにどうするか、の基礎です。

#先ずは元の確認
処理の元のScriptファイルです。

Launcher.cs
using UnityEngine;
using System.Collections;

public class Launcher : MonoBehaviour {

    //発射する玉のPrefab
    public GameObject ballPrefab;

    // Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
        if (Input.GetMouseButtonDown(1)) {
            Instantiate(this.ballPrefab);
        }
	
	}
}

このScriptは、以下の設定で動いています。

オブジェクト名 属性 内容
Launcher クラス
ballprefab public Gameobject 発生させるprefab
Start メソッド 初めに一回の処理:何もしない
Update メソッド 画面の更新でする処理:マウスの左クリックがされていたらballprefabを生成

#押された回数を数える

数えるには、その為のオブジェクトを用意することが必要です。どう考えれば良いでしょうか。

##どういうオブジェクトにするかを考える
###型は何が良いか
数値として持つので、それに相当する型で考えます。該当するのは以下の何れかになります。

  • int型:整数を格納する
  • float型:小数を格納する

「数える」ということは整数で済ませられるので、ここではint型で定義しておきましょう。

###名前をどうするか
命名では、以下のことに配慮する必要があります。

  • 何を示すかが分かりやすいこと。これを改造し続けていくとすれば、単純なアルファベット一文字では何か判らなくなります。
  • 誰が考えても、同じ発想になること。他人との共同もあり得るので、他人が見ても同様になることが予想され得るものがのぞましくなります。Unityの記法では、変数名は最初の文字がsmallで書くことが多いです。また、海外のソースコードもあったり、日本人でも書き方が変わるので__ローマ字で書くのは避けるべき__です。

こうしたことを考えて、今回は以下の形にします。

###どこに配置するか
今回の変数は、「押されたら数える」ので、外部から変更される可能性がありませんし、それを許すとバグの元になります。__オブジェクトのスコープは出来る限り隠す__と考えて下さい。今回は、このクラス内でのみ使うので、privateにして、class内部にしました。

###コードにする
以下の形になりました。

Launcher.cs(抜粋)
public class Launcher : MonoBehaviour {

    //押された回数を格納する変数
    private int counter = 0;

##数える処理を入れる
数える部分は、「押されたら」なので、該当するブロックに追加します。

Launcher.cs(抜粋)
	// Update is called once per frame
	void Update () {
        if (Input.GetMouseButtonDown(1)) {
            counter++;  //****追加
            Instantiate(this.ballPrefab);
        }
	
	}

##数えた数で動作を変える
数えた処理で、何かを変えたい場合は、数を評価して処理を分岐します。例えば、押された回数が20になったら玉が出ない、としたい場合は以下になります。

Launcher.cs(抜粋)
	// Update is called once per frame
	void Update () {
        if (Input.GetMouseButtonDown(1)) {
            counter++; 
            if (counter <= 20) {//****追加
                Instantiate(this.ballPrefab);
            }
        }
	
	}

ただし、これだと「玉が出るのは20が限界」ということが、後から見た時にわかりにくくなります。こうした値をそのままソースコードに書くことを「ハードコーディング」と呼び、後から改造しにくいコードになります。そうした場合は、変数を別にとりましょう。
ここまでをまとめると、以下のコードになりました。

Launcher.cs
using UnityEngine;
using System.Collections;

public class Launcher : MonoBehaviour {

    //押された回数を格納する変数
    private int counter = 0;
    const int counterMax = 20;  //最大値
    
    //発射する玉のPrefab
    public GameObject ballPrefab;

    // Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
        if (Input.GetMouseButtonDown(1)) {
            counter++; 
            if (counter <= counterMax) {//****変更
                Instantiate(this.ballPrefab);
            }
        }
	
	}
}

数え方は様々なので、「残りの数」で数えるなど、工夫してみてください。

6
6
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
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?