Unity AR开发 | 空间点可视化及位姿调整

简介

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组件

5. 重点总结

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值