iOS/Androidで最高にリアルな3D表示を実現できた
「ミニチュアストーリーズ」でスマートフォンでリアルの3D表現を追求して、そこからさらに精度をあげて、かつ軽量なデータを実現する手法がだいたいわかってきた。
まだ改善の余地はあるけど、このレベルでスマートフォンで表示できるのは実用レベルになってきたと思う。ちなみに上のドーナッツはUnityで作ってGalaxy S6で操作しているもの。下のミニチュアストーリーズと比べてみると面白いです。
「ミニチュアストーリーズ」でスマートフォンでリアルの3D表現を追求して、そこからさらに精度をあげて、かつ軽量なデータを実現する手法がだいたいわかってきた。
まだ改善の余地はあるけど、このレベルでスマートフォンで表示できるのは実用レベルになってきたと思う。ちなみに上のドーナッツはUnityで作ってGalaxy S6で操作しているもの。下のミニチュアストーリーズと比べてみると面白いです。
アカデミー賞短編映画賞にノミネートされた「Pearl」
グーグルのVRアニメ『Pearl』 VR作品初のアカデミー賞ノミネート
ミュージシャンの父と娘の物語が、車の中に固定された視点で進んでいきます。過去の記憶と現在が入れ替わりながら父と娘の成長が描かれ、VRの没入感とテンポの良さが心地いい作品です。何度も見ました。自分にも娘がいるので何度見てもウルっときます。
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);
}
}
こうしてやる
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にコピーしてから開かないといけない。
メッシュの情報をとる方法に少しハマったので備忘録
ローカル座標ではmeshfilter.mesh.boundsではなくてrenderer.boundsという話。
別のプロジェクトで作ったものを、いったん.unitypackageでエキスポートしたのですが、インポートすると、エディタでは問題なく動くのに、実機転送すると動かなくなる現象があり、むちゃくちゃハマりました。
むちゃくちゃ簡単
ffmpeg -i movie.mp4 -s 1136x640 movie.mp4
UnityのlookAtは便利ですが、回転をさらに細かく制御しようと思うと難しいので置き換えます。
Rot.transform.LookAt (Vector3.zero);
こうするところを、
Vector3 relative = gameObject.transform.InverseTransformPoint(Vector3.zero);<br />
float angle = Mathf.Atan2(relative.x, relative.z) * Mathf.Rad2Deg;<br />
Rot.transform.localRotation = Quaternion.Euler(0,angle - 90.0f, 0);
こうしてあげると、Vector3.zeroをむきつつ90.0度Y軸回転をできます
<script type="text/javascript">
var client_id = "クライアントID";
var scopes = 'https://www.googleapis.com/auth/drive';
function checkAuth() {
gapi.auth.authorize(
{
'client_id':client_id,
'scope':scopes,
'immediate':true
},
function(authResult){
console.log(arguments);
});
}
</script>
<script type="text/javascript" src="https://apis.google.com/js/client.js?onload=checkAuth"</script>
こんな感じで認証部分を記述しても何度やってもこのエラーが。。