bluebirdofoz.hatenablog.com Open in urlscan Pro
35.75.255.9  Public Scan

Submitted URL: http://bluebirdofoz.hatenablog.com/
Effective URL: https://bluebirdofoz.hatenablog.com/
Submission: On May 08 via api from US — Scanned from JP

Form analysis 1 forms found in the DOM

GET https://bluebirdofoz.hatenablog.com/search

<form class="search-form" role="search" action="https://bluebirdofoz.hatenablog.com/search" method="get">
  <input type="text" name="q" class="search-module-input" value="" placeholder="記事を検索" required="">
  <input type="submit" value="検索" class="search-module-button">
</form>

Text Content

MRが楽しい
読者になる


MRが楽しい


MRやVRについて学習したことを書き残す

2024-05-07


UNITYのSLIDERを一定間隔ごとにスライドさせる

本日はUnityの小ネタ枠です。
UnityのSliderを一定間隔ごとにスライドさせる方法についてです。


SLIDER

UnityのSliderオブジェクトはHierarchy上で右クリックから[UI -> Slider]で追加できます。
docs.unity3d.com


デフォルトではSliderの値は0~1のfloat値を返します。
このため、ハンドル部分はドラッグ操作に合わせてスムーズに移動します。




SLIDERを一定間隔で移動させる

Sliderを一定間隔で移動させるには[Whole Numbers]にチェックを入れ、[Max Value]を区切りたい間隔の数+1の整数値を入力します。
例えば、Sliderを5つに区切った間隔で移動させたい場合は[Max Value]に 4 を入力します。


[Whole Numbers]はSliderの値を整数値に制限するチェックです。
これにより、Sliderは上記の例では 0, 1, 2, 3, 4 の値のみに制限されるため、ハンドルが5つに区切った間隔ごとに移動するようになります。


Sliderが返す値の範囲が変わる点に注意してください。
必要な場合は取得した値を[Max Value]で除算するなどして値を0~1の値に正規化します。

ホロモン (id:bluebirdofoz) 23時間前 読者になる




広告を非表示にする

 * もっと読む

コメントを書く
2024-05-06


UNIRXを使ってUNITYのスライダーUIの値の変化をチェックする

本日は UniRx の小ネタ枠です。
UniRxを使ってUnityのスライダーUIの値の変化をチェックする方法を記事にします。


OBSERVEEVERYVALUECHANGED

ObserveEveryValueChangedはUniRxで定義されている全クラスの拡張メソッドです。
この関数を利用することで、様々なクラスのフレーム間での値変化の監視が行えるようになります。

例えば以下のようにSliderクラスのObserveEveryValueChangedでSlider.valueを監視対象に指定すると、スライダーの値が変化したときに実行する処理を定義することができます。

Slider _slider = GetComponent<Slider>();
_slider.ObserveEveryValueChanged(slider => slider.value)
    .Subscribe(value => {
        // スライダー変化時の処理を定義
        });



サンプルスクリプト

指定のスライダーが操作されたときに値をデバッグログに表示する以下のサンプルスクリプトを作成しました。
・SliderReactiveTest.cs

using UnityEngine;
using UnityEngine.UI;
using UniRx;

public class SliderReactiveTest : MonoBehaviour
{
    /// <summary>
    /// スライダーの参照
    /// </summary>
    [SerializeField] Slider _slider;
    
    void Start()
    {
        // UniRxのObserveEveryValueChangedを使ってスライダーの値の変化を監視する
        _slider
            // 毎フレーム slider.value の変化を監視する
            .ObserveEveryValueChanged(slider => slider.value)
            // 変化があれば値をログに出力する
            .Subscribe(value => Debug.Log($"Slider Value: {value}"));
    }
}




シーンを再生してスライダーを操作します。
スライダーの現在の値が操作と同時にデバッグログに出力されれば成功です。


ホロモン (id:bluebirdofoz) 2日前 読者になる




広告を非表示にする

 * もっと読む

コメントを書く
2024-05-05


UNITYのINSPECTORビューに自作のデータ形式を表示する

本日はUnityの小ネタ枠です。
UnityのInspectorビューに自作のデータ形式(struct, class, record)を表示する方法についてです。


カスタム製のシリアル化

[System.Serializable]属性を利用することで自作のデータ形式をシリアル化することができます。
これにより、Unityがサポートしていない形式のデータをInspectorビュー上から確認・編集することができます。
docs.unity3d.com
docs.unity3d.com



サンプルスクリプト

以下の[System.Serializable]属性を設定した自作のデータ形式を用意しました。
・HumanEntity.cs

// カスタムクラスをシリアライズする
[System.Serializable]
public record HumanEntity
{
    // 名前
    public string Name;
    
    // 年齢
    public int Age;
}


カスタムクラスをプロパティで保持するMonoBehaviourを作成して動作を確認します。
・InspectorSerializeTest.cs

using UnityEngine;

public class InspectorSerializeTest : MonoBehaviour
{
    // カスタムクラス
    [SerializeField] HumanEntity _humanEntity;
    
    void Start()
    {
        _humanEntity = new HumanEntity{ Name = "太郎", Age = 20, };
    }
}


以下の通り、カスタムクラスの情報をInspectorビューから参照できるようになりました。


ホロモン (id:bluebirdofoz) 2日前 読者になる




広告を非表示にする

 * もっと読む

コメントを書く
2024-05-05


UNITY環境での各種データ型の最小値から最大値を確認する

本日はUnityの小ネタ枠です。
Unity環境での各種データ型の最小値から最大値を確認する方法についてです。


各種データ型の最小値から最大値を確認する

Unityがサポートするプログラミング言語はC#のため、数値型の利用可能なデータ範囲はC#に依存します。
C#で使用される型の最小値または最大値はMinValue, MaxValueフィールドで取得できます。
learn.microsoft.com
learn.microsoft.com



サンプルスクリプト

以下の各型の最小値、最大値を調べるスクリプトを作成しました。

using TMPro;
using UnityEngine;

public class MaxValueTest : MonoBehaviour
{
    /// <summary>
    /// 出力先のテキスト参照
    /// </summary>
    [SerializeField] TMP_Text _text;
    
    void Start()
    {
        // int, uint, long, ulong, float, double, decimalの最大値と最小値をテキストに出力する
        _text.text =
            $"int: {int.MinValue} - {int.MaxValue}\n\n" +
            $"uint: {uint.MinValue} - {uint.MaxValue}\n\n" +
            $"long: {long.MinValue} - {long.MaxValue}\n\n" +
            $"ulong: {ulong.MinValue} - {ulong.MaxValue}\n\n" +
            $"float: {float.MinValue} - {float.MaxValue}\n\n" +
            $"double: {double.MinValue} - {double.MaxValue}\n\n" +
            $"decimal: {decimal.MinValue} - {decimal.MaxValue}";
    }
}





型 最小値 最大値 int -2147483648 2147483647 uint 0 4294967295 long -9223372036854775808
9223372036854775807 ulong 0 18446744073709551615 float -3.402823E+38
3.402823E+38 double -1.79769313486232E+308 1.79769313486232E+308 decimal
-79228162514264337593543950335 79228162514264337593543950335

ホロモン (id:bluebirdofoz) 3日前 読者になる




広告を非表示にする

 * もっと読む

コメントを書く
2024-05-03


UNITYのTEXTMESHPROでアウトラインを表示する

本日はUnityの小ネタ枠です。
UnityのTextMeshProでアウトラインを表示する方法です。


OUTLINE

TextMeshProのアウトラインの設定はTextコンポーネントを設定したオブジェクトのマテリアルから設定できます。



[Outline -> Thickness]の値を1に寄せるほどアウトラインが表示されます。
0のときアウトラインは表示されません。


アウトラインを表示した状態で[Face -> Color]の色のアルファ値を0にして透明にすることで文字を中抜きしてアウトラインのみを表示することができます。


以下の通り、[Face -> Color]と[Outline -> Color]を変更することで文字の内側とアウトラインを別々の色に設定することも可能です。


ホロモン (id:bluebirdofoz) 4日前 読者になる




広告を非表示にする

 * もっと読む

コメントを書く
2024-05-02


UNITYのスクリプトでユーザ名からYOUTUBEみたいな自動生成アイコンを作る

本日はUnityの小ネタ枠です。
Unityのスクリプトでユーザ名からYouTubeみたいな自動生成アイコンを作ってみたので記事にします。


ユーザ名からアイコンを自動生成する

ランダムな背景色にユーザ名の文字が書き込まれたユーザアイコンを生成するため、以下のImageとTextを組み合わせた下地となるUIオブジェクトを作成しました。



下地のImage画像はカラーが変更できるように以下のMaterial Design Iconsから白抜きの透過画像を取得しました。
pictogrammers.com

アイコンをカスタムしてダウンロードする方法の詳細は以下の記事を参照ください。
bluebirdofoz.hatenablog.com



サンプルスクリプト

ユーザ名の先頭1文字をTextとして抜き出し、ユーザ名を基に背景色を決定する以下のサンプルスクリプトを作成しました。
背景色が完全にランダムだとテキスト文字が見えづらくなることがあったので、サンプルの10色から選択する形にしています。
・UserIconMakerTest.cs

using TMPro;
using UnityEngine;
using UnityEngine.UI;

namespace SisTuber.View.BroadcastScene.CommentPanel.CommentList
{
    public class UserIconMakerTest : MonoBehaviour
    {
        /// <summary>
        /// 自動生成ユーザアイコンの背景
        /// </summary>
        [SerializeField] Image _autoIconBackground;
        
        /// <summary>
        /// 自動生成ユーザアイコンのテキスト
        /// </summary>
        [SerializeField] TMP_Text _autoIconText;

        /// <summary>
        /// ユーザ名
        /// </summary>
        [SerializeField] private string _userName = "ユーザ";

        void OnValidate()
        {
            MakeUserIcon(_userName);
        }

        private void MakeUserIcon(string userName)
        {
            if (string.IsNullOrEmpty(userName)) userName = "Nothing";
            // 名前の1文字目をテキストに設定
            _autoIconText.text = userName.Substring(0, 1);
            // ユーザ名からハッシュ値を取得する
            uint userNameHash = (uint)userName.GetHashCode();
            // ハッシュ値を基に色を決定する
            Color iconColor = (userNameHash % 10) switch
            {
                0 => new Color(1f, 0.5f, 0.5f),  // 赤
                1 => new Color(0.5f, 1f, 0.5f),  // 緑
                2 => new Color(0.5f, 0.5f, 1f),  // 青
                3 => new Color(1f, 1f, 0.5f),  // 黄色
                4 => new Color(0.5f, 1f, 1f),  // 空色
                5 => new Color(1f, 0.5f, 1f),  // ピンク
                6 => new Color(1f, 0.75f, 0.5f),  // オレンジ
                7 => new Color(0.75f, 0.5f, 1f),  // 紫
                8 => new Color(0.5f, 1f, 0.75f),  // 黄緑
                9 => new Color(0.75f, 0.75f, 0.75f),  // グレー
                // 上記以外は例外
                _ => throw new System.Exception("Invalid color")
            };
            _autoIconBackground.color = iconColor;
        }
    }
}


スクリプトをシーンに配置し、ImageとTextの参照を設定して準備完了です。


入力したユーザ名に応じてアイコンが自動生成されます。


ホロモン (id:bluebirdofoz) 5日前 読者になる




広告を非表示にする

 * もっと読む

コメントを書く
2024-05-01


C#で3桁ごとにカンマを表示する形式で数値を文字列表示する

本日はC#の小ネタ枠です。
3桁ごとにカンマを表示する形式で数値を文字列表示する方法についてです。


3桁ごとにカンマを表示する形式で数値を文字列表示する

3桁ごとにカンマを表示する形式で数値を文字列表示するには ToString か String.Format を利用する方法があります。


TOSTRINGを用いる場合

ToStringを用いる場合は書式指定子 N を使用することで3桁ごとにカンマを挿入した文字列に変換できます。
N0の場合、小数点以下は表示されず整数で表示されます。

int value = 1234;
string result = value.ToString("N0");



STRING.FORMATを用いる場合

String.Formatを用いる場合は書式指定項目に {0:#,0} を使用することで3桁ごとにカンマを挿入した文字列に変換できます。
{0:#,0} は指定された数値の整数部分の数値グループ(3桁ごとの数値)の間に桁区切り文字 ,(カンマ) を挿入することを意味します。

int value = 1234;
string result = String.Format("{0:#,0}", value);



サンプルスクリプト

それぞれの方法を使うサンプルスクリプトを作成して動作を確認してみます。
・CommaPointTest.cs

using System;
using TMPro;
using UnityEngine;

public class CommaPointTest : MonoBehaviour
{
    [SerializeField] TMP_Text _text1;
    [SerializeField] TMP_Text _text2;
    [SerializeField] TMP_Text _text3;
    [SerializeField] TMP_Text _text4;
    
    void Start()
    {
        _text1.text = GetCommaStringByToString(1234);
        _text2.text = GetCommaStringByToString(1234567);
        _text3.text = GetCommaStringByStringFormat(1234);
        _text4.text = GetCommaStringByStringFormat(1234567);
    }
    
    private string GetCommaStringByToString(int value)
    {
        return value.ToString("N0");
    }
    
    private string GetCommaStringByStringFormat(int value)
    {
        return String.Format("{0:#,0}", value);
    }
}


以下の通り、どちらの方法でも3桁ごとにカンマを表示する形式で数値を文字列表示できました。


ホロモン (id:bluebirdofoz) 7日前 読者になる




広告を非表示にする

 * もっと読む

コメントを書く
次のページ

プロフィール
ホロモン (id:bluebirdofoz)

MRやVRについて学習したことを書き残す

読者です 読者をやめる 読者になる 読者になる
169
@HoloAdventureをフォロー
このブログについて

検索

リンク
 * 夜風のMixedReality

最新記事
 * UnityのSliderを一定間隔ごとにスライドさせる
 * UniRxを使ってUnityのスライダーUIの値の変化をチェックする
 * UnityのInspectorビューに自作のデータ形式を表示する
 * Unity環境での各種データ型の最小値から最大値を確認する
 * UnityのTextMeshProでアウトラインを表示する

月別アーカイブ
 * ▼ ▶
   2024 (128)
   * 2024 / 5 (7)
   * 2024 / 4 (30)
   * 2024 / 3 (31)
   * 2024 / 2 (29)
   * 2024 / 1 (31)
 * ▼ ▶
   2023 (365)
   * 2023 / 12 (31)
   * 2023 / 11 (30)
   * 2023 / 10 (31)
   * 2023 / 9 (30)
   * 2023 / 8 (31)
   * 2023 / 7 (31)
   * 2023 / 6 (31)
   * 2023 / 5 (30)
   * 2023 / 4 (30)
   * 2023 / 3 (31)
   * 2023 / 2 (28)
   * 2023 / 1 (31)
 * ▼ ▶
   2022 (372)
   * 2022 / 12 (32)
   * 2022 / 11 (29)
   * 2022 / 10 (31)
   * 2022 / 9 (30)
   * 2022 / 8 (38)
   * 2022 / 7 (31)
   * 2022 / 6 (30)
   * 2022 / 5 (31)
   * 2022 / 4 (30)
   * 2022 / 3 (31)
   * 2022 / 2 (28)
   * 2022 / 1 (31)
 * ▼ ▶
   2021 (365)
   * 2021 / 12 (31)
   * 2021 / 11 (30)
   * 2021 / 10 (31)
   * 2021 / 9 (30)
   * 2021 / 8 (31)
   * 2021 / 7 (31)
   * 2021 / 6 (30)
   * 2021 / 5 (31)
   * 2021 / 4 (30)
   * 2021 / 3 (31)
   * 2021 / 2 (28)
   * 2021 / 1 (31)
 * ▼ ▶
   2020 (367)
   * 2020 / 12 (31)
   * 2020 / 11 (30)
   * 2020 / 10 (31)
   * 2020 / 9 (30)
   * 2020 / 8 (31)
   * 2020 / 7 (31)
   * 2020 / 6 (30)
   * 2020 / 5 (32)
   * 2020 / 4 (30)
   * 2020 / 3 (31)
   * 2020 / 2 (29)
   * 2020 / 1 (31)
 * ▼ ▶
   2019 (366)
   * 2019 / 12 (31)
   * 2019 / 11 (31)
   * 2019 / 10 (31)
   * 2019 / 9 (30)
   * 2019 / 8 (31)
   * 2019 / 7 (31)
   * 2019 / 6 (30)
   * 2019 / 5 (31)
   * 2019 / 4 (30)
   * 2019 / 3 (31)
   * 2019 / 2 (28)
   * 2019 / 1 (31)
 * ▼ ▶
   2018 (383)
   * 2018 / 12 (31)
   * 2018 / 11 (30)
   * 2018 / 10 (31)
   * 2018 / 9 (30)
   * 2018 / 8 (38)
   * 2018 / 7 (31)
   * 2018 / 6 (30)
   * 2018 / 5 (31)
   * 2018 / 4 (33)
   * 2018 / 3 (32)
   * 2018 / 2 (28)
   * 2018 / 1 (38)
 * ▼ ▶
   2017 (289)
   * 2017 / 12 (31)
   * 2017 / 11 (40)
   * 2017 / 10 (32)
   * 2017 / 9 (30)
   * 2017 / 8 (32)
   * 2017 / 7 (33)
   * 2017 / 6 (28)
   * 2017 / 5 (29)
   * 2017 / 4 (34)

MRが楽しい

Powered by Hatena Blog | ブログを報告する




引用をストックしました

ストック一覧を見る 閉じる

引用するにはまずログインしてください

ログイン 閉じる

引用をストックできませんでした。再度お試しください

閉じる

限定公開記事のため引用できません。

読者です 読者をやめる 読者になる 読者になる
169