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 5 years have passed since last update.

会話色々※ほぼメモ

Posted at
ActiveMessagePanel.cs

using UnityEngine;
using System.Collections;

public class ActiveMessagePanel : MonoBehaviour
{
    
    // MessageUIに設定されているMessageスクリプトを設定
    [SerializeField]
    private Message messageScript;

    // 表示させるメッセージ
    public string[] message; 
    // Update is called once per frame
    void Update()
    {
        if (Input.GetButtonDown("Fire2"))
        {
            messageScript.SetMessagePanel(message);
        }
    }
}

Message.cs
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class Message : MonoBehaviour
{

    //Canvasの表示非表示
    public bool isActive;
    public GameObject canvas;
    // メッセージUI
    private Text messageText;
    // 表示するメッセージ
    private string message;
    // 1回のメッセージの最大文字数
    [SerializeField]
    private int maxTextLength = 90;
    // 1回のメッセージの現在の文字数
    private int textLength = 0;
    // メッセージの最大行数
    [SerializeField]
    private int maxLine = 3;
    // 現在の行
    private int nowLine = 0;
    // テキストスピード
    [SerializeField]
    private float textSpeed = 0.05f;
    // 経過時間
    private float elapsedTime = 0f;
    // 今見ている文字番号
    private int nowTextNum = 0;
    // マウスクリックを促すアイコン
    private Image clickIcon;
    // クリックアイコンの点滅秒数
    [SerializeField]
    private float clickFlashTime = 0.2f;
    // 1回分のメッセージを表示したかどうか
    private bool isOneMessage = false;
    // メッセージをすべて表示したかどうか
    private bool isEndMessage = false;
    //会話
    private string[] conversation;
    // 文字列の列
    private int i=0;
    //文字列の総行数
    private int stringsCount = 0;
    
    void Start()
    {
        gameObject.SetActive(isActive);
        clickIcon = transform.Find("Panel/Image").GetComponent<Image>();
        clickIcon.enabled = false;
        messageText = GetComponentInChildren<Text>();
        messageText.text = "";
        
    }

    void Update()
    {
        // メッセージが終わっていない、または設定されている
        if (isEndMessage || message == null)
        {
            return;
        }

        // 1回に表示するメッセージを表示していない	
        if (!isOneMessage)
        {

            // テキスト表示時間を経過したら
            if (elapsedTime >= textSpeed)
            {
                messageText.text += message[nowTextNum];
                // 改行文字だったら行数を足す
                if (message[nowTextNum] == '\n')
                {
                    nowLine++;
                }
                nowTextNum++;
                textLength++;
                elapsedTime = 0f;

                // メッセージを全部表示、または行数が最大数表示された
                if (nowTextNum >= message.Length || textLength >= maxTextLength || nowLine >= maxLine)
                {
                    isOneMessage = true;
                }
            }
            elapsedTime += Time.deltaTime;

            // メッセージ表示中にマウスの左ボタンを押したら一括表示
            if (Input.GetMouseButtonDown(0))
            {
                // ここまでに表示しているテキストを代入
                var allText = messageText.text;

                // 表示するメッセージ文繰り返す
                for (var i = nowTextNum; i < message.Length; i++)
                {
                    allText += message[i];

                    if (message[i] == '\n')
                    {
                        nowLine++;
                    }
                    nowTextNum++;
                    textLength++;

                    // メッセージがすべて表示される、または1回表示限度を超えた時
                    if (nowTextNum >= message.Length || textLength >= maxTextLength || nowLine >= maxLine)
                    {
                        messageText.text = allText;
                        isOneMessage = true;
                        break;
                    }
                }
            }
            // 1回に表示するメッセージを表示した
        }
        else
        {

            elapsedTime += Time.deltaTime;

            // クリックアイコンを点滅する時間を超えた時、反転させる
            if (elapsedTime >= clickFlashTime)
            {
                clickIcon.enabled = !clickIcon.enabled;
                elapsedTime = 0f;
            }

            // マウスクリックされたら次の文字表示処理
            if (Input.GetMouseButtonDown(0))
            {
                Debug.Log(messageText.text.Length);
                messageText.text = "";
                nowLine = 0;
                clickIcon.enabled = false;
                elapsedTime = 0f;
                textLength = 0;
                isOneMessage = false;

                // メッセージが全部表示されていたらゲームオブジェクト自体の削除
                if (nowTextNum >= message.Length)
                {
                    nowTextNum = 0;
                    if (i == stringsCount - 1)
                    {
                        isEndMessage = true;
                        transform.GetChild(0).gameObject.SetActive(false);
                    }
                    else
                    {
                        i++;
                        SetMessage(conversation[i]);
                    }
                    // それ以外はテキスト処理関連を初期化して次の文字から表示させる
                }
            }
        }
    }

    void SetMessage(string message)
    {
        this.message = message;
    }
    // 他のスクリプトから新しいメッセージを設定
    public void SetMessagePanel(string[] message)
    {
        i = 0;
        stringsCount = message.Length;
        conversation = message;
        canvas.SetActive(true);
        SetMessage(conversation[0]);
        transform.GetChild(0).gameObject.SetActive(true);
        isEndMessage = false;
    }
}
kaisou.cs
using UnityEngine;
using System.Collections;

public class kaisou : MonoBehaviour
{

    // MessageUIに設定されているMessageスクリプトを設定
    [SerializeField]
    private Message messageScript;

    // 表示させるメッセージ
    public string[] message;
    // Update is called once per frame
    void Start() {
        messageScript.SetMessagePanel(message);
    }

    void Update()
    {
        
    }
}
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?