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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

3293閲覧

LineRendererの宣言方法・使いかた

susudada

総合スコア10

Unity3D

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2015/11/24 11:46

編集2015/11/24 12:33

初心者です。「UnityとLeapmotionを用いて3D空間上に三次元線が描けるお絵描きツール」を製作しています。宜しくお願いします。
開発者用のUnity+Leapmotionのプロジェクトをいじって制作しています。

具体的には、スペースボタンを押している間だけLeapmotionが感知した手の指先(人差し指)から線が引け、離している間には何も書かれない。また押すと線が引けて....というものを作りたいです。

実際の仕組みとして
1.スペースを押している間、指先の座標を1/30秒ごとに取得し、それを配列(NowLine)にしてLineRendererで線にする。
2.スペースを離した瞬間、そのNowLineを丸ごと要素の一つとして親配列(OldLine)に追加する。LineRendererでNowLineとは別に描画する。その後NowLineをリセットする。
という方法をとっています。以下のスクリプトは手の指先のオブジェクトにアタッチしているものです。

今回質問したいのは、LineRendererの宣言方法と使い方です。
あるものをコピペしながら理解を深めたかったのですが、ネットに落ちている資料が少なく、困っています。(やれるだけやってみたのが以下のスクリプトに記載しています。)
また、LineRendererは一つの線につき一つ存在しないといけないのでしょうか?そうすると、スクリプト内でCompornentを自動生成しなくてはいけないということですが、その方法もわかりません。

初歩的な質問ですが、ネットや本でも情報が少なく理解できなかったため質問させていただきました。
・具体的なLineRendererの宣言方法・使いかた
・スクリプト内でのコンポーネントの自動生成方法
の二点が質問です。どちらか片方ずつでもご回答いただけると大変助かります。
どうかよろしくお願いいたします。

lang

1 #pragma strict 2 3 private var lineRenderer : LineRenderer; //LineRendererを定義(?) 4 private var NowLine = new Array(); //要素数0のArray(NowLine)を定義。 5 private var OldLine = new Array(); //要素数0のArray(OldLine)を定義。 6 7 8function Start () { 9 lineRenderer = GetComponent(LineRenderer); 10 11 12} 13 14function Update () { 15 16 if (Input.GetKeyDown(KeyCode.Space)){ 17 //スペースキーを押した瞬間に動く機能。 18 NowLine.length = 0;//NowLineを初期化。(文章では最後にリセットとしていたが、ここにある方がわかりやすいためここに配置。) 19 } 20 21 if (Input.GetKey(KeyCode.Space)) { 22 //スペースキーを押している間だけ動く機能。 23 //主に、指先の座標を取得して配列にし、描画する。 24 NowLine.Push(transform.position); //NowLineに格納していく。function Update ()は1/30秒ごとに更新されるため、この文だけでどんどん追加されていく。 25 26 Debug.Log('NowLine'); 27 Debug.Log(NowLine);//配列内の要素をConsoleに表示。 28 29 } 30 31 32 } 33 34 if (Input.GetKeyUp(KeyCode.Space)) { 35 //スペースキーを離した瞬間動く機能。 36 //NowLineの格納された配列をOldLineの要素として格納する。 37 var clone = NowLine.Concat(new Array ());//参照渡し対策 38 OldLine.Push(clone); 39 40 Debug.Log('OldLine'); 41 Debug.Log(OldLine);//配列内の要素をConsoleに表示。 42 } 43 44 45 //for文を用いてNowLineに入っている点をラインレンダラーに入れて描画する。(ここは正常に動きます。) 46 for (var i=0 ; i<NowLine.length ; i++) { 47 lineRenderer.SetVertexCount(NowLine.length); 48 lineRenderer.SetPosition(i, NowLine[i]); 49 } 50 51 //for文を用いてOldLineに入っている要素(元NowLine)の点をラインレンダラーに入れて描画する。(ここが全く動きません。) 52 for (var j=0 ; j<OldLine.length ; j++) { 53 var lineRenderer : LineRenderer; 54 for (var k=0 ; k<OldLine.length ; k++) { 55 lineRenderer.SetVertexCount(OldLine[j].length); 56 lineRenderer.SetPosition(k, OldLine[j][k]); 57 } 58 } 59}

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

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

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

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

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

guest

回答1

0

・具体的なLineRendererの宣言方法・使いかた

宣言方法なのですが、下記に記述するスクリプト内でLineRendererを追加する場合は、このままの宣言方法で大丈夫です。
Unityエディタ上でLineRendererを設定する場合はpublicで変数を宣言することで、コンポーネントに当てはめることができます。

使用方法としては、LineRenderer一つで一つの線を描くことができます。
曲がった線などを描くことは可能ですが、複数の線を描くには複数のLineRendererが必要です。
詳しくは以下のリンクから。
ラインレンダラー ドキュメント
LineRenderer スクリプトリファレンス

・スクリプト内でのコンポーネントの自動生成方法

AddComponent()を利用することでスクリプト内でコンポーネントを生成することができます。
詳しくは以下のリンクから。
AddComponent スクリプトリファレンス

ご参考になればと思います。

投稿2016/06/11 21:47

urahimono

総合スコア714

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問