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

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

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

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

Q&A

解決済

1回答

1851閲覧

ギズモによる可視化について

integral2ydx

総合スコア7

Unity3D

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

0グッド

0クリップ

投稿2021/12/08 06:36

前提・実現したいこと

sprig jointのゲーム実行中の緑の線を常に表示させたいです。
spring jointはゲーム実行前であればこんな感じで緑の線が出ていると思います。
イメージ説明
しかし、ゲームを開始したら下の画像のように緑の線は消えてしまします。
イメージ説明
私個人の考えですが、ゲーム実行前に見えるのであれば、ゲーム実行中はUnityの仕様で見やすくするためにあえて線を消してくれているのかもしれないと思っています。

試したこと

ゲーム実行中の表示非表示に関するものはギズモが関係していると思い、Unityのマニュアルを見ていた該当しそうな項目を見つけました。https://docs.unity3d.com/ja/2019.4/Manual/GizmosMenu.html
こちらのURLに記載してある説目を読み、ワイヤーフレームの強調やギズモのフェードをいじって確かめたのですが、特に変化がありませんでした。

###補足情報
Unityは最近始めたばかりで、ここら辺の機能はほとんど知りませんでした。詳しい方ご教授していただけると幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

今回投稿

サンプルだけ用意したので、試してみてどちらが合ってるか検討してみてください

#Gizmosの場合
下記スクリプトを適当なオブジェクトにアタッチして
インスペクターに2つオブジェクトをアタッチしてください。

2つのオブジェクトがおそらく白い線で結ばれると思います(色とかも変えられるので、そのへんは調べてみてください)
Gizmosなので、ゲームを実行していないときでも表示されます。
ゲームビューに表示されない場合は、ゲームビュー右上の「Gizmos」をクリックして有効化してください

Gizmosは基本的にゲーム開発者がデバッグ機能として見るものなのでビルドしたゲームに表示はされません。

cs

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Test : MonoBehaviour { 6 7 public GameObject obj1; 8 public GameObject obj2; 9 10 void OnDrawGizmos() { 11 12 if(obj1 != null && obj2 != null) { 13 Gizmos.DrawLine(obj1.transform.position, obj2.transform.position); 14 } 15 } 16}

#LineRendererの場合
下記スクリプトを適当なオブジェクトにアタッチして
インスペクターに2つオブジェクトをアタッチしてください。

ゲームを実行すると2つのオブジェクトがおそらく太いピンクの線で結ばれると思います。
※実行しないと表示されないのはコンポーネントをスクリプトで追加しているからです
自分でLineRendererのスクリプトを追加すればシーン画面でも見えると思います

LineRendererはその名が表す通り、線を引くためのコンポーネントです。
地点同士を線で結んでくれるんですが、物理演算などで動くオブジェクトの場合はUpdateなどで位置情報を更新してあげないといけません。

cs

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Test2 : MonoBehaviour { 6 public GameObject obj1; 7 public GameObject obj2; 8 LineRenderer myLineRend; 9 10 private void Start() { 11 // 自身にLineRendererを追加 12 myLineRend = gameObject.AddComponent<LineRenderer>(); 13 } 14 15 // Update is called once per frame 16 void Update() { 17 18 if (obj1 != null && obj2 != null) { 19 myLineRend.SetPosition(0, obj1.transform.position); 20 myLineRend.SetPosition(1, obj2.transform.position); 21 } 22 } 23} 24

メリットとしては、複数の点を一度に線を引いてあげることもできます。
マテリアルなどが反映できるので、線のカスタマイズ性も高くてビルドしたゲームにも表示されます

#ボールをつなぐサンプル?
自分を中心に、他のオブジェクトと線を引くサンプルだとこんな感じでしょうか

cs

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Test2 : MonoBehaviour { 6 [SerializeField] private Rigidbody2D[] otherBalls; 7 8 void OnDrawGizmos() { 9 if(otherBalls.Length >= 1){ 10 // 自分を中心として、他のボールと線をつなぐ 11 foreach (Rigidbody2D ball in otherBalls) { 12 Gizmos.DrawLine(transform.position, ball.transform.position); 13 } 14 } 15 } 16}

前回投稿

私の知る限りギズモ(Jointの接続を表す表示もコレに含まれる?)はあくまで開発のデバッグ用のため
ゲーム上(ビルドしたもの)に表示はできないと思います。

まず、こういったギズモはスクリプト側からデバッグ機能として表示させることができます
下記サイトではオブジェクト同士を線が出るようにしています。
画像で表示されているボール?同士をつなぐようなスクリプトを書けばとりあえず線は常に表示されるようになると思います。


【Unity】バネの動きを実現する3つの方法
https://nn-hokuson.hatenablog.com/entry/2017/05/23/204718


ただし、このギズモはあくまでもデバッグ機能なので
ビルドしたゲームの場合、表示されません。(エディタ上のゲームシーンなら表示させることができます)

なので、それを解決するために拡張を作っている人がいるので
そういうのを試してみると良いかもしれません


Gizmos
https://github.com/popcron/gizmos


線を出すだけならLineRendererとかでやってもいいかもしれません

投稿2021/12/09 03:53

編集2021/12/09 08:06
hogefugapiyo

総合スコア3302

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

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

integral2ydx

2021/12/09 04:43 編集

返信ありがとうございます。 なるほどです、今のところビルドする予定はないので大丈夫です。 LimeRenderとギズモの違いは何なのでしょうか?それとどちらも物理演算している間の線は接続した先と連携していてくれるのでしょうか? もう一つ気になる点が、教えてくださったばねの動きを実現するサイトでは最初のspring jointを使う方法で実行中にもばねが直線で見えています。前のバージョンでは見えてたけど今は見えないとかではないですか?
integral2ydx

2021/12/09 07:42

すいません、追加で質問になってしまうのですが、 ``` using UnityEngine; public class BallController : MonoBehaviour { [SerializeField] private Rigidbody2D[] otherBalls; private Vector3 screenPoint; private Vector3 offset; private new Rigidbody2D rigidbody2D; public GameObject targetPos; Vector3 targetPos; Vector3 acc, vel, pos; // Start is called before the first frame update void Start() { this.rigidbody2D = this.GetComponent<Rigidbody2D>(); acc = vel = Vector3.zero; targetPos = pos = new GameObject[]; // Start時点では、他の2つのボールをKinematic状態にしておく foreach (var otherBall in this.otherBalls) { otherBall.bodyType = RigidbodyType2D.Kinematic; } } void OnDrawGizmos() { Gizmos.DrawLine(this.pos, this.targetPos); } ``` 教えてくださったコードだとギズモは0,0,0を指定しているので、SerializeFieldでほかの玉を指定して, gizumoで線をつないでくれるスプリクトを作りたいのですが、SerializeFieldがインスペクターに表示されません。どこを直したらいいとかわかりますか?targetPosとGameObjectがこんがらがっていてちょっと手詰まりという感じです。
hogefugapiyo

2021/12/09 08:00

サンプルを追加しました。上のコードはそもそも「targetPos」がGameObjectとVector3で混在していてエラーになると思います。
hogefugapiyo

2021/12/09 08:06

ボールをつなぐサンプルも入れときました。なんか参考にできそうでしたら流用いただければと思います
integral2ydx

2021/12/10 07:55 編集

ありがとうございます!ものすごく助かります! LineRenderの太さは変えられたりするのでしょうか? if(obj1 != null && obj2 != null)はどういう意味でしょうか?!とnullがよくわかりません。
integral2ydx

2021/12/10 07:58

ボールをつなぐサンプル?を実行してみました!ボールを追加したら自動でばねを可視化してくれるし物理演算をしても問題なく可視化されていました! ゲーム実行中画面中央に変なマークのようなものが表示されるのですが、これはギズモを使っている以上しょうがないのでしょうか?
hogefugapiyo

2021/12/10 10:29 編集

LineRendererの太さは変えられます。これコンポーネント追加しているだけなので「LineRenderer」で探して調べてみてください。 「A != B」は「AがBでなければ」という否定の意味です。 nullは存在しないということです。nullexceptionとかで調べるとわかります ちなみに&&は左辺と右辺が両方とも条件を満たすときであるときを意味します。日本語でいうなら「A かつ B のとき」みたいな感じです if(obj1 != null && obj2 != null) は日本語にすると 「obj1が存在していて かつ obj2も存在している時」となります 変なマークはよくわからないですが、ギズモの表示ボタンを押すと基本的に全部のギズモが表示されちゃうのでそこを確認してみてください。いらないやつは表示を切ると良いでしょう https://docs.unity3d.com/ja/2019.4/Manual/GizmosMenu.html
integral2ydx

2021/12/13 07:48

わかりました! nullは値だけでなく物体に対しても使えるということですね nullが存在しないの!でさらに否定だから、objectが存在しているということでしょうか? 原因はvariables saverというものがギズモで表示されていることがわかりました。日本語だと変数セーバーと出ているのですが、使い方とか知ってますか?日本語と英語どちらで調べても説明されている記事が見当たらなかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問