简介
2. 创建可视化Model
Unity AR开发 | 空间点可视化:https://blog.csdn.net/weixin_45843236/article/details/105526004
3. 创建prefabs
3.1 新建一个GameObject,拖入模型为子级
3.2 调整rotation(这是相对坐标,对于父级空间坐标系下)
3.3 拖入project作为预设件
4.新建AddPoint物体,并添加AddPoint脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AddPoint : MonoBehaviour
{
public GameObject rectangularPyramid;
// Start is called before the first frame update
private LineRenderer lineRenderer;
//定义一个Vector3,用来存储鼠标点击的位置
private Vector3 position;
//用来索引端点
private int index = 0;
//端点数
private int LengthOfLineRenderer = 0;
private GameObject[] rp = new GameObject[100];
private int rpindex = 0;
void Start()
{
lineRenderer = GetComponent<LineRenderer>();
// gameObject.AddComponent<LineRenderer>();
//设置材质
lineRenderer.material = new Material(Shader.Find("Particles/Additive"));
//设置颜色
lineRenderer.startColor = Color.red;
lineRenderer.endColor = Color.yellow;
//设置宽度
//lineRenderer.startWidth = 0.02f;
// lineRenderer.endWidth = 0.02f;
}
// Update is called once per frame
void Update()
{
lineRenderer = GetComponent<LineRenderer>();
if (OVRInput.GetDown(OVRInput.Button.Three))
{
position = OVRInput.GetLocalControllerPosition(OVRInput.Controller.LTouch);
GameObject newPoint = GameObject.Instantiate(rectangularPyramid);
newPoint.transform.position = position;
LengthOfLineRenderer++;
//设置线段的端点数
lineRenderer.positionCount = LengthOfLineRenderer;
rpindex++;
rp[rpindex] = newPoint;
}
//连续绘制线段
while (index < LengthOfLineRenderer)
{
//两点确定一条直线,所以我们依次绘制点就可以形成线段了
lineRenderer.SetPosition(index, position);
index++;
}
Vector2 adjust1 = OVRInput.Get(OVRInput.Axis2D.PrimaryThumbstick);
Vector2 adjust2 = OVRInput.Get(OVRInput.Axis2D.SecondaryThumbstick);
rp[rpindex].transform.Rotate(OVRInput.Get(OVRInput.Axis1D.PrimaryIndexTrigger), 0f, 0f, Space.World);
rp[rpindex].transform.Rotate(-OVRInput.Get(OVRInput.Axis1D.SecondaryIndexTrigger), 0f, 0f, Space.World);
rp[rpindex].transform.Rotate(0f, 0f, OVRInput.Get(OVRInput.Axis1D.PrimaryHandTrigger), Space.World);
rp[rpindex].transform.Rotate(0f, 0f, -OVRInput.Get(OVRInput.Axis1D.SecondaryHandTrigger), Space.World);
if (adjust1.x != 0 || adjust1.y != 0 || adjust2.x != 0 || adjust2.y != 0)
{
position.x = position.x + adjust1.x * 0.001f;
position.z = position.z + adjust1.y * 0.001f;
position.y = position.y + adjust2.y * 0.001f;
lineRenderer.SetPosition(index - 1, position);
rp[rpindex].transform.position = position;
if (adjust2.x > 0)
{
rp[rpindex].transform.Rotate(new Vector3(0f,1f,0f),Space.World);
}
if (adjust2.x < 0)
{
rp[rpindex].transform.Rotate(new Vector3(0f, -1f, 0f), Space.World);
}
}
}
}
并为添加lineRenderer组件