超がつくほどにプログラミング初心者なのですが、訳があり「UnityとLeapmotionを用いて3D空間上に三次元線が描けるお絵描きツール」を製作しています。知識も拙いためどのように質問したら良いかもわかず、長く分かりにくい文章になってしまいましたが、何卒よろしくお願いいたします。
使用言語はJavascript(Unityscript)で、開発者用のUnity+Leapmotionのプロジェクトをいじって制作しています。
具体的には、スペースボタンを押している間だけLeapmotionが感知した手の指先(人差し指)から線が引け、離している間には何も書かれない。また押すと線が引けて....というものを作りたいです。
実際の仕組みとして
1.スペースを押している間、指先の座標を1/30秒ごとに取得し、それを配列(NowLine)にしてLineRendererで線にする。
2.スペースを離した瞬間、そのNowLineを丸ごと要素の一つとして親配列(OldLine)に追加する。LineRendererでNowLineとは別に描画する。その後NowLineをリセットする。
という方法をとっています。多次元配列です。
以下のscriptを指先のオブジェクトにアタッチして、線を描くための配列を生成しているのですが、どうも思うような動きをしません。
NowLineをどんどん格納していくにあたり、
OldLine = [(1回目押した時のNowLine) ,(2回目押した時のNowLine) ,(3回目押した時のNowLine)]
になってもらいたいのですが、
OldLine = [(3回目押した時のNowLine) ,(3回目押した時のNowLine) ,(3回目押した時のNowLine)]
のようになってしまいます。前に入れたNowLineも更新されてしまっているようです。
どのようにしたらこの問題を解決できますでしょうか。よろしくお願い致します。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#pragma strict
private var NowLine = new Array(); //要素数0のArray(NowLine)を定義。 private var OldLine = new Array(); //要素数0のArray(OldLine)を定義。
function Start () {
}
function Update () {
if (Input.GetKeyDown(KeyCode.Space)){ //スペースキーを押した瞬間に動く機能。 NowLine.length = 0; //NowLineを初期化。(文章では最後にリセットとしていたが、ここにある方がわかりやすいためここに配置。) }
if (Input.GetKey(KeyCode.Space)) {
//スペースキーを押している間だけ動く機能。
//主に、指先の座標を取得して配列にし、描画する。
var NowPoint = transform.position; //指先のポジションをNowPointとして取得。 NowLine.Push(NowPoint); //NowLineに格納していく。function Update ()は1/30秒ごとに更新されるため、この文だけでどんどん追加されていく。 Debug.Log('NowLine'); Debug.Log(NowLine); //配列内の要素をConsoleに表示。 } if (Input.GetKeyUp(KeyCode.Space)) { //スペースキーを離した瞬間動く機能。 //NowLineの格納された配列をOldLineの要素として格納する。 OldLine.Push(NowLine); Debug.Log('OldLine'); Debug.Log(OldLine); //配列内の要素をConsoleに表示。 }
}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/22 16:51