三次元空間にグリッドをつくる
迷子を回避する
三次元空間に時間軸と空間軸を取って歴史を表示するデータベースをつくっている。
データ数がまだ少ないせいもあるけれど、
空間内での迷子感が否めない。
各データを表示するマーカー自体にも上下と北方向がわかる形を採用しているし
遠近感はマーカーの見え方(近ければ大きいし遠ければ小さい)で表現しているとはいえ、
なんとも心許ない。
なので、図書館の書棚にあたるグリッドを表示することにした。
まずは垂直な柱を立てる
世界198カ国・地域の首都の位置に、過去から未来を貫く柱を立ててみた。
といってもつくった柱は一本だけで、
それをprefabにして、CSVで各国首都の座標を入れて、複製したのだ。
おおお、きれいに立ったよ、ちょっと感動。
ところが、一人称視点で移動しようとしたら、
ずっとピープ音が鳴りっぱなし。
うーん、私のMacのスペックをオーバーしているのか?
別にMaterialに凝ったりしているわけではない。
ハイスペックなゲームのobject数からみたら、大したことないだろうと思うんだけれど、
まあ、何か手を打たなければ。
首都に建てる、という案を捨てて、
緯度経度、60度間隔で建てることにした。
0-0度に一本建てて、CSVで複製。
Scriptはこんな感じ。
using UnityEngine;
using System.Collections.Generic;
using System.IO;
public class ColumnImporter : MonoBehaviour
{
public GameObject columnPrefab; // プレハブを指定
public string fileName = "Columns"; // CSVファイル名
void Start()
{
// CSVファイルを読み込み、行ごとに分割する
TextAsset csvData = Resources.Load<TextAsset>(fileName);
string[] lines = csvData.text.Split('\n');
for (int i = 1; i < lines.Length; i++)
{
string[] parts = lines[i].Split(',');
if(parts.Length < 2) continue; //
float lat = float.Parse(parts[0]) * 10;
float lon = float.Parse(parts[1]) * 10;
GameObject columnObject = Instantiate(columnPrefab, new Vector3(lon, 0, lat), Quaternion.identity);
}
}
}
東西ラインで発生した問題
Cylinderを横倒しにしてprefabをつくり、CSVで複製
さっきと同じことだし、簡単、と思ったら表示されない。
Hierarchyには複製されたCylinderがずらっと並んでいるのに、どこにもない。
で、はっと気づく。
複製されたCylinderが、水平じゃなく垂直に立っている。
おかしいだろう、種はちゃんと横倒しにしてあるのに。
まあ、仕方ない、Scriptでローテーションをかける。
using UnityEngine;
using System.Collections.Generic;
using System.IO;
public class EastWestImporter : MonoBehaviour
{
public GameObject eastWestPrefab; // プレハブを指定
public string fileName = "EastWest"; // CSVファイル名
void Start()
{
// CSVファイルを読み込み、行ごとに分割する
TextAsset csvData = Resources.Load<TextAsset>(fileName);
string[] lines = csvData.text.Split('\n');
for (int i = 1; i < lines.Length; i++)
{
string[] parts = lines[i].Split(',');
if(parts.Length < 2) continue;
float hor = float.Parse(parts[0]) * 10;
float ver = float.Parse(parts[1]);
GameObject columnObject = Instantiate(eastWestPrefab, new Vector3(0, ver, hor), Quaternion.Euler(0, 0, 90));
}
}
}
南北ラインは無事
三方向合わせて80本ぐらい、198よりはだいぶ減ったので、ピーピー言わなくなった。
CylinderからColliderを外す。でないとぶつかるからね。
別になんということのないグリッドだけど
なんか、安心感出た、と思う。
deployの仕方忘れた(>_<)
復習してから上げよう。
四次元年表
Discussion