質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.33%

Unity内のオブジェクトが変な場所に飛ぶことを解決したい

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 208

score 11

前提・実現したいこと

緯度経度を基にしてUnity内のオブジェクトを動かしたい
最初に現在地の緯度経度の場所を基準点を基に現実世界とUnity内の空間を縮尺した距離を求めオブジェクトを配置します。次に、その場所から移動先の緯度経度と基準点を基に場所を求め移動させたいです。

double型でオブジェクトの座標を取得したい
Unity内の空間は90m×90m
現実空間は30m×40m

発生している問題・エラーメッセージ

オブジェクトが平面を配置した場所以外のどこかに移動してしまう

You are trying to create a MonoBehaviour using the 'new' keyword.  This is not allowed.  MonoBehaviours can only be added using AddComponent(). Alternatively, your script can inherit from ScriptableObject or no base class at all
UnityEngine.MonoBehaviour:.ctor()
Location:.ctor(Double, Double) (at Assets/Location.cs:11)
Lookdis:Update() (at Assets/Lookdis.cs:63)

該当のソースコード

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Mathd;
using System;

public class Lookdis : MonoBehaviour
{

    //public UnityEngine.UI.Text text;

    //入る変数
    public GameObject cube;
    //取得するscriptが入る変数
    GPS_move script;
    float speed = 2.0f;
    //現在地
    Location Current;
    //基準
    //Location reference = new Location(35.4852d, 139.34094d);
    //付近
    Location reference=new Location(35.478209d,139.343049d);


    Vector3 basepoint;

    private const double EARTH_RADIUS = 6378.137d; // 赤道半径 km
    private const double POLAR_RADIUS = 6356.752d; // 極半径 km
    public static double Deg2Rad { get { return Math.PI / 180.0d; } }

    void Start()
    {
        Input.location.Start();
        cube = GameObject.Find("Cube");
        script = cube.GetComponent<GPS_move>();
        Current = new Location(script.Latitude, script.Longitude);
        //緯度1°を求める
        double x1 = POLAR_RADIUS * 2d * Math.PI / 360.0d;
        double lat = ((script.Latitude - reference.Latitude)*x1)*1000d;

        //緯度の縮尺
        double lat1 = (lat * 3d) - 15d;

        //経度1°を求める
        double z1 = Math.Cos(script.Latitude / 180 * Math.PI) * EARTH_RADIUS;
        double z2= z1 * 2d * Math.PI / 360.0d;
        double lon = ((script.Longitude - reference.Longitude) * z2)*1000d;

        //経度の縮尺
        double lon1 = (lon * 2.25d) - 20d;

        //transform.position = new Vector3d((lat / 4)-31.5, 0, (lon / 4)-31.5);
        transform.position = new Vector3d(lat1, 5, lon1);
    }

    // Update is called once per frame
    void Update()
    {
        //Cubeのオブジェクトの位置取得
        //basepoint = GameObject.Find("Cube").transform.position;

        float step = speed * Time.deltaTime;
        Current = new Location(script.Latitude, script.Longitude);
        //緯度1°を求める
        double x1 = POLAR_RADIUS * 2 * Math.PI / 360.0d;
        double lat = ((script.Latitude - reference.Latitude) * x1) * 1000;

        //緯度の縮尺
        double lat1 = (lat * 3) - 15;

        //経度1°を求める
        double z1 = Math.Cos(script.Latitude / 180 * Math.PI) * EARTH_RADIUS;
        double z2 = z1 * 2 * Math.PI / 360.0d;
        double lon = ((script.Longitude - reference.Longitude) * z2) * 1000;

        //経度の縮尺
        double lon1 = (lon * 2.25) - 20;
        //Unityない空間の基準点
        //Vector3 basepoint = new Vector3d(3.5, 0, 3.5);
        //Vector3 basepoint = new Vector3d(-15, 5, -20);
        Vector3 devicepoint = new Vector3d(lat1, 5, lon1);

        double tmplat = lat1;
        double tmplon = lon1;
        Vector3 basepoint = new Vector3d(tmplat, 5, tmplon);
        transform.position = Vector3d.MoveTowards(basepoint, devicepoint, step);
    }
}

補足情報(FW/ツールのバージョンなど)

Unity2019.4.15f1

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • sakura_hana

    2021/06/17 09:23

    Locationクラスのコードを質問に記載してください。

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.33%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る