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

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

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

【Unity】押したボタンを取得してその子のテキストを変更する方法

押したボタンを取得してその子のテキストを変更する方法(タイトル長い)
を開発用にメモ

using System;
using UnityEngine;
using UnityEngine.EventSystems;//追加
using UnityEngine.UI;//追加

public class ChangeButtonText : MonoBehaviour {

    // eventSystem型の変数を宣言 インスペクターにEventSystemをアタッチして取得しておく
    [SerializeField] private  EventSystem eventSystem;
   
    //GameObject型の変数を宣言 ボタンオブジェクトを入れる箱
    private GameObject button_ob;

    //GameObject型の変数を宣言 テキストオブジェクトを入れる箱
    private GameObject NameText_ob;

    //Text型の変数を宣言 テキストコンポーネントを入れる箱
    private Text name_text;



    //ボタンにこの関数を割り当てて使用
     public void ChangeButtonTextName()
    {
        //押されたボタンのオブジェクトをイベントシステムのcurrentSelectedGameObject関数から取得 
        button_ob = eventSystem.currentSelectedGameObject;
        
        //ボタンの子のテキストオブジェクトを名前指定で取得 この場合Text100と名前が付いているテキストオブジェクトを探す
        NameText_ob = button_ob.transform.Find("Text100").gameObject;

        //テキストオブジェクトのテキストを取得
        name_text = NameText_ob.GetComponent<Text>();

        //テキストを変更
        name_text.text = "変更後の文字列";        
    }
}

追記

有効なイベントシステムを↓で取得できるようなので少し改善

EventSystem.current;

使い所:導入したアセット等にEventSystemコンポーネントが入っていた時

イベントシステムが2つ以上あった場合、どちらか1つしか有効にならず、
無効なイベントシステムを参照している可能性があるため、
有効なイベントシステムを使う必要がある.

using System;
using UnityEngine;
using UnityEngine.EventSystems;//追加
using UnityEngine.UI;//追加

public class ChangeButtonText : MonoBehaviour {

    // eventSystem型の変数を宣言 
    private  EventSystem eventSystem;
   
    //GameObject型の変数を宣言 ボタンオブジェクトを入れる箱
    private GameObject button_ob;

    //GameObject型の変数を宣言 テキストオブジェクトを入れる箱
    private GameObject NameText_ob;

    //Text型の変数を宣言 テキストコンポーネントを入れる箱
    private Text name_text;



    //ボタンにこの関数を割り当てて使用
     public void ChangeButtonTextName()
    {
        //有効なイベントシステムを取得
        eventSystem=EventSystem.current;

        //押されたボタンのオブジェクトをイベントシステムのcurrentSelectedGameObject関数から取得 
        button_ob = eventSystem.currentSelectedGameObject;
        
        //ボタンの子のテキストオブジェクトを名前指定で取得 この場合Text100と名前が付いているテキストオブジェクトを探す
        NameText_ob = button_ob.transform.Find("Text100").gameObject;

        //テキストオブジェクトのテキストを取得
        name_text = NameText_ob.GetComponent<Text>();

        //テキストを変更
        name_text.text = "変更後の文字列";        
    }
}

参考

note.com

dkrevel.com

【Unity】スクリプトからボタンを押す方法

アプリ開発備忘録用にメモ

「このボタンの処理をそのままこっちでも起動させたい!」って時に便利です。

コード

using UnityEngine;
using UnityEngine.UI;//追加
 
public class Test : MonoBehaviour 
{
 
    public Button test_button;//ボタン型の変数を宣言 起動したいボタンをアタッチ
 
    void Start()
    {
        test_button.onClick.Invoke();//起動したいボタンが入った変数.onClick.Invoke()
    }
}

Invoke()は遅延処理のイメージがあって引数として
括弧内に何かいれないといけないかなと思いましたが、不要でした。

参考

watablog.tech

【Unity】アニメーションをスクリプトから動的変更 Simple Animation 関数まとめ

自分用にSimple Animationの関数まとめ 

Simple Animationとは

tsubakit1.hateblo.jp

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

public class AnimeTest : MonoBehaviour
{

    private SimpleAnimation simpleAnimation;

    [SerializeField] private AnimationClip anime_clip;

    void Start ()
    {
        simpleAnimation = GetComponent<SimpleAnimation>();


        // デフォルトのクリップを再生する
        simpleAnimation.Play();

        // 特定のクリップを再生する
        simpleAnimation.Play("AAA");

        // アニメーションを停止する
        simpleAnimation.Stop();

        // 再生中のアニメーションを頭から流しなおす
        simpleAnimation.Rewind();

        // 1秒かけてAAAステートに遷移する
        simpleAnimation.CrossFade("AAA", 0.2f);


        //アニメとステート追加する
        simpleAnimation.AddState(anime_clip, "CCC");

        //前のアニメーションが終わった後に切り替える
        simpleAnimation.CrossFadeQueued("AAA", 0.2f, QueueMode.CompleteOthers);
        simpleAnimation.CrossFadeQueued("BBB", 0.2f, QueueMode.CompleteOthers);

        //アニメーション全停止 重要 CrossFadeQueuedでエラー出た時は直前に使う
        simpleAnimation.Stop();

    }
    
    void Update()
    {
        //Aキーを押すとデフォルトに設定したアニメーションの再生
        if (Input.GetKeyDown(KeyCode.A))
        {
            simpleAnimation.CrossFade("Default", 0.3f);
        }

        //Sキーを押すとステート名AAAのアニメーションを再生
        if (Input.GetKeyDown(KeyCode.S))
        {
            simpleAnimation.CrossFade("AAA", 0.3f);
        }




        //アニメーション終了の検出
        if (!simpleAnimation.isPlaying)
        {
            Debug.Log("アニメ終了");
        }
        else
        {
            Debug.Log("アニメ実行中");
        }
    }
}

【Unity】Animator 現在再生中のアニメーションクリップの名前を取得

Animatorメモ

現在再生中のアニメーションクリップの名前を取得 (ステート名ではない)

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

public class Animetest : MonoBehaviour
{
    [SerializeField] private Animator animator;//Animator型の変数を宣言 Animatorコンポーネントをアタッチしておく

    private AnimatorClipInfo[] animator_clipinfo1;//AnimatorClipInfo型の変数を宣言
    private string clip_name;//string型の変数を宣言 アニメーションクリップ名前取得用


    void Start()
    {
        
        animator_clipinfo1 = animator.GetCurrentAnimatorClipInfo(0);//現在のアニメーションクリップの情報を取得 引数0はレイヤーの番号

        clip_name = animator_clipinfo1[0].clip.name;//名前を取得
        
        Debug.Log(clip_name);//コンソールに表示
    }
}

【Unity】Animator 現在再生中のステート長さを取得する2つの方法

Animatorについてメモ

現在再生中のステート長さ(時間)を取得します。

1つ目 ステートの再生スピードによって取得結果が変わる

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

public class Animetest : MonoBehaviour
{

    [SerializeField] private Animator animator;//Animator型の変数を宣言 Animatorコンポーネントをアタッチしておく
    private AnimatorStateInfo animator_stateinfo1;//AnimatorStateInfo型の変数を宣言
    private float state_time01;//float型の変数を宣言 ステートの時間取得用


    void Start()
    {
        animator_stateinfo1 = animator.GetCurrentAnimatorStateInfo(0);//現在のステートの情報を取得 引数0はレイヤーの番号
       
        state_time01 = animator_stateinfo1.length;//ステート長さを取得
        //ちなみにここで取得した値は再生スピード設定をふまえた時間
        //再生スピードが2倍なら本来の時間より半分になる        


        Debug.Log(state_time01);//コンソールに表示
    }
}

docs.unity3d.com

2つ目 ステートの再生スピードによって取得結果が変わらない

追記:ステート長さというより再生中のアニメーションクリップの長さを取得
   といったほうが良いですね。

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

public class Animetest : MonoBehaviour
{    
    [SerializeField] private Animator animator;//Animator型の変数を宣言 Animatorコンポーネントをアタッチしておく
   
    private AnimatorClipInfo[] animator_clipinfo1;//AnimatorClipInfo型の変数を宣言
    private float state_time01;//float型の変数を宣言 ステートの時間取得用


    void Start()
    {       
        animator_clipinfo1 = animator.GetCurrentAnimatorClipInfo(0);//現在のアニメーションクリップの情報を取得 引数0はレイヤーの番号
        
        state_time01 = animator_clipinfo1[0].clip.length;

        Debug.Log(state_time01);//コンソールに表示
    }
}

docs.unity3d.com

【Unity】シネマシーン アセットストアから削除 それでもインストールする2つの方法 Cinemachine

環境:Unityバージョン 2020.1.1f1

カメラワークに便利そうな"シネマシーン"

使ってみよう思ったら、アセットストアに無い!!!(涙目)

シネマシーン

このことをツイッターでつぶやいたら、

幸運にもインストールする方法を教えていただいたので共有します。

なんて優しい世界...

インストール方法1

1.パッケージマネージャーを開く

ウインドウ→パッケージマネージャー

パッケージマネージャー開く

2.パッケージマネージャー設定

「Packages:In Project」ボタンを押す→「Unity Registry」を選択

unity registry

3.パッケージ一覧から探す

一覧にあるはずです。 シネマシーン探す

インストール方法2

1.パッケージマネージャーを開く

ウインドウ→パッケージマネージャー

パッケージマネージャー開く

2.パッケージマネージャー設定

GitHubのURL指定でPackageを導入できるようにする

パッケージマネージャー→左上の+ボタン→Add package from git URL...

パッケージマネージャー

3.URL入力

Add package from git URL...を選択すると

URLを入力する欄があわれるので

シネマシーン入力

と入力→「追加」ボタン

入力後しばらく待つと...

シネマシーンが表示され勝手にPackagesフォルダに入ります!!

シネマシーン出現

勝手に

おわりに

他のパッケージをインストールする時にも使えるので、下記リンクの保存をオススメします。

参考 helpdesk.unity3d.co.jp

これがブレイクスルー!? 副業アプリ個人開発1年4ヶ月の広告収益公開 2020年8月

f:id:marumaro7:20200829212044p:plain

本記事では前回記事からの活動状況と収益の推移を報告します。

marumaro7.hatenablog.com

まずは結果発表!!

ドンッ!!

収益グラフ

うおぉぉぉ!!
なにこれぇぇぇ!!
13,000円!?!?
突然増え過ぎてなにがなんだがわかりませぬ。。。
これがブレイクスルーってやつですか???

突然何があったの?

8月の最初に脱出ゲームをリリースしました。(制作期間2ヶ月)
収益の98%はこの脱出ゲームが生み出してくれています。

今まで作ったアプリの全てを使って生み出したアプリです。
(でも、クオリティ自体は他の脱出ゲームに比べたらかなり低いです。)

play.google.com

apps.apple.com

お礼
ツイッターで宣伝してくださったみなさま
ならびにレビューしてくださったアプリ紹介サイト様
おかげさまでAndroid 部門別急上昇ランキング1位まで獲得できました!!
ご協力いただき厚く御礼申し上げます。 marumaro7.hatenablog.com

しかし現在の収益は・・・

日割りの収益額として、最大で2800円ありましたが、

毎日のアプリインストール数は下がり続け、 月末には60円や90円となっております。

さらにストア検索にでてこない

また、アンインストール率が多いせいか
アプリストアから検索で表示されなくなってしまいました。(悲しい)

とはいうものの脱出ゲームは強い

今まで様々なジャンルのアプリを7本リリースして最大月収380円という結果でした。
今回リリースした脱出ゲームアプリ1本で約34倍の収益です。
アプリのジャンルでこんなにも反応が違うのかと驚いています。

脱出ゲームのジャンルは、ライバルがひしめく環境があるのも事実ですが、
ひとつのアプリにユーザーが固定されることがないので
かなりインストールされやすいです。

収益を狙うなら間違いなく狙い目のジャンルです。

今回、私の脱出ゲームはストア検索から外れてしまいましたが、
やり方次第では、ストア検索で表示され続け、継続的なインストールも狙えると感じています。

脱出ゲームを作りたい方向け教材

脱出ゲームをいざ作ろうと思うと
そこまで情報がないのでオススメの動画教材を載せておきます。

無料教材

脱出ゲームの作り方の基礎からプログラムの効率化まで解説されています。
この情報でかなり助けられました。
一人でやってたら絶対にプログラムは煩雑なものとなり、制作期間は倍増してました。 www.youtube.com

有料教材 (全12時間分)

こちらはプログラムなんもわからん!という超初心者さんでも大丈夫なやつです。

そして、一番ありがたいのは無料教材で語られていないセーブ機能の実装が
1時間40分にもわたり解説されていること。

売れてる脱出ゲームには当たり前のようについているセーブ機能ですが
私のような「ちょっとUnityかじった程度の人」には実装が結構しんどいです。
仮に実装できてもすごく管理しづらいコードになってしまいます。

こちらの教材は私が脱出ゲームをリリースした直後に出てきたのでもっと早く
出てほしかった〜><となりました。

おわりに

今年の収益目標としてアップルデベロッパー代回収を目標に活動していました。
(年間大体12,000円)

まずは、この目標が達成できたので大満足です。
今回の収益は一過性のものなので、新しいアプリ開発をして収益を底上げしたいと思います。



現在は3Dアプリを開発中で
3D実装関係、エフェクト作成、シェーダー、宣伝の仕方
の本を18,000円分買ってしまって、せっかく出た収益を吹き飛ばす暴挙に出ています笑
(まだオンラインまわりの本がほしぃという・・・)

ここまで読んでくださった方へのお願い

文中にも触れましたが、脱出ゲームアプリは現在ストア検索にひっかからない状況です。
この記事が少しでもあなたの糧になりましたら
下記ツイートをリツイートしていただけたら幸いです。