FC2ブログ
    03 «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.» 05

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

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

     

    【ハルシオンブログ】Listから条件を指定してオブジェクトを取り出すFindの使い方の紹介 

    おはようございます。坂内っす。
    今週末からゴールデンウィークですね!
    コロナのせいでなにもできないGWになりそうですが!

    さて、C#でList中のものを条件を指定して、取り出す方法として、Findがあります。
    Find、FindAll、FindLastを簡単に紹介。


    [Blog0426.cs]

    using System.Collections.Generic;
    using UnityEngine;

    public class Blog0426 : MonoBehaviour
    {
    void Start() {
    var list = new List<string>() { "あいう", "かきくけこ", "たなか", "やまぐち", "たちかわ" };

    // 3文字のものを取得
    Debug.Log("3文字のものをはじめから: " + list.Find(s => s.Length == 3));

    // 3文字のものを取得(後ろから)
    Debug.Log("3文字のものを後ろから : " + list.FindLast(s => s.Length == 3));

    // 3文字のものをすべて取得
    var all3obj = list.FindAll(s => s.Length == 3);

    Debug.Log("3文字全部: ");
    foreach (var obj in all3obj) {
    Debug.Log("{0} " + obj);
    }

    // "か"を含むすべてを取得
    var allKAobj = list.FindAll(s => s.Contains("か"));

    Debug.Log("かが含まれる全部: ");
    foreach (var obj in allKAobj) {
    Debug.Log("{0} " + obj);
    }
    }
    }



    上記のコードを実行するとこんな感じになります。



    それぞれの条件で取り出せてますね。

    ということで、Listから指定したオブジェクトの取り出し方の紹介でしたー

    あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】UnityEditorのちょっとしたショートカット紹介 

    こんにちは。
    大坂です。

    このところ暑いですね。
    もう夏が来たんでしょうか…?

    さて、今週はUnityEditorのちょっとしたショートカットの紹介です。

    ①選択中のオブジェクトのPrefabRootを選択
    ショートカット:Ctrl + Shift + R

    ※画像クリックで動きます。

    これ位だったら必要ないですけど、すごい階層が深かったり、
    いろんなオブジェクトを置いてるとプレハブの元のオブジェクトを探すのが大変なときがあるので少し使えますね。

    ②アセットのパスをコピー
    ショートカット:Ctrl + Alt + C

    ちなみにこれは右クリックメニューにもありますね。


    ③コンソールを開く
    ショートカット:Ctrl + Shift + C
    閉じるときは、Alt+F4。

    ※画像クリックで動きます。

    広い画面なら出しっぱなしでもいいんですけどね~。

    ということで少し使っているショートカットの紹介でした。
    ではまたノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】新しく作ったクラスのオブジェクトがInspectorに表示されないときは、Serializeアトリビュートをつけましょう! 

    こんにちは。坂内っす。

    めっちゃいい天気で散歩に出たい感じっすね。
    今頃の天候が一年で一番気持ちいいのでは?気温もイイ感じです。

    新しく作ったクラスがInspectorに表示されないとかってことありませんか?

    [Blog0419.cs]

    using UnityEngine;

    public class Blog0419 : MonoBehaviour
    {
    public class TestClass0419 {
    public int testClassInt;
    public float testClassFloat;
    }

    public int testInt;
    public TestClass0419 testClass;

    }



    こんなコードの場合は、Inspectorはこんな感じ。


    public TestClass0419 testClass;
    パブリックにしてるのにクラスの中身がInspectorででないよー!

    そんな時はこうすれば出ますよ。

    [Blog0419.cs]

    using UnityEngine;

    public class Blog0419 : MonoBehaviour
    {
    [System.Serializable]
    public class TestClass0419 {
    public int testClassInt;
    public float testClassFloat;
    }

    public int testInt;
    public TestClass0419 testClass;

    }



    作ったクラスに[System.Serializable]を追加します。



    これでTestClass0419のオブジェクトの中身がInspectorに出るようになります。

    ということで、素敵なInspectorライフを!

    あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】C#8でswitchが短く書けますね。 

    こんにちは。
    大坂です。

    switchってC#8で少し短く書けるようになったんですね。

    C#7までは大体こんな感じで書いてますかね。

    public void SwitchTest(int i) {
    string test = "";
    switch (i) {
    case 0:
    test = "test_0";
    break;
    case 1:
    test = "test_1";
    break;
    case 2:
    test = "test_2";
    break;
    case 3:
    test = "test_3";
    break;
    default:
    test = "test";
    break;
    }
    }

    C#8からできる書き方

    public void SwitchTest(int i) {
    string test = i switch
    {
    0 => "test_0",
    1 => "test_1",
    2 => "test_2",
    3 => "test_3",
    _ => "test"
    };
    }

    だいぶすっきり書けるようになってますね。
    最初は見慣れなそうですが、使っていこうかなと思います。

    それでは今週もこれにてノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】Mathf.Clampって使ってますか?ゲーム作ってると意外と使うやーつ。 

    こんにちは。坂内っす。
    もうだいぶ春になりましたね。
    暖かい日が続いています。
    このまま夏になればコロナも少しは落ち着いてくるんでしょうか・・・


    Unityでゲームを作る上で、Mathf.Clampって結構使いますよね?

    簡単なMathf.Clampのお話をしようと思います。


    Mathf.Clampとはなんでしょうか?
    【リファレンス】
    https://docs.unity3d.com/jp/current/ScriptReference/Mathf.Clamp.html

    最小と最大の値を設定し、その範囲内に値を制限するやつです。

    「HPは0以上でマイナスにはならない」や、「攻撃したときのダメージは攻撃力ー防御力だけど、0以下にはならない」とか、●以上●以下という制限をするときに使います。
    (0以上とかばっかりでわかりにくいかも)


    int attackBase = 100; // 攻撃力は100
    int def = 100; // 防御力は100

    // 攻撃力はベース攻撃力±ブレが2割
    int atkPower = attackBase + Mathf.Round(Random.Range(-attackBase * 0.2f, attackBase * 0.2f));
    int damage = Mathf.Clamp(atkPower - def, 0, 99999);


    最大ダメージはいい感じにするとして、こんな感じの計算式にすると、ダメージが0未満にはならないので、防御力のほうが高いときにHPが回復といったことがなくなります。

    ほかにもキャラの移動の際に、画面端を考慮した場合に、X座標がいくつからいくつまでしか移動できない等の制御にも使えますよね!

    ゲームは結構●~●までの制限というのがあると思うので、使う機会は色々ありそうですね!

    ってことで、今日はこれだけ!

    あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】Randomって結構いろんなのが取れますよね。 

    こんにちは。
    大坂です。

    Randomは結構使いますけど大体「Range」で済ませていますが、結構いろんなAPIが準備されているんですね。
    とりあえずコード

    // 1-10の間
    int range = Random.Range(0, 10);
    // 0f-1fの間
    float value = Random.value;
    // 半径1の円内部のランダム
    Vector2 circle = Random.insideUnitCircle;
    // 半径1の球内部のランダム
    Vector3 sphere = Random.insideUnitSphere;
    // ランダムな角度
    Quaternion rotation = Random.rotation;
    // ランダムな色
    Color color = Random.ColorHSV();

    Debug.Log($"Range:{range}");
    Debug.Log($"Value:{value}");
    Debug.Log($"Circle:{circle}");
    Debug.Log($"Sphere:{sphere}");
    Debug.Log($"Rotation:{rotation}");
    Debug.Log($"Color:{color}");


    こんな感じのが取れるみたいですね。
    一応結果です。


    こんなのがあると思うとどこかで使えることもあるかもしれませんね。
    ではまたノシ

    Category: Androidアプリ紹介

    tb 0 : cm 0   

    【ハルシオンブログ】オブジェクトの中のコンポーネントの順番をスクリプトから替えれるらしいのです。ってことでやってみた。 

    2021年ももう4月になってしまいました…
    恐ろしい速度で日が過ぎていきます・・・・

    さてUnityで「こんな機能どこで使うんだろう・・・?」ってスクリプトがあったので紹介(?)

    コンポーネントの順番を並び替える方法です。

    UnityEditorInternal.ComponentUtility.MoveComponentUp(コンポーネント)
    UnityEditorInternal.ComponentUtility.MoveComponentDown(コンポーネント)

    という二つがあるのですが、これ何に使うんでしょう?

    using UnityEngine;
    using UnityEngine.UI;

    public class Blog0405 : MonoBehaviour
    {
    [SerializeField] GameObject image;
    [SerializeField] Button btnChangeSort;

    bool isImageUp = true;

    private void Start() {
    btnChangeSort.onClick.AddListener(OnClickChangeSort);
    }

    void OnClickChangeSort() {
    if (isImageUp) {
    UnityEditorInternal.ComponentUtility.MoveComponentUp(image.GetComponent<CanvasGroup>());
    isImageUp = false;
    } else {
    UnityEditorInternal.ComponentUtility.MoveComponentUp(image.GetComponent<Image>());
    isImageUp = true;
    }
    }
    }




    ボタンを押すと青いImageの中のコンポーネントの順序が変わるといった感じです。
    ImageのオブジェクトにはImageコンポーネントと、CanvasGroupのコンポーネントをつけておきました。



    こんな感じ。

    ボタンを押すたびにコンポーネントの順番が変わるんです…ええ 変わるんです。

    何に使うんでしょうか・・・・??

    ということで、いらない機能「コンポーネントの順番を変える」の紹介でした。

    あでゅ~ノシ


    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】配列に特定の値を入れて初期化するときパート2 

    こんにちは。
    大坂です。

    以前「配列に特定の値を入れて初期化するとき」という記事を書きましたが似たようなやつ。

    前回は「Repeat」を使って同じ数字をいれましたが、
    今回は「Range」を使って指定の範囲内の整数シーケンスを作るやつ。

    簡単ですが使い方。

    var test_1 = Enumerable.Range(1, 9);
    var test_2 = Enumerable.Range(100, 3)
    Debug.Log(string.Join(",", test_1));
    Debug.Log(string.Join(",", test_2));


    ・1を起点に9個分
    ・100を起点に3個分
    の整数シーケンスを作る感じですね。

    結果。


    何かに使えるかもしれないので紹介でした。
    では今週もこれにてノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0