SceneView 内での World 座標取得

検索して出てくるコードではうまくいかなかった。Retina とかの高解像度の際のためかな? scaledPixelHeight でもだめだったけど、 EditorGUIUtility.pixelsPerPoint を使ったらうまくいった。

static StageGeneratorHelper()
{
    SceneView.duringSceneGui += OnSceneViewGUI;
    stageDebugger = Object.FindObjectOfType<StageDebugger>();
}

private static void OnSceneViewGUI(SceneView obj)
{
    Event e = Event.current;

    Vector3 mousePosition = Event.current.mousePosition * EditorGUIUtility.pixelsPerPoint;
    mousePosition.y = SceneView.currentDrawingSceneView.camera.pixelHeight - mousePosition.y;
    mousePosition = SceneView.currentDrawingSceneView.camera.ScreenToWorldPoint(mousePosition);
    mousePosition.z = 0f;

    // 適当なものを追従させる
    GameObject.Find("ゲームオブジェクトの名前").transform.position = mousePosition;
}

TextMesh Pro のマテリアルの入れ替え

TextMesh Pro 3.0.6 (Unity2021.3.4f1) で TMP のマテリアルを変えるとき。
1. tmp.fontSharedMaterial => tmp.font の順に変える
2. 同じ FontAsset の場合には登録はしなおさない
とかやらないと表示されなくなることがある?

Timeline でアニメーションが相対的になる

Animator で動かした場合と違って Timeline でたまに座標が相対的(?)になってしまうことがたまにあり??となってたけど、Timeline の Clip に Remove Start Offsetという設定があってこれをオフにしたら期待通りの動きになった。どういうときに On になって、どういうときに Off になるのかは不明。

fbx のアニメーションの名前

Blender から Unity に fbx を持ってきた際にアニメーションの名前の前に Armature の名前が自動で付くけど、どこで変えるかよく忘れるのでメモ。
Import Settings の Animation タブで、Clip を選択して名前を変更。
更新するか聞かれるので OK。ただこれをやると fbx を更新しても Unity に反映されなくなる?

TextMesh Pro のアニメーション

TextMesh Pro の文字を動かす方法。
1文字づつが4頂点あるのでそれを動かすと動く。新たに文字をセットするとすべてリセットされる。
CPU で動くので本当は Shader でやるとよさそう。

TMP_CharacterInfo characterInfo = this.tmpText.textInfo.characterInfo[charIndex];
int vertexIndex = characterInfo.vertexIndex;
Vector3[] vertices = this.tmpText.textInfo.meshInfo[characterInfo.materialReferenceIndex].vertices;

for (int j = 0; j < 4; ++j)
{
    int index = vertex_index + j;
	vertices[index] = // 座標を入れる
}

AnimatorController を EditorScript から生成

AnimatorController を生成する際に
Activator.CreateInstance(typeof(AnimatorController);
で作ってたら保存されなかったり、ステートの追加がうまくいかなかったりとハマってしまった。
AnimatorController.CreateAnimatorControllerAtPath();
こういう右クリックから作るのと同様にいろいろデフォルトの準備をしてくれる便利なのがあったのね。。

Raspberry Pi と Unity


Raspberry Pi4 を買ってちょっと遊んでる。
いったん簡単なサンプルができたので自分メモ。
作ったのはタクトスイッチを押したら Python から LED を光らせつつ OSC を Mac に送り、Mac 側の Max で受信。それをそのまま Unity で再び OSC で localhost に渡してキューブに AddForce() とかをさせる。
Max を使わず Unity で直接 OSC で受けてもいいけど単純に使ってみたかったのだけ。

Continue…

4ch のサウンド


Unity2019/2020 で4chのサウンドで右後ろの音が鳴らないような…
Windows でサウンドの設定を Quad に、Unity 上も Quad。
Project Window でのプレビューでは問題なく鳴るけど、実行すると鳴らないのでバグかな…?