별 보이기 (1) CSV 데이터 읽기

17753 단어 Unity
이번에는 csv 파일부터 데이터를 읽습니다.
여기. 공용역에 별의 위치, 시등급 등 CSV 데이터를 배치해 사용했다.

hip_lite_major.csv 파일을 다운로드하여 Unity의 Assets 아래 적당한 위치에 놓습니다.

열수
컨텐트
1
HIP 번호: 1~120416
2
적경:시(정수)
3
적경:분(정수)
4
적경: 초 (소수)
5
적위:기호(0:-1:+)
6
적위:도(정수)
7
적위:분(정수)
8
적위: 초 (소수)
9
보기 등급: 등급(소수)
그러므로
열 1에서 HIP 번호 입력
열2-8에서 지구의 방향을 보다
열 9에서 밝기를 얻습니다.
ParticleSetTest.cs
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;

namespace ParticleTest{
    public class ParticleSetTest : MonoBehaviour
    {
        // データ型の定義
        public struct HipData
        {
            public int hipId;
            public Vector3 pos;
            public Color color;
            public float magnitude; // 等級

            public HipData(int _id, Vector3 _pos, Color _color, float _magnitude)
            {
                hipId = _id;
                pos = _pos;
                color = _color;
                magnitude = _magnitude;
            }
            public HipData(HipData _data)
            {
                hipId = _data.hipId;
                pos = _data.pos;
                color = _data.color;
                magnitude = _data.magnitude;
            }
        }

        // 読み込むデータ
        [SerializeField] TextAsset lightFile = null;
        // 読み込んだデータを格納するリスト
        public List<HipData> hipList;

        // Use this for initialization
        void Start()
        {
            hipList = createHipList(lightFile);
        }

        // Update is called once per frame
        void Update()
        {
            if (hipList != null)
            {
                foreach(HipData hip in hipList){
                    Debug.DrawLine(Vector3.zero,hip.pos*500f,Color.white*(1f/hip.magnitude));
                }
            }
        }

        // ファイルからデータを読み込みデータリストに格納する
        List<HipData> createHipList(TextAsset _lightsFile)
        {
            List<HipData> list = new List<HipData>();
            StringReader sr = new StringReader(_lightsFile.text);
            while (sr.Peek() > -1)
            {
                string lineStr = sr.ReadLine();
                HipData data;
                if (stringToHipData(lineStr, out data))
                {
                    list.Add(data);
                }
            }
            sr.Close();
            return list;
        }

        // CSV文字列からデータ型に変換
        bool stringToHipData(string _hipStr, out HipData data)
        {
            bool ret = true;
            data = new HipData();
            // カンマ区切りのデータを文字列の配列に変換
            string[] dataArr = _hipStr.Split(',');
            try
            {
                // 文字列をint,floatに変換する
                int hipId = int.Parse(dataArr[0]);
                float hlH = float.Parse(dataArr[1]);
                float hlM = float.Parse(dataArr[2]);
                float hlS = float.Parse(dataArr[3]);
                int hsSgn = int.Parse(dataArr[4]);
                float hsH = float.Parse(dataArr[5]);
                float hsM = float.Parse(dataArr[6]);
                float hsS = float.Parse(dataArr[7]);
                float mag = float.Parse(dataArr[8]);
                Color col = Color.gray;
                float hDeg = (360f / 24f) * (hlH + hlM / 60f + hlS / 3600f);
                float sDeg = (hsH + hsM / 60f + hsS / 3600f) * (hsSgn == 0 ? -1f : 1f);
                Quaternion rotL = Quaternion.AngleAxis(hDeg, Vector3.up);
                Quaternion rotS = Quaternion.AngleAxis(sDeg, Vector3.right);
                Vector3 pos = rotL * rotS * Vector3.forward;
                data = new HipData(hipId, pos, Color.white, mag);
            }
            catch
            {
                ret = false;
                Debug.Log("data err");
            }
            return ret;
        }
    }
}
위의 스크립트를 빈 객체에 첨부하고 lightFile에서 hiplite_major.csv를 드래그 앤 드롭합니다.

실행 후 데이터가 표시하는 방향은 디버깅 라인을 표시합니다

별 보이기 (1) CSV 데이터 읽기
별 보이기(2) 입자 형태로 별 보이기
별 보이기 (3) 별자리선 보이기
별 보이기 (4) 변환 데이터
별 보이기(5)점 그룹 격자로 별 보이기

좋은 웹페이지 즐겨찾기