個人アプリ開発で月収5万円目指す

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

一般サラリーマンからのリアル脱出ゲーム

厳選!私が実際に役に立ったUnity,iOS おすすめ動画講座【随時追加】

f:id:marumaro7:20200624224539p:plain

はじめに

みなさんプログラミングの勉強どうやって進めていますか??

私のおすすめは断然これ!


Udemy です。

友人から教えてもらったのですが、一流講師の講座が時間を選ばず受けられます。

セール時には1000円台から受講できるので本を買うより安くコスパ最強です。

エンジニアにマンツーマンで教えてもらおうと思うと、
1時間2500円が相場なので、それを考えると定価で購入してもお得だと思ってます。
とはいうものの、副業するならコストはできるだけ抑えたいので購入はセール時が狙い目です。

質問し放題に加えて、30日間返金保障なので安心して購入できます。

Udemyというか動画教材の欠点としては、
あとで見返すときに「確認したいところがわからない」
ということがあるので、Qiitaやブログなどでメモを残しておくと良いかもしれません。

Udemyでは細かくセクションごとに分かれ探しやすくなっていますが、
それでも不思議、私は探す笑

私が実際に役に立ったUdemyのおすすめ講座を紹介します。

Unity教材

Unity ゲーム開発:インディーゲームクリエイターが教える C#の基礎からゲームリリースまで【スタジオしまづ】

Unity ゲーム開発:インディーゲームクリエイターが教える C#の基礎からゲームリリースまで【スタジオしまづ】

【感想】
Unity教材で迷ったらこれで間違いなし! marumaro7.hatenablog.com ↑こちらの記事でも紹介しましたが、Unityの基礎だけでなく、
超つまづきやすいAndroidiOSのリリース手順まで解説しています。
なんですかこれ、、、神ですか?

Unity3D入門の決定版!RPG開発の基本をUnityインストラクターと共に進めるハンズオンコース【スタジオしまづ】

Unity3D入門の決定版!RPG開発の基本をUnityインストラクターと共に進めるハンズオンコース【スタジオしまづ】

【感想】
Unityで3Dをやりたいならこれ!
基礎から学ぶので初心者でも安心♪

Unityゲーム開発入門:Unityインストラクターが教えるマリオ風2Dアクションゲームを作成する方法【スタジオしまづ】

Unityゲーム開発入門:Unityインストラクターが教えるマリオ風2Dアクションゲームを作成する方法【スタジオしまづ】

【感想】
自分でマリオみたいなゲームが作れる幸せ!
マリオメーカーよりも自由に!

[初心者向け] Blender 2.8でアニメーションを作成して Unity で動かすまでの30分講座

[初心者向け] Blender 2.8でアニメーションを作成して Unity で動かすまでの30分講座

【感想】
3Dモデルに命を吹き込む!
Unity×Blenderで制作の幅が広がります。
Blenderのインストールは事前に必要です。

Unity2Dパズルゲーム開発入門:Admob広告実装と高速にスマホゲームを量産する実践テクニック講座【スタジオしまづ】

Unity2Dパズルゲーム開発入門:Admob広告実装と高速にスマホゲームを量産する実践テクニック講座【スタジオしまづ】

【感想】
とにかく量を作る!
なるほど量産テクニックです。

Unityインストラクターが教えるシャドウバースのような本格2Dカードゲーム開発コース【スタジオしまづ】

Unityインストラクターが教えるシャドウバースのような本格2Dカードゲーム開発コース【スタジオしまづ】

【感想】
Unityのチュートリアルをなにかしらやったことある人向けです。
カードゲームの基礎はここに。

iOS教材

【iOS13対応】未経験者がiPhoneアプリ開発者になるための全て iOS Boot Camp

【iOS13対応】未経験者がiPhoneアプリ開発者になるための全て iOS Boot Camp

【感想】
ベストセラーだけあって初心者でもわかりやすい
Firebaseとの連携も解説されているのが個人的に嬉しいポイントです。

おわりに

Unity教材全部スタジオしまづやないか!と思いました?
だってわかりやすいんだもの、、、

【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

おわりに

ゆーじさん天才

【Unity】AdMobのUnityAdsメディエーションでiOSリリース直後から広告を表示する 

前提

AdMobの広告を実装できている方向け
GoogleMobileAds-v5.4.0
GoogleMobileAdsUnityAdsMediation-2.5.1

はじめに

AdMobの広告を使用する上で、
iOS版は2020年11月頃からアプリリンクしないと広告が表示されなくなりました。
この影響でAppleの審査が落ちるという事態も発生しているようです。

このAppleの審査を通す対策として、2つの方法があります。

①「広告無しで審査を通す→AdMob上でアプリリンクする→広告実装する」
 メリット
  簡単
 デメリット
 ・再審査が面倒
 ・広告前提の構成の場合、審査のためにアプリの構成を調整する必要がある
 ・アプリリンク5日以上かかるため、もやもやする


AdMobメディエーションを使用しAdMob以外の広告ソースから広告を表示する
 メリット
 ・メディエーションを使用することで、単価が高い広告が表示されるようになる。
 ・リリース直後からiOS版でも広告表示が可能になる。
 デメリット
  ①の方法より手間がかかる

今回はタイトルにもあるように
②の方法(広告ソースはUnityAdsを使用)で
iOSリリース直後から広告を表示できるようにします。
この記事では、私がメディエーション設定を実装した際の
"つまづいたこと"を中心に書いていきます!

前準備

メディエーション設定をするうえで、8割は公式の説明書を順に追っていくだけでいけました。

説明書
Integrating Unity Ads with Mediation  |  Google Developers

ただ、英語で書いてあるので英語ができない私には非常に読みにくかったです。
そこで、Chromeのページ全体を翻訳機能を使って読み進めました。

Chrome拡張機能実装手順
ChromeでGoogle翻訳の拡張機能を使おう。英語サイトも怖くないぞ!

つまづいたポイント

1.eCPMいくらでいれたらいいかわからない問題

説明書の項目<UnityAdsを広告ソースとして追加する>のところで

eCPMを自動で調整する設定にしていても、最初は入力する必要があります。
youtubeで調べたら2ドルで入れていたので、真似して2ドルで設定しました。
(よくわかってない)
f:id:marumaro7:20210116162312p:plain:w300

2.xmlファイル編集方法わからない問題

説明書のこちらの内容は次の方法で設定します。 f:id:marumaro7:20210116163817p:plain

説明書に書いてある通り、こちらのファイルを開きます。
Assets/GoogleMobileAds/Editor/UnityMediationDependencies.xml f:id:marumaro7:20210116164230p:plain:w400

開くとこちらのようになっていると思います。

<dependencies>
  <androidPackages>

   <androidPackage spec="com.google.ads.mediation:unity:3.5.1.1">
      <repositories>
        <repository>https://jcenter.bintray.com/</repository>
      </repositories>
    </androidPackage>

    <!-- If using the Unity Ads Service from Unity3D, use this dependency instead to exclude the
    Unity Ads SDK and avoid conflicting dependency issues. -->
    <!--
   <androidPackage spec="com.google.ads.mediation:unity-adapter-only:3.5.1.1">
      <repositories>
        <repository>https://jcenter.bintray.com/</repository>
        <repository>https://google.bintray.com/mobile-ads-adapters-android</repository>
      </repositories>
      </androidPackage>
    -->

  </androidPackages>

  <iosPods>
    <iosPod name="GoogleMobileAdsMediationUnity" version="3.5.1.1">
      <sources>
        <source>https://github.com/CocoaPods/Specs</source>
      </sources>
    </iosPod>
  </iosPods>
</dependencies>

次のように変更します。

<dependencies>
  <androidPackages>
  
        <!--ここから
    <androidPackage spec="com.google.ads.mediation:unity:3.5.1.1">
      <repositories>
        <repository>https://jcenter.bintray.com/</repository>
      </repositories>
    </androidPackage>
        ここまで無効-->
        
        
    <!-- If using the Unity Ads Service from Unity3D, use this dependency instead to exclude the
    Unity Ads SDK and avoid conflicting dependency issues. -->
    <!--ここから-->
    <androidPackage spec="com.google.ads.mediation:unity-adapter-only:3.5.1.1">
      <repositories>
        <repository>https://jcenter.bintray.com/</repository>
        <repository>https://google.bintray.com/mobile-ads-adapters-android</repository>
      </repositories>
    </androidPackage>
    <!--ここまで有効-->

  </androidPackages>

  <iosPods>
    <iosPod name="GoogleMobileAdsMediationUnity" version="3.5.1.1">
      <sources>
        <source>https://github.com/CocoaPods/Specs</source>
      </sources>
    </iosPod>
  </iosPods>
</dependencies>

やっていることは
xmlコメントアウトコメントアウトの解除だけです。

 <!--コメントアウトする内容-->

おわりに

xmlの編集方法を調べる良い機会になりました。

最近「ダンスドリームMV」というダンスアプリをリリースしました。
もしこの記事が役に立ったら、このアプリの⭐️5評価お願いします!(懇願)
iOS
http://urx3.nu/QvFa
Android
http://urx3.nu/iRcv

Twitter
twitter.com

ダンスドリームMV Press kit

Press kit (ver1.0.2/update 2021-01-10)

(iOS / Android)


リリース内容:Release

ダンスシミュレーションアプリ
「ダンスドリームMV」
iOS / Androidにてリリース致しました。

アプリ内容:Description

有名キャラクター夢の共演!あなただけのダンスステージがここに


ニコニコ動画等でMikuMikuDance(通称MMD)のコンテンツがありますが、
自分で動画を作るとなると相当敷居が高い現状です。
そこで、MMDの世界を手軽に体験していただきたいと思いこのアプリを開発しました!

キャラクター・ダンス・音楽・ステージ・背景・エフェクトを自由に組み合わせ、
思い通りのダンスステージを作ることが可能です!
各要素の数は豊富に用意しているため組み合わせパターンは無限大です!


料金:無料 (広告、App内課金モデル)

カテゴリ:エンタメ

対応OS:iOS Android

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

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

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

play.google.com



Screenshots

ダンスドリーム  スクリーンショット1 ダンスドリーム  スクリーンショット2
ダンスドリーム  スクリーンショット3 ダンスドリーム  スクリーンショット4
ダンスドリーム  スクリーンショット5 ダンスドリーム  スクリーンショット6
ダンスドリーム  スクリーンショット7 ダンスドリーム  スクリーンショット8
ダンスドリーム  スクリーンショット9 ダンスドリーム  スクリーンショット10


Logo

512×512.png
ダンスドリーム MV アイコン


Download

スクリーンショット、ロゴファイルまとめ

Profile

連絡先:zre142g18985@utopia.ocn.ne.jp

Twitter@Maru60014236

開発アプリ一覧

Androidアプリリスト

iOSアプリリスト

【Unity】returnに"?" 条件演算子とは

returnに"?"マークあるんですけど????

ブログを見ていたら

returnに"?"が書いてあって、内容が理解できなかったのでメモ

正体は条件演算子

結論として条件演算子というみたいで、
こちらの情報で解決しました。
"?"と":" のセットで使うみたいですね。

組込み演算子 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C f:id:marumaro7:20201227093504p:plain

具体例

あとから見たときにまたわからなくなりそうなので、 具体例書いておきます。

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

public class Test : MonoBehaviour
{
    private string a;//string型の変数aを宣言
    private bool c;//bool型の変数cを宣言

    private string b;//string型の変数bを宣言

    void Start()
    {
        a = "あ";//変数aに文字列 あ を代入

        b=AAA();//関数AAA()を実行し、その返り値を変数bに代入

        Debug.Log(b);//コンソールに変数bの文字列を表示
    }      


    //返り値の型がstring型の関数AAAを作成
    private string AAA()
    {
        if (a == "あ")
        {
            c = true;//aの文字列が あ だったら変数cをtrueにする
        }
        else
        {
            c = false;//aの文字列が あ ではなかったら変数cをfalseにする
        }

        //cがtrueなら返り値は "変数aには あ が入っています。" になる
        //cがfalseなら返り値は "変数aには あ は入っていません。" になる
        return c ? "変数aには あ が入っています。" : "変数aには あ は入っていません。";
    }    
}



このスクリプトを"空のオブジェクト"にセットして
f:id:marumaro7:20201227094342p:plain:w400



実行すると 関数AAA()の返り値の値は
「"変数aには あ が入っています。"」
が返ってきていることがわかります。
f:id:marumaro7:20201227094445p:plain:w400

おわりに

return A ? B : C
のBとCには"返り値のある関数"を入れることもできるようです。

私が初めてみたのは関数が入っていたので、大混乱でしたー!!

【Unity】iOSアプリ申請 却下理由と対策 メモ

f:id:marumaro7:20201220085819p:plain

iOSのアプリ却下理由と対策をメモとして残していきます。
※まだ対策していない内容も含まれます。

1.Guideline 3.1.1 - Business - Payments - In-App Purchase

f:id:marumaro7:20201220083739p:plain

題名

0.1.9 バイナリでの却下 2020年12月18日 AppReview Guideline 3.1.1 - Business - Payments - In-App Purchase Your app uses intermediary currency to purchase items that function as

訳:AppReview ガイドライン3.1.1-ビジネス-支払い-アプリ内購入アプリは、中間通貨を使用して、次のように機能するアイテムを購入します。

本文

Guideline 3.1.1 - Business - Payments - In-App Purchase

Your app uses intermediary currency to purchase items that function as non-consumable products but does not include a restore mechanism.

Users restore transactions to maintain access to content that they've already purchased.

Next Steps

To resolve this issue, please modify your app to include an optional user-registration feature that allows users to restore their purchases to all of their iOS devices.

We recommend indicating that account registration is necessary to restore previously purchased in-app purchase products and providing a way for users to register later if they wish to access this content in the future.

Please see attached screenshot for details.

訳:ガイドライン3.1.1-ビジネス-支払い-アプリ内購入

アプリは中間通貨を使用して、非消耗品として機能するアイテムを購入しますが、復元メカニズムは含まれていません。

ユーザーはトランザクションを復元して、購入済みのコンテンツへのアクセスを維持します。

次のステップ

この問題を解決するには、アプリを変更して、ユーザーが購入したものをすべてのiOSバイスに復元できるオプションのユーザー登録機能を含めるようにしてください。

以前に購入したアプリ内購入商品を復元するにはアカウント登録が必要であることを示し、ユーザーが将来このコンテンツにアクセスしたい場合に後で登録する方法を提供することをお勧めします。

詳細については、添付のスクリーンショットを参照してください。

添付のスクリーンショット
f:id:marumaro7:20201220084415p:plain

内容解釈

今回のアプリではコイン(無課金で取得可)を使用し、
アプリ内のショップで買い切りのアイテムを販売しています。

この買い切りアイテムの購入データは端末に保存していますが、
それだけではダメで、購入データとユーザーを特定できる仕組みを
用意しないといけないということでしょうか?
ユーザー登録の仕組みって難しくないですか(汗)

とりあえずダメ元で問い合わせ

お世話になります。
審査ありがとうございます。

ご指摘の無課金で購入できる買い切りアイテムについて、

こちらの購入データはアンインストール後、
再インストールしても端末のデータから情報が復元されるのですが、
この設計では問題があるということなのでしょうか?

お忙しいところ恐れ入りますが、ご回答よろしくお願い致します。

Apple返信

Hello,

Thank you for providing this information.

Regarding 3.1.1, we found that your app allows the user to unlock non-consumable items such as characters, using an intermediary currency, but does not include a restore mechanism.

To resolve this issue, please modify your app to include an optional user-registration feature that allows users to restore their purchases to all of their iOS devices.

We look forward to reviewing your resubmitted app.

Best regards,

App Store Review

訳:こんにちは、

この情報を提供していただきありがとうございます。

3.1.1に関しては、アプリでユーザーが中間通貨を使用してキャラクターなどの非消耗品のロックを解除できることがわかりましたが、復元メカニズムは含まれていません。

この問題を解決するには、アプリを変更して、ユーザーが購入したものをすべてのiOSバイスに復元できるオプションのユーザー登録機能を含めるようにしてください。

再送信されたアプリを確認することを楽しみにしています。

宜しくお願いします、

AppStoreレビュー

【Unity】課金設定 Unity IAPにGoogle 公開鍵を設定する

Unity IAPへのGoogle公開鍵設定ではまったのでメモ

前提条件

Google Play Consoleにapkファイルがアップロードされている
・Unity IAPが有効になっている

1.Google Play Console上で公開鍵の取得

公開鍵の取得

2.Unity IAPで公開鍵を設定する

注意 Unity上からは設定できない

Optionsのところで入力欄がありますが、入力しても無効となってはじかれます。 f:id:marumaro7:20201119051019p:plain:w400

2-1 Unity Analyticsへ移動

Unity IAP画面右上の Go to Dashboardをクリック ダッシュボード

2-2 公開鍵を入力

Settings
→Analytics Settings
Google License Keyに公開鍵を入力
→保存ボタンを押す

公開鍵入力

2-3 Unityへ戻って公開鍵を反映

Unity IAPへ戻って入力欄に公開鍵を入力してVerfyボタンを押す



設定完了!

aa

おわりに

課金設定なにがなんやらわからんですねー。

参考

develop.hateblo.jp

DanceDreamMV プライバシーポリシー

制定日:2021/1/1

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

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

 
本アプリが利用する利用者情報は、下記の3つです。
  • アプリの広告表示のためにお客様の情報の一部を送信する可能性があります。
  • アプリではアクセス解析ツールを用いてアプリの利用状況を収集しております。
  • 問い合わせの際に利用者情報の一部を送信します。
  1. アプリの広告表示本アプリは広告表示のためにお客様の情報の一部を送信する可能性があります。広告表示は、下記2社のサービスを利用しており、本アプリは2社に利用者情報の提供を行います。それぞれのサービスが利用している利用者情報と目的については各社のサービスのプライバシーポリシーをご確認ください。

  2.アプリのアクセス解析
  本アプリではアクセス解析ツールを用いてアプリの利用状況を収集しております。

  アクセス解析Google Analyticsを利用しております。

  本アプリは画面遷移を行った際に、画面IDと利用者情報をGoogle Analytics

  に送付します。

  1. 問い合わせ
    本アプリでは問い合わせの際に利用者情報の一部を送信します。
    問い合わせはメールで行い、メール本文に下記情報が埋め込まれます。また、メールで送信されるため、メールアドレスも送信されます。
    • 名前、メールアドレス
    • 端末名、OSバージョン、その他端末情報(画面サイズ、ピクセル密度、利用可能ヒープメモリ量)
    • アドオン購入状況

利用目的

利用者情報はそれぞれ下記目的に利用されます。

  • 三者の広告の配信・表示のため
  • 当社のサービスに関連して、個人を識別できない形式に加工した統計データを作成するため
  • 本アプリに関するご案内、お問い合せ等への対応のため