イラスト、モデリング、Unity、VR関連

unityとかblenderとかvr関連の作業メモ

ocurasgo コントローラの先端から直線を描写する

*コントローラは杖に置き換えてます

前提状態

f:id:arumogina:20190301165459p:plain

TrackedRemoteに以下のスクリプトをアタッチする

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

public class ShowLine : MonoBehaviour
{
    // Start is called before the first frame update
    private GameObject wand_line;
    private LineRenderer m_lr;
    void Start()
    {
      wand_line = new GameObject ("wand_line");
      m_lr = wand_line.AddComponent<LineRenderer>();
    }

    // Update is called once per frame
    void Update()
    {
      m_lr.SetVertexCount(2);
      m_lr.startWidth = 0.01f;
      m_lr.endWidth = 0.01f;
      Vector3 wand_p = gameObject.transform.position;
      Vector3 st_p = wand_p + gameObject.transform.forward*0.6f;
      Vector3 end_p = wand_p + gameObject.transform.forward*5;
      m_lr.SetPosition (0, st_p);
      m_lr.SetPosition (1, end_p);
    }
}   

コントローラとなるオブジェクトを回転させてる場合は、transform.forwardを適宜、downやrightなど伸ばしたい方向に伸びるように調整する

なぜか分からないがwandにアタッチすると直線の始点が下方向にずれてしまう

=>オブジェクトのpositionはローカル座標における原点となる。Blenderで杖のモデルを見てみたら高さのある位置に置かれていたのがずれる原因だった。

というか、指定位置から直線を伸ばすだけならスクリプトを使わずヒエラルキーに設定した方が明示的で良い。この場合、オブジェクトの原点から直線が伸びるので、杖先が原点の位置になるようにするとよい。

f:id:arumogina:20190302020425p:plain

f:id:arumogina:20190301222641p:plain