そういうのがいいブログ

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

アプリ開発覚え書き

【Unity】実機でフレームレートを確認しながら解像度を変更する

参考記事をまとめて実施したかったのでメモ

解像度変更

・ボタンのUI作成
・ボタンにpublic void ChangeRate(int RefreshRate)を割り付け引数設定が必要
・テキストの作成
・このスクリプト public Text fpsText にテキストオブジェクトのアタッチが必要

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;//追加

public class RateCheck : MonoBehaviour
{
    //テスト用 解像度変更 RefreshRateは60まで 小5 微15 中30 大60
    //ボタンを作り、ボタンの引数に5、15、30、60を設定した
    //参考 https://kan-kikuchi.hatenablog.com/entry/UnityTips3
    public void ChangeRate(int RefreshRate)
    {
        float screenRate = (float)1024 / Screen.height;
        if (screenRate > 1) screenRate = 1;
        int width = (int)(Screen.width * screenRate);
        int height = (int)(Screen.height * screenRate);
        Screen.SetResolution(width, height, true, RefreshRate);
    }


    //フレームレートチェック
    //参考 https://ekulabo.com/frame-rate-time
    public Text fpsText;// フレームレートを表示するテキストです。   
    private int frameCount;// Update()が呼ばれた回数をカウントします。   
    private float elapsedTime;// 前回フレームレートを表示してからの経過時間です。    

    void Update()
    {
        // 呼ばれた回数を加算します。
        frameCount++;

        // 前のフレームからの経過時間を加算します。
        elapsedTime += Time.deltaTime;

        if (elapsedTime >= 1.0f)
        {
            // 経過時間が1秒を超えていたら、フレームレートを計算します。
            float fps = 1.0f * frameCount / elapsedTime;

            // 計算したフレームレートを画面に表示します。(小数点以下2ケタまで)
            string fpsRate = $"FPS: {fps.ToString("F2")}";
            fpsText.text = fpsRate;

            // フレームのカウントと経過時間を初期化します。
            frameCount = 0;
            elapsedTime = 0f;
        }
    }
}

参考

kan-kikuchi.hatenablog.com

ekulabo.com

Screen-SetResolution - Unity スクリプトリファレンス

【忙しい人向け】AdMob税務情報の提出 アプリ開発者要対応!

f:id:marumaro7:20210312004007p:plain

はじめに

詳しいことは他の方にまかせて、誤解を恐れずざっくり書きます。
・米国の法律改正でAdMob(AdSense)の収入から24%の税金が引かれます
・税務情報を申請すれば税金24%は免除
・用意するものはマイナンバー(マイナンバーカードである必要は無し)
・入力自体は10分くらい

対応は自己責任でお願い致します。 詳しく知りたい方は一番下の参考の項目を見てください。

<追記>
再提出することになったので、
一番下の追記部分を確認してから実行ください。

申請方法

1.Google AdSenseのページに遷移

AdSenseのページ>お支払い>設定を管理する f:id:marumaro7:20210311224718p:plain

2.アメリカの税務情報

下の方にある「アメリカの税務情報」をクリック f:id:marumaro7:20210311225718p:plain

3.税務情報の追加

f:id:marumaro7:20210311225935p:plain

4.米国の税務情報

・個人
・いいえ
・W-8BEN(個人用の入力フォーム)
を選択し、「W-8BENフォームの記入を開始する」を押す。 f:id:marumaro7:20210311230544p:plain

5.W-8BEN納税フォーム

5-1.納税者番号

・個人名(英語) (例)Taro Yamada
・国籍>日本
・外国のTIN>マイナンバーを入力(12桁)
f:id:marumaro7:20210311231642p:plain

5-2.住所

英語表記で入力が必要なのでこのサイトを参考に入力しました。
(住所を書く順番は日本語と英語で逆になるのでサイトの使用を推奨です。)
住所を英語表記に簡単変換 - 君に届け!

f:id:marumaro7:20210311233344p:plain

5-3.租税条約

租税条約下で源泉徴収に適用される軽減税率の請求を行っていますか?

・はい
・「米国との租税条約の適用のある国の居住者」にチェック
・国>日本
f:id:marumaro7:20210311233751p:plain

特別な料率や条件

ご自分の使用しているサービスをチェックいれて設定してください。
今後のために全部設定しておけばOKです。
「条項と段落」は選択式になっていますが一つしか選べませんでした。
源泉徴収率は「0%(軽減税率)」を選んでください。

f:id:marumaro7:20210311234048p:plain

5-4.書籍のプレビュー

チャック入れて次へ f:id:marumaro7:20210312001333p:plain

5-5.納税証明

名前(英語) f:id:marumaro7:20210311234927p:plain

5-6.米国内で行っている活動とサービス、および宣誓供述書

米国内で行っている活動とサービス

いいえ f:id:marumaro7:20210311235702p:plain

税務上の地位の変更に関する宣誓供述書

注意)この項目はAdMob(AdSense)の支払いを受け取ったことがあるか無いかで変わります。

・支払いを受け取ったことがない方 f:id:marumaro7:20210312000043p:plain

・支払いを受け取ったことがある方 f:id:marumaro7:20210312000329p:plain

5-7.送信!

送信すると
こんな画面になるので「新しいフォームを送信」 f:id:marumaro7:20210312002000p:plain

「新しいフォームの作成を開始」 f:id:marumaro7:20210312002107p:plain

6.確認

こんなメールが届いたら完了です!
お疲れ様でした!

f:id:marumaro7:20210312002843p:plain

おわりに

ツイッターでYoutuber向けの記事しかみかけなかったので
これからアプリ開発を始める方に伝われば良いなと思い書きました。


最後に宣伝させてください。
アプリ開発を始めて丸2年が経ち、
節目としてなにか形にしたいと思い、Udemy講座を出しました!
www.udemy.com

ブログ限定割引リンクは私のプロフィールページにあります。
アプリ開発収益化を時短したい方向けの講座となっております。

追記<2021年9月9日> 税務情報再提出の連絡

6ヶ月たって再提出のメールが来ました。

税務情報で記入した名前は英語表記でしたが、
支払いプロファイルはがっつり漢字を書いていたのがいけなかったようです。

f:id:marumaro7:20210909234522p:plain:w400

修正1

Adsenseのページの
・「設定を変更する」
・「ユーザー数:1」
のところが漢字で書いていたので、
Taro Yamadaのように名前 名字のローマ字表記で申請した内容に書き換えました。
f:id:marumaro7:20210909235830p:plain:w500

また、メールで指摘されていませんが、住所の方も日本語表記にしていたので
一応申請した内容に直し、メールの手順で再提出しました。

修正2

GooglePlayで課金設定している場合、
お支払いプロファイルを別途設定していると思います。
こちらについても同様に申請内容と同じ英語表記へ直し、再提出しました。

f:id:marumaro7:20210910002747p:plain:w200

参考

www.iscle.com

www.youtube.com

【Unity】複数のタイムラインを使い分けて好きなタイミングでスクリプトを実行する

はじめに

タイムライン勉強メモです。
場面によって同じメソッドをタイミングを変えて実行したかったので調査しました。

手順概要

1.タイムライン新規作成
2.Signalを新規作成
3.タイムライン上にSignalを配置
4.実行したい処理を作成
5.タイムラインの呼び出し設定
6.実行確認

1.タイムライン新規作成

プロジェクトウインドウ>+ボタン>タイムライン


タイムラインの名前はTimelineTest1にしました。
タイムライン2

タイムラインを複数作成

同様にタイムラインを2つ新規作成します。
名前はTimelineTest2とTimelineTest3にしました。

2.Signalを新規作成

タイムライン上に配置するSignalを新規作成します。
このSignalがタイムラインに配置されたタイミングでメソッドを呼び出します。

プロジェクトウインドウ>+ボタン>Signal
タイムライン3

Signalの名前はSignalTestにしました。

3.タイムライン上にSignalを配置

タイムラインウインドウをTimelineTest1をクリックして開きます。

マーカーボタンを押してマーカーウインドウを表示します。

先ほど作成したシグナルのSignalTestをドラッグアンドドロップし、
メソッドを呼び出したいタイミングに配置します。

タイムライン「TimelineTest2」「TimelineTest3」でも同様にシグナルを設定します。

4.実行したい処理を作成

処理するスクリプト内容を作成します。 今回はSignalScriptという名前でスクリプトを新規作成し、 下記の内容で作成しました。

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

public class SignalScript : MonoBehaviour
{
    public void SignalScriptTest()
    {
        Debug.Log("メソッドを実行しました。");
    }
}

空のゲームオブジェクトを作成し、このスクリプトを割り当てておきます。

5.タイムラインの呼び出し設定

5-1.タイムラインを使い分けるスクリプトの作成

EventManagerという名前でスクリプトを作成しました。

タイムラインを再生するPlayableDirectorコンポーネント
指定したタイムラインを再生させる内容になります。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Timeline;

[RequireComponent(typeof(PlayableDirector))]
public class EventManager : MonoBehaviour
{
    // ここにインスペクター上であらかじめ複数のセット
    [SerializeField] private TimelineAsset[] timelines;

    private PlayableDirector director;//PlayableDirector型の変数directorを宣言

    void Start()
    {
        //同じオブジェクトに付いているPlayableDirectorコンポーネントを取得
        director = this.GetComponent<PlayableDirector>();        
    }

    //イベント再生メソッド ボタンに割り当てる
    public void EventPlay(int id)
    {

        //ボタンの引数によってタイムラインを指定して再生
        switch (id)
        {
            case 1:
                // 再生したいタイムラインをPlayableDirectorに再生させる
                director.Play(timelines[0]);                
                break;
            case 2:
                // 再生したいタイムラインをPlayableDirectorに再生させる
                director.Play(timelines[1]);                
                break;
            case 3:
                // 再生したいタイムラインをPlayableDirectorに再生させる
                director.Play(timelines[2]);                
                break;
        }
    }
}
[RequireComponent(typeof(PlayableDirector))]

を付けることで、このスクリプトをゲームオブジェクトに割り当てた際に
必要なPlayableDirectorというコンポーネントを自動的に同じオブジェクトへ追加します。
自分でPlayableDirectorコンポーネントを付けても良いのですが、
付け忘れ防止のため書いています。

5-2.インスペクター設定

空のオブジェクトを作成し、名前をEventManagerに変えて 先ほど作ったスクリプトを割り当てます。

5-3.タイムライン割り当て

EventManagerの配列にそれぞれのタイムラインを割り当てます。

5-4.SignalReceiverコンポーネント追加

シグナルの信号を受け取るSignalReceiverを追加します。
SignalReceiverはPlayableDirectorで再生されているタイムラインの
シグナルを受け取るものです。

5-5.SignalReceiver設定

今回はシグナルが配置されたタイミングで
SignalScriptのSignalScriptTest()メソッドをを実行したいので
このように設定します。

5-6.ボタンの配置

ボタンを押した時にタイムラインを切り替えて再生したいので
ボタンを3つ配置します。

5-7.ボタンの設定

ボタンにEventManagerオブジェクトのEventManagerスクリプト>EventPlayを割り当てます。 引数はボタンごとに1、2、3を割り当てます。

6.実行確認

タイムラインが動いているのを見るには
ゲームビューのボタンを押してから
EventManagerオブジェクトをクリックすると確認できます。
(最初からEventManagerオブジェクトをチェックしていると
一旦他のオブジェクトなどをクリックする必要があります。)

おわりに

Signal Trackというのをタイムラインに配置して実行したかったのですが、
タイムラインを再生してから、タイムラインのSignal TrackにSignalReceiverを
割り当てないと実現できなさそうでした。

実行中に割り当てる方法がわからなかったのでわかる方教えてください。

Unity本を出版しました!

突然ですが、Unity本を出版しました!
こちらを読むことで、スクリプトの基礎固めができます!
現在、kindle unlimitedで読み放題設定中です。今のうちにどうぞ!


もっと早く教えてほしかった!Unity C#入門

参考

www.ame-name.com teratail.com

国名別でiOSアプリページのアドレスを設定する

iOSのアプリページを国別でみたいときのメモ

方法

iOSアプリページアドレスの下記の部分を国別のコードに設定することで
各国のページをみることができます。

私のアプリ ダンスドリーム MVのアドレス
https ://apps.apple.com/ここに国別コード/app/dancedreammv-mmd-livesimulator/id1545151149

<参考> memorva.jp

国別コード
アメリカ:us 
https://apps.apple.com/us/app/dancedreammv-mmd-livesimulator/id1545151149

日本:jp
https://apps.apple.com/jp/app/dancedreammv-mmd-livesimulator/id1545151149

イギリス:gb
https://apps.apple.com/gb/app/dancedreammv-mmd-livesimulator/id1545151149

おわりに

アプリ内でのレビュー依頼の言語別アドレスとしても活用できそうです。

役に立てたらどうか星5のご慈悲を。

ダンスドリームMV MMD VRoidライブシミュレーター

ダンスドリームMV MMD VRoidライブシミュレーター

  • Yuji Onishi
  • エンターテインメント
  • 無料
apps.apple.com

play.google.com

Please fill in the improvement points of the Dance Dream MV app. ダンスドリーム MV アプリ改善点の記入お願いします。

Thank you for always playing Dance Dream MV.
We are updating every day to make it the best dance app in the world.
Please write down what you noticed in the comment section!

Press the comment button here at the bottom of the page (this is an image)
f:id:marumaro7:20210208092304p:plain
We look forward to your continued support of Dance Dream MV.

いつもダンスドリーム MVをプレイいただき誠にありがとうございます。
世界最高のダンスアプリにするべく毎日アップデート作業中です。
ユーザーの皆様のお気づきの点をページ下部のコメント欄に記入お願い致します!

これからもダンスドリーム MVをよろしくお願い致します。

【Unity】DOTweenまとめ

いつも忘れるのでDOTweenの自分用まとめ

DOTweenとは

unity-yuji.xyz
面倒な処理も1行でかける f:id:marumaro7:20210117161717p:plain

DOTweenでできるアニメーションのイメージ

game-ui.net

初期設定

DOTweenの使い方 Tweenアニメーション入門【Unity】|アマガミナブログ

公式ドキュメント

dotween.demigiant.com

DOTweenを使うにはusing設定必須

using DG.Tweening;

1つのアニメーションにオプションをつける

transform.DOLocalMove(new Vector3(10f, 0, 0), 1.0f)//ローカル座標移動 座標,移動にかける時間
           .SetDelay(1f)//SetDelay(待機時間/秒)
           .SetRelative()//SetRelative() 相対的に移動する 例:Tween前の座標が(5, 0, 0)の時に(15, 0, 0)へ動くようになる

           .SetLoops(2, LoopType.Incremental)//SetLoops(ループ回数, LoopType) ループ回数は-1で永久ループ
            //Incremental:前回の位置を基準にしながら差分移動
            //Restart:同じ動きを繰り返す
            //Yoyo:ヨーヨーのように、進んでは戻るを繰り返す

           .SetEase(Ease.OutQuad);//SetEase(Ease or AnimationCurve) アニメーションの進み具合を指定する。
            //DOTweenで用意されているEase型で指定するか、Unity標準のAnimationCurve型を渡します。
           //Ease型なら https://easings.net から選ぶ

順番にアニメーション

Sequence sequence = DOTween.Sequence()//Sequence型の変数 sequenceを宣言
.Append(transform.DOScale(1.1f, 1.0f)                   
.SetEase(Ease.OutQuart)
.SetLoops(4, LoopType.Restart))//オプション付きアニメーション
.Append(transform.DOScale(1.0f, 0.8f))//オプション無しアニメーション
.OnComplete(() => Debug.Log("全部終了"));//完了のコールバック

//Tweenの追加
//Append() 前のTweenが終わってから実行
//Join()   前のTweenと同時に実行
//Prepend()    再生済のものを除いて、先頭に追加


 //注意!オプションはAppend()などのカッコの中に書かないとsequence全体に適用されてしまう

//オプションおさらい
  //SetDelay(待機時間/秒)
  //SetRelative() 相対的に移動する 例:Tween前の座標が(5, 0, 0)の時に(15, 0, 0)へ動くようになる
   //SetLoops(ループ回数, LoopType) ループ回数は-1で永久ループ
   //Incremental:前回の位置を基準にしながら差分移動
   //Restart:同じ動きを繰り返す
   //Yoyo:ヨーヨーのように、進んでは戻るを繰り返す
   //SetEase(Ease or AnimationCurve) アニメーションの進み具合を指定する。
   //DOTweenで用意されているEase型で指定するか、Unity標準のAnimationCurve型を渡します。
   //Ease型なら https://easings.net から選ぶ
 //等速ならEase.Linear       

任意のタイミングでアニメーション

using UnityEngine;
using DG.Tweening;

public class ButtonAnime : MonoBehaviour
{
    private Tween t;
   
    void Start()
    {
        t = transform.DOScale(1.1f, 0.8f)
          .SetEase(Ease.OutQuart)//オプション
          .SetLoops(-1, LoopType.Restart);//-1で無限ループ

        t.Play();//再生
    }
    
 //ボタンにこの関数を割り当て
    public void AnimeStop()
    {        
        t.Kill();//アニメの破棄 無限ループはKillで破棄する
        transform.DOScale(1.0f, 0);//元のスケールに戻す
    }
}
//一時停止
t.Pause();

// 最初から再生
t.Restart();

//終了(無限ループの終了には使えない)
t.Complete();

魅力的なUIノウハウ

unity-yuji.xyz

おわりに

ゆーじさん天才