そういうのがいいブログ

アプリ個人開発 まるブログ

アプリ開発覚え書き

【Unity】ログインボーナスを作ってみる ローカル保存

ログインボーナスはサーバーから時間を取得した方が不正を防止できますが、

今回コスト面を考えて、

サーバー無しで不正ログインを検出する完全オレオレログインボーナスを作りました。

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class LoginBonus : MonoBehaviour
{
    private enum LOGIN_TYPE
    {
        FIRST_USER_LOGIN, //初回ログイン
        TODAY_LOGIN,      //ログイン
        ALREADY_LOGIN,    //ログイン済
        ERROR_LOGIN       //不正ログイン
    }

    private int todayDate = 0;
    private int lastDate;
    private LOGIN_TYPE judge_type;


     void Start()
    {
        DateTime now = DateTime.Now;//端末の現在時刻の取得        
        todayDate = now.Year * 10000 + now.Month * 100 + now.Day;//日付を数値化 2020年9月1日だと20200901になる

        //前回ログイン時の日付データをロード データがない場合はFIRST_USER_LOGINで0
        lastDate = PlayerPrefs.GetInt("LastGetDate", (int)LOGIN_TYPE.FIRST_USER_LOGIN);


        //前回と今回の日付データ比較
        
        if (lastDate < todayDate)//日付が進んでいる場合
        {
            judge_type = LOGIN_TYPE.TODAY_LOGIN;
        }        
        else if (lastDate == todayDate)//日付が進んでいない場合
        {
            judge_type = LOGIN_TYPE.ALREADY_LOGIN;
        }
        else if (lastDate > todayDate)//日付が逆転している場合
        {
            judge_type = LOGIN_TYPE.ERROR_LOGIN;
        }


        switch (judge_type)
        {
            //ログインボーナス
            case LOGIN_TYPE.TODAY_LOGIN:

                //初ログインボーナス lastDateに0が入っていたら処理実行
                if (lastDate == (int)LOGIN_TYPE.FIRST_USER_LOGIN)
                {
                    //初ログインボーナス処理
                }
                else
                {
                    //普通のログインボーナス処理
                }               

                break;

            //すでにログイン済み
            case LOGIN_TYPE.ALREADY_LOGIN:
                //なにもしない
                break;

            //不正ログイン
            case LOGIN_TYPE.ERROR_LOGIN:
                //不正ログイン時の処理
                break;
        }

        //今回取得した日付をセーブ
        PlayerPrefs.SetInt("LastGetDate", todayDate);
        PlayerPrefs.Save();
    }
}

【Unity】アプリストア掲載上限容量とアプリ容量軽くする施策まとめ

アプリ開発用にメモ

前知識

インストールにWifiが必要な容量

Google Play 100MB以上
App Store 200MB以上

掲載上限サイズ

Google play 100MB
 ただし、拡張ファイルを使用すればプラス4GB増やせる
 拡張ファイルは1アプリにつき2つまで、
 拡張ファイルは1つにつき2GBまで

App Store 4GB
 

削減内容

docs.unity3d.com

テクスチャのマックスサイズを変更

Max Sizeを変更 見栄えが許容できるまで落とす

メッシュ圧縮

メッシュ圧縮
(アニメーションデータのModelにも項目があるが容量は変化しなかった)

f:id:marumaro7:20200819071025p:plain:w200

アニメーション圧縮

最適になっていればOK

f:id:marumaro7:20200819070635p:plain:w200

テクスチャのアトラス化

kan-kikuchi.hatenablog.com

APP Bundleを使う (Google playのみ)

takoyaking.hatenablog.com

Google Playでどうしてもサイズ100MBを超えるときは

拡張ファイルを使う

「アプリケーションバイナリを分割」にチェック
これでも100MBを超える時は最初のシーンを容量の少ないものにする。

f:id:marumaro7:20200820064616p:plain:w300

Unity公式 docs.unity3d.com

公式アップロード方法

support.google.com

注意点

blog.ariari.biz

ついでにパフォーマンス向上

kan-kikuchi.hatenablog.com

【Unity】ユニティチャントゥーンシェーダー UTS2.0メモ

モバイルアプリ開発用に引用メモ

説明書

github.com

シェーダーの分類大枠

UTS2には、大きく分けて2つの系統のシェーダーがあります。

DoubleShadeWithFeather

UTS2の標準シェーダーです。
2つの影色(Double Shade Colors)と、
各々のカラーの境界にぼかし(Feather)を入れることができます。

ShadingGradeMap

高機能版のUTS2シェーダーです。
DoubleShadeWithFeatherの機能に加えて、
ShadingGradeMapという特別なマップを持つことができます。


UnityChanToonShader/Mobileフォルダ内のシェーダー

Mobileフォルダ内には、モバイルやVRコンテンツ向けに、
ほぼルックが替わらない程度に軽量化したシェーダーが入ってます。
モバイル版では、軽量化のために以下の仕様に制限しています。

・リアルタイムディレクショナルライト1灯のみの対応に制限しています
 (複数のライトや、リアルタイムポイントライトには反応しません)。

・ポイントライトへは、
 ベイク済みポイントライト+ライトプローブの組み合わせで対応します。
 その場合、GI_Intensity を適度に調整する必要があります。

通常版Toon_DoubleShadeWithFeathe系、Toon_ShadingGradeMap系各シェーダーとは
プロパティ互換がありますので、上記機能で十分な場合、
通常版と同名のMobile版シェーダーに切り替えるとレンダリングパフォーマンスが向上します。

Mobile/AngelRingフォルダ内には、「天使の輪」機能に対応したモバイル版シェーダーが入っています。 各シェーダーの基本機能は、通常版の同名のものと同じです。



シェーダー名による使い分け

シェーダー名の後ろ側には、Clippingなどの名前ブロックがあります。
これらは以下のような機能があることを示しています。

Clipping

クリッピングマスクを持てるシェーダー。
いわゆる「テクスチャの抜き」(カットアウトやディゾルブ)ができます。

TransClipping

同じくクリッピングマスクを持てますが、
マスクのα透明度(Transparency)を考慮した「テクスチャの抜き」ができます。
より綺麗な抜きができるぶん、負荷はClippingよりも高くなります。

StencilMask

ステンシルバッファによるパーツの透過を指定します。
「眉毛」パーツのアニメ的な表現で、常に「前髪」パーツよりも前面に表示したいような
場合などに使用するシェーダーです。必ずStencilOut系シェーダーと組み合わせて使います。

StencilOut

StencilMask系シェーダーと一緒に使います。
上の例だと、「眉毛」パーツを透過させる側である「前髪」パーツに設定するシェーダーです。

初期設定

File>Build Settings>Player Settings... より

Rendering Path⇒Forward
Color Space⇒Linear
を推奨します。リニアカラーの時、UTS2は最大限の能力を発揮できます。

リニアカラーへの設定変更 f:id:marumaro7:20200817080323p:plain

Rendering Pathはデフォルトでフォワードになっていた f:id:marumaro7:20200817081342p:plain

自分が使いそうな「Basic Shader Settings」メニュー

Culling Mode

ポリゴンのどちら側を描画しないか(カリング)を指定します。
・Culling Off(両面描画)
・ Front Culling(正面カリング)
・ Back Culling(背面カリング)
が選べます。
通常はBackで指定します。

Culling Offはノーマルマップやライティング表示がおかしくなる場合がありますので、
注意してください。

【Unity】Google Play リリース時設定は Android 10(API レベル 29)以上を対象にする必要有り

前回リリース設定時に少し時間とられたのでメモ

問題

グーグルプレイにリリースしようとしたら以下の警告が出て、申請できませんでした。

2020 年 8 月 3 日以降、新規のアプリは Android 10(API レベル 29)以上を
対象にする必要があります。

以下公式から引用

APIレベル29を対象

https://developer.android.com/distribute/play-policies?hl=ja

対策

ProjectSettings>Player>ターゲットAPIレベル>Automatic(highest installed)

Android10.0(API level 29)に変更するだけです。

API設定

Amazonアプリストア 棄却されました エラー内容

棄却

Amazonアプリストア 棄却

初めてAmazonアプリストアへ登録申請しました。

結果、棄却されてしまいました!!

中身を共有します。

marumaro7.hatenablog.com

棄却内容

棄却内容はこちら

Amazonコンテンツポリシーに準拠していないとのことです。

棄却

エラー内容を翻訳してみると

アプリにメタデータ[タイトル、アイコン、説明、スクリーンショット
キーワード]が含まれているため、コンテンツが別のモバイルアプリケーションの
コンテンツに似ているか、別の機能を提案しているため、
顧客を誤解させる可能性があります。

とのことでした。

脱出ゲームなのにRPGと書いているので誤解するでしょうね...

再提出

申請内容の中でRPGの脱出ゲームに関係ないような単顎は消して再申請しました!

結果

無事リリースすることができましたー。


Amazonさんから完了メールがきませんでした。(私だけ????)

1日経って「脱出 魔法勇者」で検索するとでてきました!!!

なんか嬉しい!!

魔法勇者

おわりに

Androidと同じノリで提出してしまいました。 Amazonさんちゃんとしてる(感心)

3Dモデル初心者がエミリアのフリーモデルで飛び蹴りをさせる

どうもMaruです。

これまでUnityで2Dゲームばかり作ってますが、

そろそろ3D系のゲームを作りたい!

勉強がてら3Dモデルを簡単に動かす方法を調べたので共有します。


サイト上ですが、動かせるようになりました!

Sketchfabから3Dモデルをダウンロード

Sketchfabとは
3DCGデータ投稿・共有サービスです。
アカウント作成(無料)が必要です。

Sketchfabにて、 「リゼロ」エミリアのモデル[.obj形式]をダウンロードしました。(無料)

Emilia ReZero - Download Free 3D model by AbhishekBarali (@AbhishekBarali) [3a97de4] - Sketchfab

sketchfab.com

mixamoで動かす

mixamoとは
3Dキャラクターのカスタマイズからアニメーション付けができるWebサービスです。
Adobe CC のアカウント(無料)が必要です。

1.モデルアップロード

ログイン後、 画面右側UPLOAD CHARACTERを選択
アップロード

アップロードウインドウが開く

アップロード2

ダウンロードした3Dモデルデータのzipファイルを展開
sourceフォルダの中のzipファイルをアップロード

zipファイル

アップロードが完了するとモデルが表示される。 アップロード (なんか白!笑 細かいことは気にしない動かすんだ!!)

2.関節位置設定


関節の設定をする
左下の丸をそれぞれ関節の場所に配置する。 CHIN あご
WRISTS 手首
WLBOWS 肘
KNEES 膝
GROIN 股間

関節

NEXTを2回くらい押して設定完了!!

3.モーションを選ぶ

あとはモーションを選ぶだけです! モーション


冒頭にも載せましたが、こんな風に動きます!すごい!!

おわりに

ダウンロードしてUnityで動かすことできるみたいです。

具体的な手順は後日書きます。

ざっとみた感じ、大体股を開いているので男性キャラだとマッチしそうです。

App Store ConnectからApp Storeへ移動後 言語切替 英語⇄日本語

言語切替

Store画面が英語になる問題

App Store ConnectからApp Store画面を見るときありますよね?

App Storeで表示

私の場合、アプリの主言語は英語にしているため、英語表記になってしまいます。

英語表記



日本語で表示する方法

下記アドレスのusの部分をjpにするだけ
主言語(英語):https://apps.apple.com/us/app/id1526028259

サブ言語(日本語):https://apps.apple.com/jp/app/id1526028259 ストア日本語

おわりに

これで国ごとの評価を見たり、URLコピーが容易になりますね!

他の言語へ切り替えるコードはわかりませんでした。

もっと楽なやり方があれば教えてください。

他の言語はこちらで設定できます marumaro7.hatenablog.com