0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Unityでクイズに正解したときに画像を表示した

Posted at

使用環境

Unity 2020.3.17f1
Windows 10

目標

InputFieldに入力した文字列が指定した文字列と一致したときに特定の画像を表示する。
そして数秒後にシーンをアンロードする。

困った点

  1. 画像が表示できない
  2. 画像を表示しようとするとInputFieldの画像の操作がなされてしまう
  3. 正解した瞬間に画面が切り替えるのを防ぐため、コルーチンで数秒待機させようとするも0秒で終了してしまう
  4. 他のオブジェクトのスクリプトの関数を呼び出せない

1の解決法

SpriteRenderer型を使用して、enabledで表示非表示を切り替えた。

2の解決法

初めは画像をInputFieldにアタッチしていたのを、1つのオブジェクトとしてヒエラルキーのルートに設置した。その流れで画像表示に関するコードを新しいファイルに書き直した。

3の解決法

Invoke関数を使用した。

4の解決法

オブジェクトをアタッチして、GetComponent関数でスクリプトのデータを取得した。

コード例

以下はこの記事に関係のある部分だけ抜粋したものである。
コメントの(n)が関連した問題を示している。

正誤判定
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class Judge : MonoBehaviour
{
    private InputField _inputField;

    // 答え
    string answerStr = "トマト";

    // 画像表示関数呼び出し用 (4)
    CurrectSprite _current;
    public GameObject _obj;

    // 画像を表示してからシーンが遷移するまでの待機時間 (3)
    float waitTime = 1.5f;

    private void Start()
    {
        _inputField = GetComponent<InputField>();
        _inputField.Select();

        // (4)
        _current = _obj.GetComponent<CurrectSprite>();
    }

    /// <summary>
    /// テキスト取得
    /// </summary>
    public void GetText()
    {
        // 正解していたら
        if (isCorrect())
        {
            // 正解画像を表示 (1)
            _current.PrintCorrectImage();

            // このシーンを閉じる (3)
            Invoke("UnloadThisScene", waitTime);
        }
    }

    /// <summary>
    /// 正誤判定
    /// </summary>
    bool isCorrect()
    {
        if (answerStr == _inputField.text || answerStringKana == _inputField.text)
            return true;
        else
            return false;
    }

    // (3)
    void UnloadThisScene()
    {
        SceneManager.UnloadSceneAsync(1);
    }
}
画像表示
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CurrectSprite : MonoBehaviour
{
    SpriteRenderer _renderer;

    private void Start()
    {
        if (!TryGetComponent(out _renderer)) return;
        _renderer.enabled = false;
    }

    public void PrintCorrectImage()
    {
        _renderer.enabled = true;
    }
}

感想

これらの問題を解決するためにAI(phindや Chat GPT)を使用したらスムーズに解決することができた。AIをうまく使いこなせるようになると成長も早いだろうなと改めて思った。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?