[Unity] CanvasScalerと座標

uGUIやRectTransformを使った画面のレイアウトをスクリプトから制御しようと思うと、座標の扱い方で混乱することがあるのでメモ。

mousePositionやtouchesの座標 > 画面の解像度座標
uGUI(RectTransform) > CanvasScaler内の座標

なので、座標の変換が必要

UnityでiOSのビルドをしてxcodeでアーカイブするときによくでるエラー

その1
.......MapFileParser.sh: Permission denied

まんまパーミッションを変更する

chmod +x MapFileParser.sh

その2

clang: error: no such file or directory: '......../Classes/Prefix.pch'

clang: error: no input files

どこか別のxcodeプロジェクトから同じファイルをコピペしてもってくる

あせることはない、コピペでいいんだぜ

Apple LLVM 8.0 clang: error: no such file or directory:xxx/Prefix.pch がxcodeで出た時


Apple LLVM 8.0 clang: error: no such file or directory:xxx/Prefix.pch

Unityでビルドするとたまに出る。Build settingのPrefix Headerを見るとClasses/Prefix.pchとなってるけど、実際には存在しないので、そういう時は他のUnityでビルドしたプロジェクトからコピペして対処すればOK

iOS/Androidで最高にリアルな3D表示を実現できた

ミニチュアストーリーズ」でスマートフォンでリアルの3D表現を追求して、そこからさらに精度をあげて、かつ軽量なデータを実現する手法がだいたいわかってきた。

まだ改善の余地はあるけど、このレベルでスマートフォンで表示できるのは実用レベルになってきたと思う。ちなみに上のドーナッツはUnityで作ってGalaxy S6で操作しているもの。下のミニチュアストーリーズと比べてみると面白いです。

Unity Listからforeachを使ってremoveする


foreach(Class item in Lists){
 if(item.id == id){ 
  Lists.remove(item);
 }
}

こんなかんじでやると、

InvalidOperationException: Collection was modified; enumeration operation may not execute.

とエラーになるので、


List<Class> TmpList = Lists;
foreach(Class item in Lists){
 TmpList.Add(item );
}

foreach(Class item in TmpList){
 if(item.id == id){ 
  Lists.remove(item);
 }
}

こうしてやる

Unity StreamingAssetsからファイルを読み出す

Streaming Assets で iOSとAndroidの違いにハマったのでメモ。

string FilePath;
#if UNITY_IPHONE
  FilePath = Application.dataPath + "/Raw/" + filename;
#else
  string fullPath = "jar:file://" + Application.dataPath + "/!/assets/" + filename;
  WWW www = new WWW (fullPath);
    while (!www.isDone) {
  }
  FilePath = Application.persistentDataPath + filename;
  File.WriteAllBytes (toPath,www.bytes);
#endif

iOSはそのままパスからファイル読み込みできるけど、Androidは一度Application.persistentDataPathにコピーしてから開かないといけない。

Unity Export Packageは実機でtagの情報を引き継がない

別のプロジェクトで作ったものを、いったん.unitypackageでエキスポートしたのですが、インポートすると、エディタでは問題なく動くのに、実機転送すると動かなくなる現象があり、むちゃくちゃハマりました。

もとのプロジェクトでつけてたtagがエキスポートすると引き継がれないのですが、エディタ上でプレファブのインスペクタのタグをみると、普通にタグがかかれているため、バグの発見に時間がかかりました。タグはよく使っていたので今後は注意します。

と思ったら引き継がれてました。。。あれ、どこでタグが消えてしまったんだろう。。。