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

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

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

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

Q&A

1回答

669閲覧

Unity3D,円弧型レールの作成の仕方について。

kaminumeyo

総合スコア11

Unity3D

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

0グッド

0クリップ

投稿2019/06/16 12:05

編集2022/01/12 10:55

前提・実現したいこと

Unityで以下のようなシーンを作成しようと思っています。
半径R,長さ2/3πRの円弧型レール上で二物体を衝突させる、というものです。

発生している問題

円弧型のレールをどのように作成すれば良いのか分からず困っています。出来る限り滑らかな走路になるようにしたいのですが、なにか外部ツールが必要だったりするのでしょうか・・・?

###追記
只今Blenderでのレール作成を試しているのですが、円柱を加工する際に120°の指定をどのように行えばいいか考えています。デフォルトでの円柱の側面が32面の長方形から成り、この数を調整してから無駄な面を取り除けば何とか作れそうだとは思うのですが、あまりに面が多く分割されてしまい選択がとても煩雑になっています。もっと手っ取り早い方法をご存知であればご教授ください。

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

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

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

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

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

sakura_hana

2019/06/16 12:40

「レール」とは何を意味していますか? 「物体がそのような軌道で移動する」というのであれば、物体をそのように動かせばいいので移動させるプログラムの書き方次第でどうとでもなります。 (こちらの場合は丸投げ質問なので https://teratail.com/help/question-tips を参考に、自分で調べたこと・試したこと等を追記ください。「unity レール」でググるだけでも結構情報出ます) 「曲線状の物体(その上に別のオブジェクトが乗っかって滑って行く)」というのであれば、Unityの基本機能だと作成出来ない(か、とっても困難)です。3Dソフトでそういうモデルを作ってインポートしてMeshCollider等で当たり判定付けるのが一番早いと思います。
kaminumeyo

2019/06/17 14:30

後者の解釈で合っています。物体そのものを直接操作するというより、物体は乗せるだけでレールに沿って転がすような場面を作成したいと考えています。
sakura_hana

2019/06/18 00:00

追記読みました。既にプログラムの範疇ではなくBlenderの使い方の話になっていると思いますので、このサイトだと適切なアドバイスが付きづらいかもしれません(過去質問を見る感じBlender使いも居るようではありますが)。 他にBlenderに関するフォーラムなどがあるならそちらを利用した方がいいかもしれません。
kaminumeyo

2019/06/18 14:39

確かにそうですね・・・質問場所を変えて意見を伺ってみようかと思います。 ご回答ありがとうございます。
guest

回答1

0

質問のタグから、3Dのシーンで実現させるという捉えで行きますね。

Unity内のみで作るのは無理、もしくは相当の技術力が必要かと思います。(自分でスクリプト組んでメッシュを生成したり……とか?)

メッシュをBlender等の外部ツーで作る方法が多分一番楽だと思います。
Blenderにはもとから円柱を作る機能があるので、それを使うとメッシュを簡単に作れます。
このサイトの手順を参考にするといいかと思います。(Cylinderを、Cap Fill TypeをNothingにして追加。Edit ModeにしてからAキーで全選択して、「Flip Direction」でメッシュの方向を内側に変更する。)

Unity側での当たり判定についてですが、その円弧型レールの外側がどうなってもいいのなら、カプセルのメッシュを反転させてメッシュコライダーつけるのが滑らかなコライダーになると思います。このサイトのように、

C#

1//~~省略~~ 2 3public bool removeExistingColliders = true; 4 5private void Start(){ 6 CreateInvertedMeshCollider(); 7} 8 9public void CreateInvertedMeshCollider(){ 10 if (removeExistingColliders) 11 RemoveExistingColliders(); 12 13 InvertMesh(); 14 15 gameObject.AddComponent<MeshCollider>(); 16} 17 18private void RemoveExistingColliders(){ 19 Collider[] colliders = GetComponents<Collider>(); 20 for (int i = 0; i < colliders.Length; i++) 21 DestroyImmediate(colliders[i]); 22} 23 24private void InvertMesh(){ 25 Mesh mesh = GetComponent<MeshFilter>().mesh; 26 mesh.triangles = mesh.triangles.Reverse().ToArray(); 27}

という形で円弧状のレールに合わせてフィールド全体を覆うように作るのはどうでしょう。
滑らかさは少し失われますが、先程Blenderで作ったモデルに直接メッシュコライダーつける手もありますよ。

最後に、この回答の多くが未検証なので、解決策が他にもあったり紹介した方法に穴があったりするかもしれないです……。

投稿2019/06/16 12:45

Karakuri_Polta

総合スコア50

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

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

kaminumeyo

2019/06/17 15:13

回答ありがとうございます。リンク先の内容も読ませていただきました、とても参考になります。ただ、レールの外側についてなのですが、レール上の2物体が衝突してレール外に飛び出すことも考慮したいので、フィールドを覆うことはしたくないです。 それと、上記に質問内容の方を追加したので、分かることがあれば教えて頂けると幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問