前回メッシュのみの obj ファイルにボーンを追加した。
コマンドを忘れそうなので必要なものを覚書。
前回メッシュのみの obj ファイルにボーンを追加した。
コマンドを忘れそうなので必要なものを覚書。
Unityのほうで3Dをいじりたくなったけど、アセットやMMDなんかは種類が少ないのでボーンのない形式や形状だけのものを動かせるようにしたい。
調べながら Blender で試したことの覚書。
State の多い Animator を自由に動かすために編集するのが面倒。
そこでポーズ用の Animation を用意して、プログラムで設定したい。
アニメは初めてなのでユニティちゃんを例にいろいろと試してみる。
タイトルの通りWebGLのビルドが失敗する。
Failed running C:\Program Files\Unity\Editor\Data\il2cpp/build/il2cpp.exe --convert-to-cpp --compile-cpp --libil2cpp-static --platform="WebGL" --architecture="EmscriptenJavaScript" ....
エラーメッセージだけでは原因の特定ができずググった限り、多くの原因と解決法が見つかった。
対処方法と結果の覚書。
Unityでのスクリーンショットは非常に簡単に実装できます。
1 2 3 4 5 6 7 8 |
void SavePic(){ StartCoroutine (SavePicIE()); } IEnumerator SavePicIE(){ yield return new WaitForEndOfFrame(); int w = Screen.width; int h = Screen.height; Texture2D tex = new Texture2D (w, h, TextureFormat.RGB24, false); tex.ReadPixels (new Rect(0,0,w,h), 0, 0); } |
部分的なスクリーンショットをとる場合にはRectangleを変更する必要があります。
スマホは解像度の違いがありケースバイケースで条件を変える必要があります。
外部カメラの映像を以下のようにしてImageに貼り付けることができる。
1 2 3 4 |
public Image img; ... img.material.mainTexture = webcamTexture; ... |
ただこれだと、カメラ切り替えなどを行うと映像が停止してしまう。
物理カメラを扱うためのクラスWebCamTextureにこんな変数がある。
WebCamTexture.videoRotationAngle
右回りの角度 (度) を返します。多角形を回転させるためにその値を使用し、カメラのコンテンツを正しい向きで表示できます。
説明を見てもよくわからないので実際に使ってみる。
非常にニッチな不具合があったのでメモ。
InputFieldは入力用の機能だけど初期値なんかで値を入れたいこともある。
よくあるミスのTextクラスの書き換えではなく、ちゃんとInputFieldの書き換えを使って以下のようなコードを使った。
1 2 3 4 5 6 7 8 |
[SerializeField] InputField inX,inY,inR; public void SomeMethod(){ ... inX.text = ((int)(img.transform.position.x-initPx))+""; inY.text = ((int)(img.transform.position.y-initPy))+""; inR.text = ((int)img.transform.rotation.eulerAngles.z)+""; ... } |
Unityエディタ上では正しく動作し、アプリにしてAndroid実機で確認すると inY に当たるものだけ書き換わらなかった。
色々試したところ inY は最初の書き換えだけ成功してその後の書き換えはできない状態だった。
単純ミスも見つからないし、エディタ上で動く以上は何らかの不具合だろうと考えて処理を分けてみた。
1 2 3 4 5 6 7 8 9 10 11 |
[SerializeField] InputField inX,inY,inR; public void SomeMethod(){ ... int _x = (int)(img.transform.position.x-initPx); int _y = (int)(img.transform.position.y-initPy); int _r = (int)img.transform.rotation.eulerAngles.z; inX.text = _x+""; inY.text = _y+""; inR.text = _r+""; ... } |
すると問題なく動作するようになった。
必ず inY のみが書き換えられなかったので、計算の処理と書き換えの処理が入り混じっていたことが原因かもしれない。