トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

【OculusHandTracking】LineRendererでお絵かき【Unity】

続きです

bibinbaleo.hatenablog.com

Unity2019.3.0f3

こちらを参考に指先でお絵かきします。

qiita.com

LineRenderer

とりあえず上記の記事をまねてPCにオキュラスをつないだ状態でコントローラーでお絵かきします。

LineRendererを空のゲームオブジェクトに付けます

f:id:bibinbaleo:20191224132650p:plain

線の太さはグラフのところの一番上の値を変えて調整するみたい。

(以前はWidthっていうパラメーターがあったような・・・)

f:id:bibinbaleo:20191224132647p:plain

マテリアルのシェーダーはParticle>StandardUnlitにするとLineRendererで設定した色が反映されました。

f:id:bibinbaleo:20191224132524p:plain

これでトリガーを押したときにお絵かきできました!なんだかんだ自分でこれを実装したの初めて!!楽しい。

f:id:bibinbaleo:20191224132527p:plain

指先で書く

あとは指先に置き換えます。

 

f:id:bibinbaleo:20191224150739p:plain

こんな感じ

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DrawLine : MonoBehaviour
{
    [SerializeField] GameObject LineObjectPrefab;
    [SerializeField] Transform IndexSphere;
    private GameObject CurrentLineObject = null;
    private float IndexPinchStrength;
    bool isIndexPinching;
    private Transform Pointer
    {
        get
        {
            return IndexSphere;
        }
    }

    void Update()
    {
 
        var pointer = Pointer;
       
        if (Grab.isIndexPinching)
        {
            if (CurrentLineObject == null)
            {
                CurrentLineObject = Instantiate(LineObjectPrefab, new Vector3(0, 0, 0), Quaternion.identity);
            }
   
            LineRenderer render = CurrentLineObject.GetComponent<LineRenderer>();

            int NextPositionIndex = render.positionCount;
            render.positionCount = NextPositionIndex + 1;
            render.SetPosition(NextPositionIndex, pointer.position);
        }
        else
        {
            if (CurrentLineObject != null)
            {
                CurrentLineObject = null;
            }
        }
    }
}

オンオフ

人差し指のpinchがtrueの時だけ書くようにします。

 

最初、同じUpdate文の中で

MYRightHand.GetFingerPinchStrength(OVRHand.HandFinger.Index);が0.8以上で

人差し指のピンチを取ってたけど、なぜかずっと描画され続ける。

textに表示したらずっと1になってた・・・

なんでだろう??

 

結局別のスクリプトでこの値を取ってそれを参照したらちゃんと動いた。

if(Grab.ThumbPinchStrength>0.8)

前回の記事で使ったスクリプトからそのままとってきた

bibinbaleo.hatenablog.com

pointerの位置

こちらも同じく、前回の記事で人差し指の先につけた球からラインが出るようにしました。

直接

return MYRightSkelton.Bones[(int)OVRSkeleton.BoneId.Hand_IndexTip].Transform;

でHand_IndexTipの位置を返してたけど、なんかうまくいかなかった。

試行錯誤してたので別の原因かもしれないけど。

ペン

そういえば、ペンを持ったままでも人差し指pinch判定したよ!

f:id:bibinbaleo:20191224152245p:plain

最後に

プルプルする

 

サムネ用

f:id:bibinbaleo:20191224150744p:plain