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やらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

     

    【ハルシオンブログ】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