個人ゲーム開発スタジオ

個人開発しているゲームの情報発信をします。

ToTheMoon! プライバシーポリシー

プライバシーポリシー

このページは、ryoEn64(以下「私」と言います。)が提供するスマートフォンアプリ「ToTheMoon! 」(以下「本アプリ」と言います。)における利用者情報の取扱いについて、以下のとおりアプリケーション・プライバシーポリシー(以下「本ポリシー」といいます。)を定め、公表しております。本アプリをインストールする前に本ポリシーをご確認いただき、内容をご理解の上で本アプリをご利用下さい。 なお、本ポリシーにおいて、「利用者情報」とは、お客様の識別に係る情報、通信サービス上の行動履歴、その他お客様のスマートフォンにおいてお客様と結びついた形で生成、利用又は蓄積されている情報であって、本ポリシーに基づき当社が取得するものを意味するものとします。 本アプリが利用する利用者情報

本アプリが利用する利用者情報は、下記の3つです。 アプリの広告表示のためにお客様の情報の一部を送信する可能性があります アプリではアクセス解析ツールを用いてアプリの利用状況を収集しております 問い合わせの際に利用者情報の一部を送信します。 広告表示、アクセス解析ツールにはGoogle Admob、Google Analyticsを使用しております それらのサービスが利用している利用者情報と目的についてはGoogle社のプライバシーポリシーをご確認ください。 Privacy Policy – Privacy & Terms – Google 問い合わせの際の利用者情報はご対応のために利用されます。 免責事項

利用上の不具合、不都合に対して可能な限りサポートを行なっておりますが、利用者が本アプリを利用して生じた損害に関して、開発元は責任を負わないものとします。

Unity Editor拡張 値変更可能なプログレスバー(SlidableProgressbar)

AttributeとPropertyDrawerを用いて下記のようなInspector表示をできるようにしました。

完成品サンプル

SlidableProgressbar

備忘録ついでに作り方を解説していきます。

attributeクラスの作成

[AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Property, AllowMultiple = true)]
public class SlidableProgressbarAttribute : PropertyAttribute
{
    public string label = "";
    public float maxValue = 1f;
    public string maxValueProperty;
    public EditorColor barColor = EditorColor.Green;
    public EditorColor backgroundColor = EditorColor.Gray;

    public Dictionary<string, bool> mouseState = new Dictionary<string, bool>();

    public SlidableProgressbarAttribute
    (
        float maxValue = 1f,
        string label = "",
        string maxValueProperty = null,
        EditorColor barColor = EditorColor.Unknown,
        EditorColor backgroundColor = EditorColor.Unknown
    )
    {
        this.maxValue = maxValue;
        this.label = label;
        this.maxValueProperty = maxValueProperty;
        this.barColor = barColor == EditorColor.Unknown ? this.barColor : barColor;
        this.backgroundColor = backgroundColor == EditorColor.Unknown ? this.backgroundColor : backgroundColor;
    }
}

Attributeで引数を持たせて見た目のカスタマイズをできるようにしています。
barColorやbackgroundColorはそのままColorを引数としたいのですが、Attributeの引数では指定できないのでEnumを引数とし、別でEnumからColorに変換するクラスを用意します。

●propertydrawerの作成

inspectorに実際に表示する部分を作ります。
ここではポイントとなる部分だけ抜粋してますが、記事の末尾に全体を載せておきます。

やっているのは、下記の3つですね。
GUI.Boxを使ってプログレスバーの見た目を背景とバー部分に分けて描画. ②Event.currentを使用してUnityEditor上でのマウスクリックやクリック座標を取得し、値を変更させる。
③好みの見た目になるようにデコる。

[CustomPropertyDrawer(typeof(SlidableProgressbarAttribute))]
[CustomPropertyDrawer(typeof(IntSlidableProgressbarAttribute))]
public class SlidableProgressbarDrawer : PropertyDrawer
{

    Type _valueType { get => attribute.GetType(); }
    SlidableProgressbarAttribute _attribute { get => (SlidableProgressbarAttribute)attribute; }
    SerializedProperty _targetProperty;

    const float _barSizeRate = 1.5f;
    static Vector2 NullVector = new Vector2(-1, -1);


    public override void OnGUI(Rect rect, SerializedProperty property, GUIContent label)
    {
        〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜    
  labelRect,backRect,barRectなどの計算   
        〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜       
 
        // backRect内のどこをマウスでクリック・ドラッグしたかによって0〜1のVector2を返す。
   // マウス状態の保持のためにpropertyPathも渡しておく
   // 今回は対応していないが、縦向きのプログレスバーを表示することもあるかもしれないのでVector2で受けておく
        Vector2 delta = GetProgress(backRect, property.propertyPath);

        // ラベルの描画
   // LabelString() は_attibute.labelまたはフィールド名を取得する関数
        GUI.Label(labelRect, $"{LabelString()}", CustomStyle.TextStyle(TextAnchor.MiddleLeft));

        // Progressbarの描画(int型)
   // float型もやることは同じ
        if (_valueType == typeof(IntSlidableProgressbarAttribute))
        {
     // マウスのイベントが発生かつ有効値であるかどうかを判定(NullVectorかどうかのチェックだけでも問題ないはず)
     // 有効値なら値を変更
            if (Event.current.isMouse && delta != NullVector)
            {
                property.intValue = Mathf.RoundToInt(delta.x * MaxValueInt());
            }
     // プログレスバーの背景
            GUI.Box(backRect, GUIContent.none, CustomStyle.ColorBox(_attribute.backgroundColor.GetColor()));
     // プログレスバーの本体
            if (barRect.width != 0)
                GUI.Box(barRect, GUIContent.none, CustomStyle.ColorBox(_attribute.barColor.GetColor()));
     // プログレスバーのラベル(現在値/最大値 )
            GUI.Label(backRect, $"{property.intValue}/{MaxValueInt()}", TextStyle());
        }
        〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜       
        〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜       

    }

   private Vector2 GetProgress(Rect targetRect, string propertyPath)
    {

        if (!Event.current.isMouse) return NullVector;

        switch (Event.current.type)
        {
            case EventType.MouseDown:
                SetMouseState(propertyPath, IsClickControl(targetRect));
                break;
            case EventType.MouseUp:
                if (Event.current.button == 0)
                {
      // _attribute.mouseStateにマウスダウンしていることを保持させる。
                    SetMouseState(propertyPath, false);
                }
                break;
        }


        if (GetMouseState(propertyPath))
        {
            return new Vector2(
                Math.Min(1f, MathF.Max(0f, (Event.current.mousePosition.x - targetRect.x) / targetRect.width)),
                Math.Min(1f, MathF.Max(0f, (Event.current.mousePosition.y - targetRect.y) / targetRect.height))
                );
        }
        else
        {
            return NullVector;

        }

    }

●詰まった点

PropertyDrawerを使用すると、Drawerが呼ばれる度に変数が初期化されるようです。
そのため、SlidableProgressbarAttributeでマウスクリックされた状態かどうかを保持するDictionary(mouseState)を用意しています。
PropertyPathをキーにすることでリスト表示した時にうまいこと表示してくれるようになります。

●使用例

 使用したい変数に下記のようなAttribute属性をつけるだけです。

public class ProgressBarSample : MonoBehaviour
{
    //Property から最大値を取得するfloat型
    [SlidableProgressbar(maxValueProperty = "floatMaxValue")]
    [SerializeField] float floatProgress;

    // 固定で最大値をしていするint型
    [IntSlidableProgressbar(maxValue = 5)]
    [SerializeField] int intProgress;
    // float型の最大値。Serialize可能な状態にしておく必要がある。
    [SerializeField] float floatMaxValue = 10;
}

作っておいてなんですが、通常はSliderを使えば機能的には十分だと思います。
でもやっぱり自分好みの見た目や少しでもみやすいようにしておくことでモチベ維持や開発の効率化につながるので積極的にEditor拡張していきたいですね。

GiftNote プライバシーポリシー

【個人情報保護方針】

 以下の通り個人情報保護方針を定め、個人情報保護の重要性の認識と取り組みを徹底することで個人情報の保護を推進します。

 

【個人情報の管理】

 利用者の個人情報を正確かつ最新の状態に保ち、個人情報の不正アクセス・紛失・破損・改竄・漏洩などを防止するため、セキュリティシステムの維持・管理の徹底等の必要な措置を講じ、安全対策を実施し個人情報の厳重な管理を行います。

 

【個人情報の利用目的】

 ご意見・ご要望・問い合わせ時に利用者のお名前やメールアドレスをご登録いただく場合がありますが、これらの個人情報はそれ以外の目的で利用することは致しません。

 

【個人情報の第三者への開示・提供の禁止】

 運営者は、利用者よりお預かりした個人情報を適切に管理し、以下のいずれかに該当する場合を除いて個人情報を第三者へ開示することは致しません。

 ・利用者の同意を得られた場合

 ・法令に基づき、開示する必要性がある場合

 ・利用者が希望されるサービスを行うために、運営者が業務委託をする業者に対して開示を行う場合

 

【個人情報の安全対策】

 運営者は個人情報の正確性及び安全性確保のためにセキュリティに万全の対策を講じています。

 

【法令・規範の遵守と見直し】

 運営者は保有する個人情報に関して適用される日本の法令、その他規範を遵守すると共に、本ポリシーの内容を適宜見直し、その改善に努めます。

 

【お問い合わせ】

 個人情報の取り扱いに関するお問い合わせは下記のメールアドレスまでご連絡ください。

 giftnoteapp@gmail.com

 

 

Google Admob プライバシーポリシー対応

IOSアプリのリリース準備において、プライバシーポリシーの設定に戸惑ったので備忘録。

GoogleAdmobを導入している場合、下記のページに記載されている項目をチェックする必要がある。

developers.google.com

 

こういった情報を公開してくれているのは非常に助かります。

「脳内ぷちぷち」プライバシーポリシー

プライバシーポリシー

このページは、ryoEn64(以下「私」と言います。)が提供するスマートフォンアプリ「脳内ぷちぷち」(以下「本アプリ」と言います。)における利用者情報の取扱いについて、以下のとおりアプリケーション・プライバシーポリシー(以下「本ポリシー」といいます。)を定め、公表しております。本アプリをインストールする前に本ポリシーをご確認いただき、内容をご理解の上で本アプリをご利用下さい。
なお、本ポリシーにおいて、「利用者情報」とは、お客様の識別に係る情報、通信サービス上の行動履歴、その他お客様のスマートフォンにおいてお客様と結びついた形で生成、利用又は蓄積されている情報であって、本ポリシーに基づき当社が取得するものを意味するものとします。

本アプリが利用する利用者情報

本アプリが利用する利用者情報は、下記の3つです。

  • アプリの広告表示のためにお客様の情報の一部を送信する可能性があります
  • アプリではアクセス解析ツールを用いてアプリの利用状況を収集しております
  • 問い合わせの際に利用者情報の一部を送信します。

広告表示、アクセス解析ツールにはGoogle Admob、Google Analyticsを使用しております

それらのサービスが利用している利用者情報と目的についてはGoogle社のプライバシーポリシーをご確認ください。

Privacy Policy – Privacy & Terms – Google

問い合わせの際の利用者情報はご対応のために利用されます。

免責事項

利用上の不具合、不都合に対して可能な限りサポートを行なっておりますが、利用者が本アプリを利用して生じた損害に関して、開発元は責任を負わないものとします。