2023年6月24日土曜日

音声合成、音声認識

 Windowsなどでは、なんとかなるが、WebGL(Unity)などでは、まだ発展途上のようだ。Html5などで、なんとかなるようだったので、試してみた。

https://www.petitmonte.com/javascript/web-speech-api.html

を参考にさせていただいた。


2023年6月11日日曜日

staticの使い方

 C#の基本をよくわかっていなかった。

class ABCで

 static int defを定義したら

ABC.defでアクセスするということ。インスタンス作成は不要。

Unity 複数AudioClip切り替え

 意外と手こずる。

https://futabazemi.net/unity/sound_multiple

こちらを参考にさせていただいた。

Inspectorで、AudioSourceを必要分、追加するところがミソだった。

AudioSourceとaudioclipをそれぞれSerializeFieldでスクリプトに記述。

これを知っておかないと、音声の扱いに苦労してしまう。知っている人には基本的なことなんだろうけど。

chtGPTより参考書が役立ったパターン

GPTのコードでうまく衝突判定がいかず、何度か質問したがなかなか解決しない。
結局、参考書で調べたら、3Dと2Dでは、イベント検知のメソッドは微妙に違うことを発見。
2Dでは、void OnTriggerEnter2D(Collider2D other)のようにするといいようです。2Dと3Dの間違いまでは、chatGPTは想定してなかったようだ。
 コリダーだけでなく、RigidBodyも追加しないと感知しないことにも注意必要。

DragAndDropで苦労する

 タブレットでDragAndDropを使いたくて、最初はELMで試したが、Windowsではうまくいっても、タブレットなどのタッチ操作はいまいち、不完全。
 そこで、UnityのWebGLでためしたら、うまくいったが、けっこうはまりどころはあった。ChatGPTからも聞きながら、
コードは、以下のものでよかったが、設定で注意点がある。
①Canvas下だとうまく動作しなかった。このへんは、ChatGPTもきづいてくれなかった。常識的なことなのかもしれないが、初心者には盲点。
②オブジェクトにはColliderを追加する。

public class DragAndDrop : MonoBehaviour
{
    public GameObject gameObject;
    private bool isDragging = false;
    private Vector3 offset;
    private void OnMouseDown()
    {
        if (Input.GetMouseButton(0))
        {
            isDragging = true;
            offset = gameObject.transform.position - GetMouseWorldPosition();
        }
       // Debug.Log("MouseDown");
    }
    private void OnMouseDrag()
    {
        if (isDragging)
        {
            gameObject.transform.position = GetMouseWorldPosition() + offset;
        }
    }
    private void OnMouseUp()
    {
        isDragging = false;
    }
    private Vector3 GetMouseWorldPosition()
    {
        Vector3 mousePosition = Input.mousePosition;
        mousePosition.z = Camera.main.nearClipPlane;
        return Camera.main.ScreenToWorldPoint(mousePosition);
    }
}

Inspector でSprite Renderer>Spriteの欄をSquareにして、その下にcanvasをつけて、図形を描画したものを動かすこともできる。
画像にしたかったら、Spriteの欄に画像PNGなどを持ってくることもできる。

2023年6月4日日曜日

Unity WebGLのビルドは大変

 設定を試行錯誤してようやくビルドできた。ディフォルトでは、メモリ不足でだめだったので。

Buid Settings:
Texture Compression :use player settings
Development Build :No Check
Code Optimization :Size
Max Texture Size : Max64
Txture Compression: Force Fast Compressor
Player Settings...:
Texture Compression format: DXT
Ligtmap Encoding :LowQuality
HDR Cubemap Encoding :LowQuality
IL2CPP Code Generation:Faster(smaller)builds
C++ Compliler Configuration :Debug <<<<これが重要というサイトの情報あり
Optimize Mesh Data*: No Check

Compression format :最初gzipにしたが、Github pagesで受け付けないので、なしにした。

2023年6月3日土曜日

ELMにChatGPTを活用

 マイナーなELM言語ではあるが、けっこうしっかりコードを考えてくれるので助かっている。

   indexToPosition =  toFloat >> (*) 60 >> (+) 10 >> Vector2.vec2 10

というカリー化を利用したもので、このままでは、x座標固定なので、y座標固定にするにはと聞いてみたら。

fixedYCoordinate y = \x -> Vector2.vec2 x y

とすればいいことを教えてくれた。なるほど、と納得です。活用すれば短時間で修正できて便利。