個人アプリ開発で月収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】課金設定 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 プライバシーポリシー

制定日:2020/11/18

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

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

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

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

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

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

  に送付します。

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

利用目的

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

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

【Unity】AndroidとiOSで処理を分ける方法

すぐ見れるようにメモ

公式 docs.unity3d.com

UNITY_IPHONEは非推奨なので注意!!

private void Start()
    {
#if UNITY_ANDROID //アンドロイドだったら処理

        //Androidの処理を書く

#endif //アンドロイドの処理範囲終わり


#if UNITY_IOS //iOSだったら処理

        //iOSの処理を書く

#endif //iOSの処理範囲終わり
    }




おまけ #elseを使ってそれ以外の動作を指定することも可能

#if UNITY_ANDROID
   //Androidの処理
#else
   //Android以外の処理
#endif

【Unity】これでラムダ式への耐性アップ!ラムダ式の記述方法まとめ

はい!今回は勉強した過程を書いていきます!
ラムダ式の存在は知っていましたが、読み方がなにもわからない"まる"です。

サンプルコードが読めないと処理が把握できないので、
重い腰を上げて勉強することにしました。
STEPを踏んで勉強の過程を残していきます。

ラムダ式とは

ざっくりいうと"要点だけ書いた関数の書き方"と理解しています。

ラムダ式書き方

まずusing Systemを追加する。

using System;

・引数無し 戻り値無しの関数の場合

Action型の変数に関数を入れてその変数に括弧()をつけて実行する。

Action aaa  = () => { 実行したい処理 }; 
aaa();


・引数有り 戻り値無しの関数の場合

Action型の変数に関数を入れてその変数に括弧()をつけて実行する。
引数の型はActionの直後に<>で記述する。

Action<引数の型> aaa  = (引数の型 引数の変数) => { 実行したい処理}; 
aaa(引数);


・引数無し 戻り値有りの関数の場合

Func型の変数に関数を入れてその変数に括弧()をつけて実行する。
Funcの直後に<>をつけてその中に戻り値の型を記述する。

Func<戻り値の型> aaa  = () => { return○○ }; 
Debug.Log(aaa());//戻り値をもっているので好きな変数に入れたりする


・引数有り 戻り値有りの関数の場合

Func型の変数に関数を入れてその変数に括弧()をつけて実行する。
Funcの直後に<>をつけてその中に引数の型、戻り値の型の順で記述する。

Func<引数の型,戻り値の型> aaa  = (引数の型 引数の変数) => 
{
 実行したい処理
 return○○ 
}; 
Debug.Log(aaa(引数の値));//戻り値をもっているので好きな変数に入れたりする

注)
引数が複数の場合、戻り値の型の記入は最後に記述する。
<第一引数の型,第二引数の型,・・・・・・,戻り値の型>

(ラムダ式を使ううえで、先にデリゲートの考え方を覚えた方がいいようです。)

ポイント

戻り値が無い場合はAction
戻り値が有る場合はFunc
を使うことだけ覚えておく。

サンプルコード

サンプル1 引数無し 戻り値無し 関数

・ 通常の関数の書き方

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

public class Ramudatest : MonoBehaviour
{    
    void Start()
    {
        aaa();
    }

    private void aaa()
    {
        Debug.Log("通常 引数無し 戻り値無し 関数");
    }      
}


ラムダ式での書き方

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;//ラムダ式を使用する場合 追加

public class Ramudatest : MonoBehaviour
{    
    void Start()
    {
        Action aaa = () =>{Debug.Log("ラムダ式 引数無し 戻り値無し 関数");};
        aaa();        
    }
}

サンプル2 引数有り 戻り値無し 関数

・通常の関数の書き方

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

public class Ramudatest : MonoBehaviour
{
    void Start()
    {       
        Test1(5);
    }

    private void Test1(int number)
    {
        Debug.Log(number*2);
    }
}


ラムダ式での書き方

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;//ラムダ式を使用する場合 追加

public class Ramudatest : MonoBehaviour
{
    void Start()
    {
        Action<int> aaa = (int number) => { Debug.Log(number*2);};
        aaa(5);
    }
}

サンプル3 引数無し 戻り値有り 関数

・通常の関数の書き方

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

public class Ramudatest : MonoBehaviour
{
    void Start()
    {
        Debug.Log(Test1());
    }

    private int Test1()
    {
        return 1;
    }
}


ラムダ式での書き方

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;//ラムダ式を使用する場合 追加

public class Ramudatest : MonoBehaviour
{
    void Start()
    {
        Func<int> aaa = () => { return 1; };
        
        Debug.Log(aaa());//返り値確認
    }
}

サンプル4 引数有り 戻り値有り 関数

・通常の関数の書き方

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

public class Ramudatest : MonoBehaviour
{
    void Start()
    {
        Debug.Log(Test1(6));
    }

    private int Test1(int number)
    {
        number = number * 3;
        return number;
    }
}

ラムダ式での書き方

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;//ラムダ式を使用する場合 追加

public class Ramudatest : MonoBehaviour
{
    void Start()
    {
        Func<int, int> aaa = (int number) =>
        {
            number = number * 3;
            return number;
        };

        Debug.Log(aaa(6));//戻り値をもっているので好きな変数に入れたりする
    }
}

省略した書き方

次の条件の時に一部を省略して書くことができます。
・引数が1つの場合()と型を省略できる。
・メソッド部分が1行の場合{}を省略できる。

実際にこちらのコードを省略してみます。

Action<int> aaa = (int number) => { Debug.Log(number * 2);};


・引数が1つの場合()と型を省略できる

Action<int> aaa=number=> { Debug.Log(number * 2);};


・メソッド部分が1行の場合{}を省略できる。

Action<int> aaa=number=>Debug.Log(number * 2);



また、引数が複数の場合、型のみ省略することができます。
・引数2つの基本コード

Action<int,float> aaa = (int number,float kazu) => { Debug.Log(number*kazu*2);};

・型のみ省略

Action<int, float> aaa = (number,kazu) => { Debug.Log(number * kazu * 2);};


・さらに、メソッド部分が1行なので{}を省略。

Action<int, float> aaa = (number,kazu) =>Debug.Log(number * kazu * 2);

おわりに

戻り値が無い場合はAction
戻り値が有る場合はFunc
を使うことだけ覚えておく。

有効な使い方はまだ見えていませんが、
ある程度ラムダ式のコードに心の耐性がついた気がします!
実際コードを読む場面では、省略されて書かれていることがほとんどなので、
省略のところは要チェックですね。

参考

squmarigames.com

【Unity】InputFieldのテキストをスクリプトから変更する 

問題点

InputFieldのテキスト(ユーザーの入力が反映されるテキスト)
が普通にText型を参照しただけでは変更できなかったのでメモ

インンプットフィールド

解決策

InputField型の変数を使う

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

public class TextChangeTest : MonoBehaviour
{
    //InputField型の変数を宣言 対象のInputFieldのオブジェクトをアタッチする
    [SerializeField] private InputField TestInputField;
   
    void Start()
    {
        //インプットフィールドのテキスト変更
        TestInputField.text = "インプットフィールドのテキスト変更";
    }

}

【Unity】ボタン 「通常、ハイライト時、押し込み時、選択時、無効時」の各状態色をスクリプトから動的変更する方法

ボタン状態による色変更をするスクリプトのメモ

半年前に参考にした元サイトが見つかりませんでした。すいません。

ボタンの色は、
”ボタンコンポーネント”の中の”ColorBlock”の中の”変数”を変更することで色変更できます。

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


 ///【機能】 ボタン状態による色変更
 ///【第一引数】色を変更したいボタン
 ///【第二引数】変更したい色(new Color32(byte a,byte b,byte c,byte d)) 
 ///【第三引数】色を変更したい状態(0:normalColor 1:highlightedColor 2:pressedColor 3:selectedColor 4:disabledColor)
    private void ButtonStateColorChange(Button button, Color32 color, int changeState)
    {
        ColorBlock colorblock = button.colors;
        switch (changeState)
        {
            case 0://normalColor
                colorblock.normalColor = color;
                break;
            case 1://highlightedColor
                colorblock.highlightedColor = color;
                break;
            case 2://pressedColor
                colorblock.pressedColor = color;
                break;
            case 3://selectedColor
                colorblock.selectedColor = color;
                break;
            case 4://disabledColor
                colorblock.disabledColor = color;
                break;
        }
        button.colors = colorblock;
    }



    //例-----------------------------------------------------

    [SerializeField] private Button stage_button;//ボタンコンポーネントの変数を宣言 変更したいボタンをアタッチ
    private Color32 button_color;//Color32型の変数を宣言


    private void Start()
    {
        //色設定
        button_color = new Color32(10, 40, 255, 255);

        //設定した色をstage_buttonを押した時の色へ設定
        ButtonStateColorChange(stage_button, button_color, 3);
    }

【Unity】配列の中の配列 Listでジャグ配列を使う際の初期化の方法

Listを二重に使った際のメモ

初期化はこちら

//配列[1]の中の配列を初期化
Test_List[1] = new List<int>();


テストで作ったスクリプト

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


public class TestScript : MonoBehaviour
{
    public List<List<int>> Test_List = new List<List<int>>()//リストの宣言
    {
      // Listの中にListを追加して初期化
      new List<int>(),//[0]の中の配列
      new List<int>(),//[1]の中の配列
      new List<int>(),//[2]の中の配列
    };


    void Start()
    {    
        Debug.Log("配列[0]の中の配列[0~2]に5,6,7をいれる");
        for (int i = 0; i < 3; i++)
        {
            Test_List[0].Add(i+5);
            Debug.Log(Test_List[0][i]);
        }

        Debug.Log("配列[1]の中の配列[0~5]に8,9,10,11,12,13をいれる");
        for (int n = 0; n < 6; n++)
        {
            Test_List[1].Add(n+8);
            Debug.Log(Test_List[1][n]);
        }

        Debug.Log("配列[2]の中の配列[0~8]に10,11,12,13,14,15,16,17,18をいれる");
        for (int p = 0; p < 9; p++)
        {
            Test_List[2].Add(p+10);
            Debug.Log(Test_List[2][p]);
        }

        Debug.Log("配列[0]の中の配列[1]は" + Test_List[0][1]);
        Debug.Log("配列[1]の中の配列[1]は" + Test_List[1][1]);
        Debug.Log("配列[2]の中の配列[1]は" + Test_List[2][1]);

        //配列[1]の中の配列を初期化
        Debug.Log("配列[1]の中の配列を初期化");
        Test_List[1] = new List<int>();

        //配列0の中の配列の中を全部見る
        Debug.Log("配列[0]の中身");
        for (int i1 = 0; i1 < Test_List[0].Count; i1++)
        {
            Debug.Log(Test_List[0][i1]);
        }

        Debug.Log("配列[1]の中身");
        for (int n1 = 0; n1 < Test_List[1].Count; n1++)
        {
            Debug.Log(Test_List[1][n1]);
        }

        Debug.Log("配列[2]の中身");
        for (int p1 = 0; p1 < Test_List[2].Count; p1++)
        {
            Debug.Log(Test_List[2][p1]);
        }
    }
 }

参考

ict119.com

smdn.jp