FC2ブログ
    09 «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.31.» 11

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

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

     

    【ハルシオンブログ】Getterしかないプロパティって1行で書けるのね。 

    こんにちは。
    大坂です。

    今週は月曜日からPCがつかなくなって、
    電源ユニットが原因っぽかったので買いに行って交換したら直ったのは良かったのですが、
    なんとも言えない週の開始でした・・・。

    さて、今週の小ネタ。
    Getterのみのプロパティってこういう感じで書いてたのですが。

    private string _test;
    public string test
    {
    get
    {
    return _test;
    }
    }


    これ1行にできるんですね。

    private string _test;
    public string test => _test;


    とまぁ、特になんてことないんですが、個人的にはこちらのほうがいいのでご紹介。
    ではまたノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】コルーチンのお話。Aコルーチン中にAコルーチンを止めてBコルーチンを動かす方法。 

    おはようございます。坂内です。

    さっそくUnityのお話。

    コルーチン使ってますか?

    Cor1が終わってからCor2を動かしたいとき。


    using System.Collections;
    using UnityEngine;

    public class Test20191028 : MonoBehaviour
    {
    IEnumerator Start()
    {
    StartCoroutine(Cor1());
    yield return new WaitForSeconds(2f);
    StartCoroutine(Cor2());
    }

    private IEnumerator Cor1() {
    yield return new WaitForSeconds(2f);
    Debug.Log("1");
    yield return new WaitForSeconds(2f);
    }

    private IEnumerator Cor2() {
    yield return new WaitForSeconds(2f);
    Debug.Log("2");
    yield return new WaitForSeconds(2f);
    }

    }



    もちろんこんな結果




    こういう書き方しちゃってます?

    ちゃんとCor1が終わってからCor2を動かすなら、こう書くのがいいのかな?


    using System.Collections;
    using UnityEngine;

    public class Test20191028 : MonoBehaviour
    {
    IEnumerator Start()
    {
    yield return StartCoroutine(Cor1());
    yield return StartCoroutine(Cor2());
    }

    private IEnumerator Cor1() {
    yield return new WaitForSeconds(2f);
    Debug.Log("1");
    yield return new WaitForSeconds(2f);
    }

    private IEnumerator Cor2() {
    yield return new WaitForSeconds(2f);
    Debug.Log("2");
    yield return new WaitForSeconds(2f);
    }

    }



    もちろん結果は同じですけどね。



    さて、それではCor1をやっている途中(Cor1が開始されてから1秒後)で処理をCor2に移したい場合はどうでしょうか。


    using System.Collections;
    using UnityEngine;

    public class Test20191028 : MonoBehaviour
    {
    private IEnumerator coroutine;
    IEnumerator Start()
    {
    coroutine = Cor1();
    StartCoroutine(coroutine);
    yield return new WaitForSeconds(1f);
    StopCoroutine(coroutine);
    coroutine = Cor2();
    StartCoroutine(coroutine);
    }

    private IEnumerator Cor1() {
    yield return new WaitForSeconds(2f);
    Debug.Log("1");
    yield return new WaitForSeconds(2f);
    }

    private IEnumerator Cor2() {
    yield return new WaitForSeconds(2f);
    Debug.Log("2");
    yield return new WaitForSeconds(2f);
    }
    }



    IEnumeratorの変数を作って、そいつでCor1を動かします。
    Cor2に移るタイミングでStopCoroutineでCor1を止めてからCor2を行います。

    結果は




    Cor1のはじめの待ち時間2秒のうち、1秒経ったところで、Cor2が開始され、ログとしては2のみが出力されました。

    こんな感じでIEnumratorにコルーチンを突っ込んで実行してあげることで、Aコルーチン処理中にBコルーチン処理を強制的に実行することができます。

    ということで、本日は簡単なコルーチンのお話でした。

    あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】Subsequence的な文字列の検索 

    こんにちは。
    大坂です。

    さて今週も適当な感じですが書いていきますよっと。
    Subsequence的な文字列の検索がしたかったときのお話です。
    こんな感じでもHitするやつですね。

    target=ABCDEFGH
    pattern=ADF


    C#だと自分で書かないといけないのようなのでこんな感じでやったらうまくいきました。
    public static bool IsSubsequence(string pattern, string target)
    {
    int j = 0;

    int targetLength = target.Length;
    int patternLength = pattern.Length;

    for (int i = 0; i < targetLength && j < patternLength; i++)
    {
    if (pattern[j] == target[i])
    {
    j++;
    }
    }
    return (j == patternLength);
    }

    最初に書いた条件で確認するとちゃんとtrueが返ってきますね。


    では今週もこれにてノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】全然RPGの制作進んでいません。ほんとすいません。いやまじで。 

    おはようございます。坂内っす。

    だいぶ涼しい日々になってきました。
    ようやく生きやすくなりましたね。

    皆様ゲーム開発如何でしょうか?進捗は?

    弊社で作っているRPGは進捗0です。

    今年中にリリースできたらって話を以前した気がしますが・・・・




    これは無理だ。

    受託がどんどん伸びてなんも進んでない!

    ってことで、来年中には出したいと思います!!
    出したい!希望!願望!


    ほんと、終わるんでしょうか・・・・・


    とりあえず、音楽と絵はずっと作り続けております!
    来年色々落ち着いたら、こいつらを入れ込んで、仕様を考えなおしてちゃんと面白いものを作ってやろうと思っておる次第です!

    引き続き応援よろしくお願い致します。


    あ、それと、11月にあるデジゲーの後に飲み会しようと思ってますが(僕は出展側ではなく、冷やかし側の人間です)、他にも大き目の飲み会があるのかなー?とTwitterでアンケートやってるので、是非みてね。




    これみて、またデジゲー飲み会を開催するかもしれません。


    そんな感じで、今日はこれだけです。

    あでゅ~ノシ

    Category: その他日記

    tb 0 : cm 0   

    【ハルシオンブログ】Unity2019にShortcutManagerなんてのがあるんですね 

    こんにちは。大坂です。

    Unity2019にShortcutManagerなんて機能が増えてるんですね。
    [Edit]-[Shortcuts...]を押すとショートカットの編集ができるWindowが出ます。





    編集するときは編集したいメニューのShortcut列あたりをダブルクリックして、
    使用したいショートカットをキーボードで押すだけです。




    これでちゃんとメニューにもショートカットが表示されますね。



    どのボタンがショートカットに割り当てられるか確認したいときは、
    Windowの上の方にあるキーボードのところをクリックしていけば確認できます。



    すでに割り当てられているショートカットの変更もできるのでよく使うメニューだけど押しにくいのとかも簡単に変えられますね!

    それではこれにてノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】enumのみのcsファイルを作ると結構使いやすかったりするかも? 

    こんにちは!坂内っす。
    先週の台風凄かったっすね!まだまだ復旧まだのところもあるようで、大変ですが頑張ってください。

    さてUnityのお話。

    基本的な話ですが、Enumだけのファイルって作れるんですが、意外とわかりやすくて便利。

    [EnemyType.cs]

    public enum EnemyType
    {
    MOB,
    BOSS,
    EXTRA_BOSS,
    }


    とかってcsファイルを作って、以下のように使えます。

    [TestBattle.cs]


    ・・・・・

    switch(enemyType){
    case EnemyType.MOB:
    // 処理
    break;
    case EnemyType.BOSS:
    // 処理
    break;
    case EnemyType.EXTRA_BOSS:
    // 処理
    break;
    }

    ・・・・・



    どこのクラスにenumあったっけなぁ~ とかいうのがなくなりますよ!

    あ、もちろん同じ系統のenumをまとめたクラスとかでもいいんですが、ゲーム全体で使ったりするenumとかは、こうしておくとわかりやすくて便利かも?
    作りによるとは思いますが・・・・


    ってことで、enumの使い方の一つを紹介でした!
    では、あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】マウスや指を動かした角度が知りたかった 

    こんにちは。
    大坂です。

    マウスや指を動かした角度が知りたかった時のお話です。
    簡単に言うと、開始位置を取得して、動かした差分を計算してそれを角度に変換する感じです。
    コード。
        Vector2 startPos;
    Vector2 endPos;

    void Update()
    {
    TestSwipeAngle();
    }

    private void TestSwipeAngle()
    {
    if(Input.GetMouseButtonDown(0))
    {
    startPos = Input.mousePosition;
    }
    if(Input.GetMouseButtonUp(0))
    {
    endPos = Input.mousePosition;

    var distance = endPos - startPos;
    float rad = Mathf.Atan2(distance.x,distance.y) * Mathf.Rad2Deg;
    Debug.Log(rad);
    }
    }

    180度~-180度の表記になってしまうのでそれが嫌な場合は

    if(rad < 0)
    {
    rad += 360;
    }

    と、してあげれば0度~360度で表記されますよ!

    ということで、いろいろ試しているときに取得したかったのでメモがてらネタに。
    ではまたノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】パーティクルにBloomを指定したらキレイになった!Unity2019でPostProsessingを使ってみたよ。 

    おはようございます。坂内っす。
    今日は涼しくて過ごしやすい感じですね。また明日30度超えるらしいですが・・・・

    今週末には野毛会があります。
    台風どんな感じになるか分かりませんが、アプリ作ってたり作らされてたりしてる方はどうぞご参加くださいませ。

    https://atnd.org/events/109222?k=ce0019f21ffba7354041db2f2a49f004

    さてUnityのお話。

    Unityでパーティクルとかを光らせる方法。
    現在使ってるUnityはUnity2019.1.8f1。

    PostProsessingのBloomを使ってエフェクトを光らせてみます。



    例えばこんなパーティクルがあります。

    こいつを光らせたい。

    そんな時は以下の手順で光ります。

    ①Window>PackageManager



    ②Post ProsessingをInstall



    ③CameraにPost Prosess LayerとPost Prosess Volumeを追加



    ④PostProsesLayerのLayerに光らせたいLayerを指定、ProsessVolumeのIsGrobalにチェックを入れ、AddEffectでBloomを選択し、Intensityを好きな数値にする。





    これだと背景も光ってしまうので、CameraをDepthOnlyにしてみます。


    PostProsessLayerで指定したLayerをCameraに指定します。
    そのカメラが映しているオブジェクトにBloomが効く感じのようです。

    ということで、Bloomのやり方でした!あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】いつからかInspectorを2つ開いて実行するとエラーになった 

    こんにちは。
    大坂です。

    Unityで実行ボタンを押したら見慣れない
    「ArgumentException: Object at index 0 is null」ってエラーが出たなぁと思ったときのお話です。


    一時停止ボタンを解除したらそのまま実行されるのですが、
    毎回押すのも面倒なのでちょっと調べてみたら、
    Unity2019.1とか2019.2とかでInspectorを2個開いてるとエラーになるみたいですね。
    https://issuetracker.unity3d.com/issues/argumentexception-object-at-index-0-is-null-thrown-when-entering-play-mode-with-two-inspector-windows-and-an-attached-script

    1個にしたらエラーでないよーと書いてありましたが、1個にしても出てくることがありました。
    1個にしても出てくる場合はInspectorを全部閉じてから1個追加したらエラーが出ないで実行できるようになります。

    エラーが出ないバージョンを調べていませんが、こんなエラーが出たら試してみてください。

    ではまたノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0