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

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

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

【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

【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);//コンソールに表示
    }
}