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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

337閲覧

Vector3の配列(中心点)から左右の頂点の配列を作成し道路を作ったが、中心点からの頂点の幅が一定にならない!

Ray_pub

総合スコア12

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2017/07/28 10:49

編集2017/07/28 11:01

道路を作るスクリプトを作成しています。
ですが、道路の幅が一定になりません。ベクトルの扱い方に問題があるのではないかと疑っています。
解決方法を教えてくださると嬉しいです。

<今回作成したスクリプトの頂点指定の流れ>
2本線を表示したいので、RoadMakerと言うオブジェクトにrightとleftと言う子オブジェクトを持たせました。
RoadMakerでは道路の中心点を指定します。
rightとleftは中心点を取得し、1つ前の中心点、1つ後の中心点の差のベクトルを求めます。(section[i].direction)
差のベクトルを90度回転し、単位ベクトル化した後、
道路の長さをかけ(rightは正、leftは負)、道路の左右それぞれの頂点を決める…と言う流れです。

C#

1void SetVectors(){ 2 if (points == null || points.Length < 2)return;//if there not more points than 2, quit this logic. 3 sections = new section[points.Length]; 4 for(int i = 0; i < points.Length; i++){ 5 if (i == 0) { 6 sections [i].direction = points [i+1] - points [i];//StartPoint 7 } else if (i == points.Length - 1) { 8 sections [i].direction = points [i] - points [i - 1]; 9 } else { 10 sections [i].direction = points [i + 1] - points [i - 1]; 11 } 12 13 sections [i].direction.Normalize(); 14 sections [i].direction = Quaternion.AngleAxis(90f,Vector3.up) * sections [i].direction; 15 sections [i].direction.Normalize(); 16 17 sections [i].right = points [i] + (RoadLength+LineLength / 2 )* sections [i].direction; 18 sections [i].left = points [i] + (RoadLength- LineLength / 2 ) * sections [i].direction; 19 } 20 }

写真は、始点から(10,0,0),(10,0,10),(0,0,10)とした時の実行結果です。
始点と第2中心点で、明らかに幅が異なっています。
イメージ説明
イメージ説明
イメージ説明

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

さくっと見た限り真ん中の対角線を道路の幅にしてるのでダメなのではと思います。
(RoadLength+LineLength)ではなく(RoadLength+LineLength)*(1.0/sin45度)が正解ではと思います)

曲がるのが90度固定だったら片方は道の半分を足して道の半分を足す、もう片方は逆に引く・・・のほうが誤差はないかと

投稿2017/07/28 11:04

編集2017/07/28 11:14
rururu3

総合スコア5545

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ray_pub

2017/07/30 10:51 編集

ありがとうございます。成功しました。 sin45の部分を、計算で算出するようにしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問