FC2ブログ
    08 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.» 10

    ハルシオンシステムの気ままBlog

    株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

     

    【ハルシオンブログ】よく使う静的メソッドのクラス名を書かなくてよくする方法 

    こんにちは。
    大坂です。

    よく使う静的メソッドのクラス名を書かなくてよくする方法です。
    「using static」を使えばできますよというだけ。

    コード

    using UnityEngine;
    using static UnityEngine.Debug; // Debugを省略できる
    using static UnityEngine.Random; // Randomを省略できる

    public class Test : MonoBehaviour
    {
    void Start() {
    Log("Test");
    Range(1, 10);
    }
    }

    こんな感じで省略できます。
    ただ、チームで開発してるときなんかはわかりにくくなりそうな気もするので、使いどころは考えないといけないですかね。

    こんなことができるよというお話でした。
    ではまたノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】deltaTimeを使えばストップウォッチとか、ゲームのタイマーとか作れます。( ー`дー´)キリッ 

    こんにちは。坂内っす。
    祝日のためブログが1週間飛びました。
    俗にいうシルバーウィークでしたね。皆さんどうお過ごししたでしょうか?

    あー 旅行いきたい!


    Unityでタイムを計る方法。
    ストップウォッチ的な感じや、ゲームの残り秒数的な奴の作り方。

    幾つかやり方あると思いますが、簡単そうなのはTime.deltaTimeを使う方法でしょうか。

    簡単にストップウォッチ的なものを作ってみます。

    [Blog20210927.cs]

    using UnityEngine;
    using UnityEngine.UI;

    public class Blog20210927 : MonoBehaviour
    {
    [SerializeField] Text lblTime;
    [SerializeField] Button btnStart;

    enum TimerStat {
    None,
    Counting,
    Stop,
    }
    TimerStat stat;
    float timer = 0f;

    private void Start() {
    lblTime.text = "";
    stat = TimerStat.None;
    btnStart.onClick.AddListener(OnClickButton);
    btnStart.GetComponentInChildren<Text>().text = "開始";
    }

    void OnClickButton() {
    switch (stat) {
    case TimerStat.None:
    case TimerStat.Stop:
    timer = 0f;
    stat = TimerStat.Counting;
    btnStart.GetComponentInChildren<Text>().text = "ストップ";
    break;
    case TimerStat.Counting:
    stat = TimerStat.Stop;
    btnStart.GetComponentInChildren<Text>().text = "開始";
    break;
    }
    }

    private void Update() {
    if (stat == TimerStat.Counting) {
    timer += Time.deltaTime;
    lblTime.text = timer.ToString("n1");
    }
    }
    }




    Updateの中にすべてが詰まってます。
    Time.deltaTimeを足しこんでいけば、ボタンを押してからの時間が取れますね。
    あとは表示しているだけです。

    ゲームのタイマーなんかもTime.deltaTimeを使えばカウントダウンできますね。

    ということで、タイマー系にはdeltaTimeが使えるよという話でした。
    では、あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】スクリプトの実行順の制御 

    こんにちは。
    大坂です。

    Unityでスクリプト間のAwake、Startの実行順を制御する方法です。
    Awake、Startの実行順を気にしない作りにする方がいい気もしますが、方法があるのでご紹介。

    使うのは「DefaultExecutionOrder」属性ですね。
    とりあえず何も指定しないで実行してみます。

    Test_1.cs

    public class Test_1 : MonoBehaviour
    {

    private void Awake() {
    Debug.Log("Test_1 Awake");
    }

    private void Start() {
    Debug.Log("Test_1 Start");
    }
    }

    Test_2.cs

    public class Test_2 : MonoBehaviour
    {

    private void Awake() {
    Debug.Log("Test_2 Awake");
    }

    private void Start() {
    Debug.Log("Test_2 Start");
    }
    }

    実行結果。


    Test_2の方が先に実行されてますね。
    (オブジェクトに後にアタッチしたスクリプトが先に実行されるようですが、いっぱいあるとそんなの気にしてられませんね・・・。)

    Test_1に[DefaultExecutionOrder(-1)]を設定して先に実行されるようにしてみます。
    属性を設定しないと「0」で、値が小さい方が先に実行されるので「-1」を設定します。

    Test_1.cs

    [DefaultExecutionOrder(-1)]
    public class Test_1 : MonoBehaviour
    {

    private void Awake() {
    Debug.Log("Test_1 Awake");
    }

    private void Start() {
    Debug.Log("Test_1 Start");
    }
    }

    実行結果。


    ちゃんとTest_1が先に実行されてますね。
    他にも実行順を制御するのに[Editor]-[ProjectSettings]-[Script Execution Order]を使う方法もありますね。
    前に書いてました・・・

    では今週もこれにてノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】Unity+VisualStudioを使ってるんだけど、ちょっと使えそうな拡張機能の紹介 

    【ハルシオンブログ】Unity+VisualStudioを使ってるんだけど、ちょっと使えそうな拡張機能の紹介

    ハルシオンシステムの坂内っす。
    ご機嫌如何ですか?
    私は来週2回目のワクチンうってきます。
    今のところ元気です。

    UnityでVisualStudioを使用していて、役に立ちそうな拡張機能があったので紹介。

    ①「File Path On Footer」
    https://marketplace.visualstudio.com/items?itemName=ShemeerNS.FilePathOnFooter

    ファイルのパスが下部に表示されるアドオン。



    微妙に役に立ちますよね!


    ②「Viasfora」
    https://marketplace.visualstudio.com/items?itemName=TomasRestrepo.Viasfora

    カッコの色を変えてくれる。
    こんな感じでかっこの色が組み合わせで変わるので、見やすくなる(?)



    ③「Align Assignments」
    https://marketplace.visualstudio.com/items?itemName=VisualStudioPlatformTeam.AlignAssignments

    Ctrl + Alt + ] を押すことで文を綺麗に並べてくれるようです。



    あ・・・うーん微妙かなぁ・・・・??


    ④「Ctrl+Click Go To Definition」
    https://marketplace.visualstudio.com/items?itemName=VisualStudioPlatformTeam.CtrlClickGoToDefinition

    Ctrl+左クリックで宣言元に飛ぶことができる。
    (なんかこの機能入れなくても初めから動いたのではじめから入ってるかも??)



    あ、これは便利ですね。いつもF12押してました。


    と、いうことで、幾つか使えそうなものの紹介でした。
    あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】Visual Studioでメソッド間に区切り線を表示する方法 

    こんにちは。
    大坂です。

    1個のクラスでメソッドが多い場合にメソッド間がわかりにくくなることがあって、
    なんかできないかなーと思ったら区切り線が表示できるみたいなので、表示する方法です。

    Visual Studioで「ツール」-「オプション」を開く


    「テキストエディター」-「C#」-「詳細」-「プロシージャ行の区切り記号を表示する」にチェックを入れる


    設定後にコードを見ると区切り線が表示されてますね。


    人によって見づらくなるかもしれませんが、こんなことも出来るという紹介でした。
    ではまたノシ

    Category: Androidアプリ紹介

    tb 0 : cm 0   

    【ハルシオンブログ】Listの全件検索をする場合、FindAllとforeachどっちが早いの!? 

    こんにちは。
    涼しい日が続いてますね。
    夏終わりましたかね?

    さて、UnityでListとかを使ってる時に、FindAllを使うことが多々あります。
    「FindAllってはやいの?」
    と疑問がでたので、foreachと比較してみました。

    コードはこちら
    [Blog20210906.cs]

    using System.Collections.Generic;
    using UnityEngine;

    public class Blog20210906 : MonoBehaviour
    {
    List<int> aryInt = new List<int>();

    void Start()
    {
    for (int i = 0; i < 10000000; i++) {
    aryInt.Add(i);
    }
    Calc1();
    Calc2();
    }

    void Calc1() {
    System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
    sw.Start();

    List<int> calc = aryInt.FindAll(x => x % 5 == 0);

    sw.Stop();
    Debug.Log("Calc1 : " + sw.ElapsedMilliseconds);
    }

    void Calc2() {
    System.Diagnostics.Stopwatch sw2 = new System.Diagnostics.Stopwatch();
    sw2.Start();

    List<int> calc2 = new List<int>();
    foreach (int i in aryInt) {
    if (i % 5 == 0) {
    calc2.Add(i);
    }
    }

    sw2.Stop();
    Debug.Log("Calc2 : " + sw2.ElapsedMilliseconds);
    }
    }



    こんなことをした結果はこちら。

    Calc1 : 81ms
    Calc2 : 227ms


    foreachよりFindAllのほうが断然早いですね!

    あんまりforeach使ってた方少ないと思いますが、FindAllが早いのが分かりましたね。

    というメモでした。

    あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】Visual Studioのコードスニペットのお話 

    こんにちは。
    大坂です。

    なんだか気温が少し下がって寒く感じますね。
    季節の変わり目に入ってきたので体調には気を付けたいところです。

    さて前に
    【ハルシオンブログ】Visual Studioでenumを条件に使ったswichを書くときに便利な方法。
    なんて記事を書きましたが、Tabを2回押してコードを書かれるのはデフォルトでいろんなのがあるみたいです。
    C# コード スニペット

    さらっと見て使いそうなのはforくらいですが、いろいろ使う人は便利になりますね。
    forと打ってTabを2回押すとこんな感じで書かれます。


    他にも独自のコードスニペットを登録する方法もあるので、よく使うコードがあれば登録してみるのもよさそうです。
    チュートリアル: コード スニペットを作成する

    少しめんどくさそうに感じますが、xmlを生成してくれるサービスもありました。
    Visual Studio Snippet Generator

    試しにVisual Studio Snippet Generatorでデフォルトで設定されてるのを登録してみます。

    「Generate」ボタンを押して→「Download」ボタンを押す。

    Visual Studioで「ツール」→「コードスニペットマネージャー」を選択。


    コードスニペットマネージャーが開くので言語を「CSharp」にして「インポート」ボタンを押して、Visual Studio Snippet Generatorでダウンロードしたファイルを選択。


    やることはこれだけですね。
    Visual Studio Snippet GeneratorのShortcutで設定した「dbl」と打ってTabを2回押すと「Debug.Log("");」が出てきます。


    登録手順も簡単なので、色々設定してみるのもよさそうですね。

    では今週もこれにてノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0