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] = // 座標を入れる
}

M5Stick を使った呼び鈴

リビングから呼んでもらうときのインターフォン的なものを。Arduino (M5Stick) を使って、こちらの部屋の Raspberry Pi に OSC を飛ばして電子ブザーを鳴らす。受信した際に今度は逆側に受信信号を渡して Arduino 側のディスプレイに受信したよ(青になるだけ)と表示。ボタンを押すと「わかったよー」ということで再び OSC を飛ばして液晶と LED ライトを消す。
ついでに以前やった二酸化炭素濃度も950を超えると LED が付くようにして、SpreadSheet を見てなくてもいいように。

Continue…