スキップしてメイン コンテンツに移動

ストップウォッチをUnityで作る。

Unityでストップウォッチを作っていきます。

動画でタイマーというかストップウォッチが使いたかったので、著作権的な事を造った方が早いなと。

この辺りは、大分考えが変になっているなぁとも思いますが。

動画もあるので、良ければこちらもよろしくお願いします。



それでは早速作っていきましょう。

大まかな流れ

1. 必要なものをUnity上に配置
2. スクリプトを書く(こ)
3. スクリプトを使えるように設定する

以上のような流れでやっていきます。

1.必要な物をUnity上に配置


ざっくりと必要なものはこんな感じ。

まずCanvasを置き、その中に背景用のImage、Buttonを三つ、時間用のTextがCanvasの中に入ります。

そして別でGameObjectを作り、後で作るスクリプトを付けます。

今回必要なものはこの位。

入れ方が分からないという場合は、動画を見ていただいた方が分かりやすいかと。


2.スクリプトを書く


以下、コピー用になります。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Counter : MonoBehaviour
{

public UnityEngine.UI.Text TimeText;

public static float countTime;

private int a;

    // Start is called before the first frame update
    void Start()
    {
        countTime = 0;
        a = 0;
    }

    // Update is called once per frame
    void Update()
    {
        if(a == 1){
           countTime += Time.deltaTime; 
        }
        if(a == 2){
           countTime = countTime; 
        }
        if(a == 0){
           countTime = 0; 
        }

    TimeText.text = countTime.ToString ("F2");
 
    }

   public void OnClick1(){
        a = 1;
   }
   public void OnClick2(){
        a = 2;
   }
   public void OnClick0(){
        a = 0;
   }
}

以上。

さてざっくりと解説をしていきます。

まず、最初の三行。

public UnityEngine.UI.Text TimeText;
public static float countTime;
private int a;

一番上は時間を表示するためのUI属性のTextを入れる箱。
後でUnity上でドラッグか選択で設定します。

二つ目は時間用のスクリプト。
今回はいつどこからでも書き換えが可能なstaticにしていますが、今回の内容的にprivateでも動きそう。
時間は少数を表したいのでfloatとして置きます。

三つ目はボタンの識別用。
ボタンを押したときの処理で中身を書き換え、時間のカウント、ストップ、リセットのスクリプトを管理する用。
こちらは、単純な整数で良いのでintとします。

次にUpdate内。

  void Update()
    {
        if(a == 1){
           countTime += Time.deltaTime; 
        }
        if(a == 2){
           countTime = countTime; 
        }
        if(a == 0){
           countTime = 0; 
        }

    TimeText.text = countTime.ToString ("F2");
 
    }

Updateは処理が自動的に連続で行われます。
時間を増やすだけなら「 countTime += Time.deltaTime;」書けば良いだけなのですが、今回はストップウォッチな訳で。

 if(a == 1){
           countTime += Time.deltaTime; 
        }
一つ目、先ほどボタンの判別用に設定したaに1が入っている時に、時間を増やします。
countTimeが変数、もっとわかりやすく物理の授業的に言えばt。
+=は足していく処理になり、毎回Time.deltaTime;で時間を増やしていきます。
なぜ時間の増やすのがこれでいいのかはシステム的な問題なので、こうと覚えてください。

 if(a == 2){
           countTime = countTime; 
        }
二つ目、ボタン判別用のaに2が入っている場合。
ここでは時間を止めるために、この処理直前のcountTimeを入れるというもの。
要は、前が1なので、今回は1。さらに次もaが2なら1を代入すると。
aが2なら延々と前と同じ数字を入れるで、作動時は止まって見えるという。

 if(a == 0){
           countTime = 0; 
        }
三つ目、ボタン判別のaが0の場合。
この場合はリセットの処理にしたいので、countTimeにそのまま0を入れてしまいます。
これを毎回アップデート時に行うので、画面上では、リセットされた状態に見えるというものです。

 TimeText.text = countTime.ToString ("F2");
そして最後。
この文は、毎回上の三つの処理によって今countTimeに入っている数字を、TimeText.textに小数点2桁のToString(文字列)にして入れてあげるというものです。

表示先はテキストなので、この処理で数字をテキストに変換する必要があるわけです。


それでは最後。

 public void OnClick1(){
        a = 1;
   }
   public void OnClick2(){
        a = 2;
   }
   public void OnClick0(){
        a = 0;
   }
こちらはボタンに設定する用のスクリプト。
内容としてはOnClick1が実行されたら、ボタン判別変数aに1を入れる。
これを2に2。3に3という感じです。

これはUnity上のボタンから、ボタンを押したときOnClick1を行うという設定、紐付けのようなことをする必要があります。これについては次に書きます。

3. スクリプトを使えるように設定する


まずはテキストの配置から。

HIerarchyのCreateからGameObjectを作り、GameObjectにAssetsの先ほど作成したスクリプトをドラッグ&ドロップ。

すると上の写真のようになるので、Canvas内の数字表示用のテキストをドラッグして一番右のTimeTextに入れます。

これで数字を表示するテキストの関連付けは完了です。

続いて、ボタンの設定です。


最初に配したボタンをクリックすると、画面右下の方に、
OnClick()
とあるので、その下の+をクリック。

すると、ボタンに処理させるスクリプトを設定できるようになるので、枠に先ほど作ったGameObject(スクリプトが付いたもの)をドラッグ&ドロップで置きます。

そして、OnClick内右上の選択ボックスからスクリプト名を選び、スクリプト内の処理、今回は、先ほど書いたOnClick1・2・3のどれかを対応するものに指定します。

これをスタートボタンにOnClik1、ストップボタンにOnClick2、リセットボタンにOnClick3を設定します。

以上で、ストップウォッチ完成です!

お疲れさまでした!

書き出し等は、今回はPC向けなので、何もいじらずとも書き出せるかと。

もしかしたらアプリ名とかの設定はいるかもしれませんが。

何かわからないことがあれば、ツイッターやYouTubeのコメント、ブログのコメント等に書いていただければわかる範囲でお答えいたします。

一番ツイッターが気が付く可能性は高いです。


それでは最後まで、読んでいただきありがとうございました!

動画の方もよければよろしくお願いします。


それでは、また次のブログもよろしくお願いします!

コメント

  1. 一番わかりやすい記事でした。
    ありがとうございました。

    返信削除

コメントを投稿

このブログの人気の投稿

3DCADでゲーム用の銃を作っていく ~活動報告190925~

3DCADのFusion360を使って、銃の3Dモデルを作ります。 どうも、kou0128です。 昨日、思ったよりもガチャゲーの制作に時間がかかる事が判明し、VRの制作に戻ります。 まずは、3DCADでモンスターを撃つ銃のモデルを作っていきます。 使うのはFusion360という3DCADソフトです。 作ってる途中の画像じゃなく、いきなり原型が出来てしまってますが・・・ 使い方はを細かく紹介するブログと動画は、また作ります。 さて原型を作りましたが、もう少し銃っぽさを出していきます。 グリップ部分チェッカリングを付けていきます。 実際の拳銃でも滑り止めについていることが多いし、平面な部分を減らしていくことでのっぺり感を減らせるんじゃなかろうかという感じです。 グリップのチェッカリングと、スライドの分割溝を付けることで、一気にのっぺり感が減りました。 ただ、今回作ったモデルはゲーム中にサイト覗きっぱなしなので、サイドのデザインは関係ないという。 やっぱり作るならクオリティにこだわりたいじゃないですか。 今後の練習と思えば、全然苦になりません。 サイドにデカールを貼ってみました。 簡単に絵を張り付ける機能も標準で搭載されているので、3D上でモデルとステッカーのあわせが試せるという使い方が出来ます。 3Dプリンタでモデルを出して、プリンターでシールを印刷すれば実物で再現できそう。 うーん、やっぱり3DCADでモデル作ると3Dプリンタで出してみたいという思いにもなります。 やっぱり買おうかなぁ・・・・ 閑話休題 Windows10搭載のペイント3Dで色を塗ってみました。 これでテクスチャデータが書き出せたら、神ソフトなのですが試してみた感じ、全然上手い事行きません。 やっぱりBlenderで色を付けるしかないですね・・・ そんな訳でBlenderに取り込みます。 BlenderのUV展開で色を付けることできないかなぁ・・・と以前から考えてますが、何故かペイント機能が出ない。 というか、そもそもUV展開された状態が...

SL230~リアブレーキ&シフトペダルの調整~

今回は以前より自分のライディングポジションに合わなかった、 リアブレーキペダル&シフトペダルの位置調整をしていきます。 まずは、リアブレーキの調整からしていきます。 はい、調整後です。 調整方法はいたって簡単です。 この金色のナットの位置調整をして終わりです。 ね?簡単でしょ? 流石に詳しく説明をします。 1. まず、下のねじの山を確認し、金色のナットとステン(?)のナットが近づく方と離れる方を確認します。 2. でペダルを下げたい場合は、近づく方向に回し、上げたい場合は離れる方向に回すだけです。 説明終わり。 リアブレーキペダルの調整は恐ろしく簡単でした。 注意点としては、 1. 電気をONにしてブレーキを踏んだ時、ブレーキーランプが点きっぱなしにならない事に確認する。(点きっぱなしだと、「整備不良」でお巡りさんに捕まるよ!) 2. ブレーキを踏んでいない時に、ブレーキパッドとブレーキディスクが当たってないか確認する。 この二つを確認して、試し乗りして問題なければ終了です。 これで、長距離でも疲れにくくなりましたね。 さて、次はシフトペダルの調整をしていきましょう。 シフトペダルの調整は本来、この 二つのナットの位置を変えて調整しますが、今回は、 元の接続部のとこから変えていきます。 それでは説明を。 1. まず、シリコンスプレーを吹いて、ねじを緩めます。 2. シフトペダルは横方向に遊びが有るので、そのまま取り外し。 3. ここから位置を決めながら、少しづつ角度を変えていきます。(かなり大きく変化するので良い位置を見つけるのは難しいよ) 4. で、位置が決まったらねじを付けて固定です。(締め過ぎ注意、なめたら詰みだよ!) で、あとは試し乗りして気に要らなけりゃ、変えてまた試し乗りという流れですね。 これでシフトペダルの調整は終了です。 自分がした感じだとブレーキペダルは簡単でしたが、シフトペダルは少し面倒かなという印象です。 今回自分がしたときは、...

「このカードを語りたい」第2回 クラヤミノツボ DARK MEMORY CONTAINER【デュエマ】

どうもkou0128改め、kouhei0128です。 「このカードを語りたい」第2回の今回は、なんかダメそうな見た目だなぁと思ってたら本当に禁忌レベルの使われ方になった、 クラヤミノツボ DARK MEMORY CONTAINER このカードについて語って行きたいと思います。 1.性能よりも前にまず見た目が危なそう。 このカードを見て、皆様はどんな印象を持たれましたか? 見た目・名前から「なんかDARK MATERIAL CONPLEXに似てるなぁ」そうは思いませんか? とは言え性能で見ると、あのカード程の高いパワーも持っていなければ、効果も3色5マナの割には強制2ドローと、シールド追加時に墓地から蘇生出来る効果です。 「シールド追加ってコスト高いカードが殆どだし、出した上で2ドローだから、まあそんなに大した事無いだろう」と、そんな風に考えた時期がありました。 2.ちゃんと性能全部が駄目だった このカードが出た王道Wの第2弾時点ではそれほど相性の良いカードは発見されていませんでした。 しかし、王道W第3弾にこのカードが入ってました。 前回語ったこのカード、「アンリミテッド・アヴァラルド 〜地獄帰りの騎士〜」です。 これまでのカードプールでは、墓地にクラヤミノツボを持っていく方法はエマージェンシータイフーンなど軽量なカードが有りましたが、蘇生効果を発動する為のシールド追加手段に乏しかったのが現実でした。 しかし、アンリミテッド・アヴァラルドは3ドロー2捨てして、シールド追加。 つまり3ドローした時点で、手札にクラヤミノツボが2枚存在するなら、2捨てで墓地に置くことでクラヤミノツボをシールド追加時に2体蘇生出来ます。 いや、ダメだよ。 色も全く同じなので、公式も想定済みのコンボかもしれませんが、この2体蘇生から闇王ゼーロを使うループに入るデッキが大暴れしているのは、皆様も承知の事でしょう。 特にクラヤミノツボのツボ自身が出た時に強制2ドローを持っている為、2体蘇生した段階で手札0でも、4ドローでゼーロ+闇3枚が揃ってしまえば闇王ゼーロを代替えコストを払って使うことが可能です。 余りにも闇王ゼーロの為のカードと言わんばかりの性能をしています。 これは運営の想定通りの動きなのでしょうか? この記事を書いてる最中にもハンデスを軸...