トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

3D文字を表示させるLookingGlassコンテンツ制作【文字入力編】

 続き

bibinbaleo.hatenablog.com

日本語

まえはスクリプトを入れないと日本語を使えなかったのですが、今やったら使えました。

f:id:bibinbaleo:20190609212401j:plain

bibinbaleo.hatenablog.com

入力したら表示されるようにする

InputField

テキスト入力は、とりあえず無難にInputFieldを使ってみる.

tech.pjin.jp

InputFieldを置いて、スクリプトを書く。

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

public class fontmaker : MonoBehaviour
{
    public InputField inputfield;

    public void onEndText()
    {
        FlyingText.GetObjects(inputfield.text);
        InitInputField();
    }

    void InitInputField()
    {

        // 値をリセット
        inputfield.text = "";

        // フォーカス
        inputfield.ActivateInputField();
    }
}

そしてInputFieldのOnEndのところにonEndTextを付ける。

f:id:bibinbaleo:20190616204545p:plain

これで入力してEnterを押したら文字が落ちてくるようになった!!

f:id:bibinbaleo:20190616204540p:plain

カーソルの幅とかいろいろ設定できるのでする。

f:id:bibinbaleo:20190616210030p:plain

FlyingText

FlyingTextのスクリプト部分はこんな感じ。

 Vector3 random = new Vector3(Random.Range(-10.0f, 4.0f), 5, Random.Range(-1.5f, 6.0f));
 float size = Random.Range(1.2f, 4.6f);
        FlyingText.GetObjects(inputfield.text,material,edgeMaterial,size,0.25f,5,random, Quaternion.identity);

要素はこんな感じ。(付属のpdfに解説があるよ)

GetObject

(text : String,

material : Material,

edgeMaterial : Material,

size : float,

extrudeDepth : float,

resolution : int,

position : Vector3 = Vector3.zero,

rotation : Quaternion = Quaternion.identity)

サイズと生成位置をランダムにした。

生成位置を変えるだけなら

FlyingText.GetObject ("Hello", new Vector3(0, 5, 10), Quaternion.Euler(0, 90, 0));

みたいに位置と角度だけ指定したらいいけど、sizeも変えるには上みたいにいっぱい他も指定しないといけないみたい。

色を変えたいと思ったけど、過去の自分も試しててできてなかった。

成長したところを見せてやろうか!っと思ったけどめんどくさいからいいや。

マテリアルをグラデーションのあるものにしたら、文字同士の色に変化出るかも

文字全消し

Clearボタンを押したら文字が全部消えるようにしたい

www.sejuku.net

今は3DText(XX)という名前のオブジェクトが生成されているだけ。

f:id:bibinbaleo:20190616215153p:plain

これを全部消すには名前で探す、もしくはテキストを空のゲームオブジェクトの子として生成されるようにして、その子をまとめて消すか。

名前で探すのは重いし、一つだけしか消えない気がするので、子オブジェクトにして消します

qiita.com

 

できたスクリプトがこちら

    public void onEndText()
    {   
        Vector3 random = new Vector3(Random.Range(-10.0f, 4.0f), 5, Random.Range(-1.5f, 6.0f));
        float size = Random.Range(1.2f, 4.6f);
        GameObject obj = FlyingText.GetObjects(inputfield.text,material,edgeMaterial,size,0.5f,5,random, Quaternion.identity);
        obj.transform.parent = parentObj.transform;
        InitInputField();
    }

    public void OnDestroyfont()
    {
        foreach (Transform child in parentObj.transform)
        {
            // 一つずつ破棄する
            Destroy(child.gameObject);
        }
    }

これで子要素になる

obj.transform.parent = parentObj.transform;

 

完璧な挙動!!一発でできて気持ち良すぎる。我天才か?

録画

ゲーム画面を良い感じにキャプチャする方法ないかな

OBSで画面キャプチャで選んだらこんな感じ。

www.youtube.com

こちらのツイートみたいに2Dで動画取りたい。

ちなみにこのスクショはここに保存される。

f:id:bibinbaleo:20190616222906p:plain

取りあえず画像

手振れがひどいけど動画

www.youtube.com

できた

カメラを追加して、ターゲットディスプレイ2にして、ゲームビュー追加してdisplay2を表示したらできた。

Windowsの設定でメインの解像度を100%にしないと1xにならない。

youtu.be

次回

音を付けたり、なんか雰囲気いい感じにしてストア登録したいお気持ち。

全体スクリプト

gist.github.com