unity 鼠标标记 左键长按生成标记右键长按清除标记,对象转化为子物体

linerender的标记参考

unity linerenderer在Game窗口中任意画线_游戏内编辑linerender-CSDN博客

让生成的标记转化为ARMarks游戏对象的子物体

LineMark.cs

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

public class LineMark : MonoBehaviour
{

	private GameObject clone;
	private LineRenderer line;
	private int i;

	public GameObject obs;
	public GameObject arMarks;

	// Use this for initialization
	void Start()
	{
		//arMarks = new GameObject("ARMarks");
	}

	// Update is called once per frame  
	void Update()
	{
		//0是鼠标左键  按下时重新生成标记
		if (Input.GetMouseButtonDown(0))
		{
			clone = (GameObject)Instantiate(obs, obs.transform.position, transform.rotation);//克隆一个带有LineRender的物体   
			line = clone.GetComponent<LineRenderer>();//获得该物体上的LineRender组件  
			line.SetColors(Color.blue, Color.red);//设置颜色  
			line.SetWidth(0.2f, 0.1f);//设置宽度  
			i = 0;

			//将标记设为子物体
			print("11111111111111111");

		}
		//长按左键绘制标记
		if (Input.GetMouseButton(0))
		{
			i++;
			line.SetVertexCount(i);//设置顶点数  
			line.SetPosition(i - 1, Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 15)));//设置顶点位置   

			//GameObject lines_mark = GameObject.Find(clone.name);
			clone.layer = 3;
			clone.transform.parent = arMarks.transform;
			print("222222222222222222222");

		}
		//1是鼠标右键  按右键清除标记
		if (Input.GetMouseButton(1))
        {
            for (int i = 0; i < arMarks.transform.childCount; i++)
            {
				Destroy(arMarks.transform.GetChild(i).gameObject);
            }
			print("33333333333333333333333");

		}

	}
}

如果显示的背景尺寸太大,则线会很细,如下

Game窗口

放大之后的scene窗口

这时需要将代码中的值修改一下即可

            line.SetWidth(2f, 2f);//设置宽度  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是Unity生成虚拟对象的代码示例: ```csharp using UnityEngine; using System.Collections.Generic; using Vuforia; public class MarkerScanner : MonoBehaviour, ITrackableEventHandler { private TrackableBehaviour mTrackableBehaviour; public GameObject virtualObject; //虚拟对象 void Start() { mTrackableBehaviour = GetComponent<TrackableBehaviour>(); if (mTrackableBehaviour) { mTrackableBehaviour.RegisterTrackableEventHandler(this); } } public void OnTrackableStateChanged( TrackableBehaviour.Status previousStatus, TrackableBehaviour.Status newStatus) { if (newStatus == TrackableBehaviour.Status.DETECTED || newStatus == TrackableBehaviour.Status.TRACKED || newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED) { //当检测到目标图像时,生成虚拟对象 GenerateVirtualObject(); } else { //停止跟踪目标图像时,销毁虚拟对象 DestroyVirtualObject(); } } void GenerateVirtualObject() { //实例化虚拟对象 GameObject obj = Instantiate(virtualObject, transform.position, transform.rotation); //将虚拟对象作为目标图像的子对象 obj.transform.parent = transform; } void DestroyVirtualObject() { foreach (Transform child in transform) { Destroy(child.gameObject); } } } ``` 在这个示例中,我们创建了一个`MarkerScanner`类,该类实现了`ITrackableEventHandler`接口。当检测到目标图像时,我们会调用`GenerateVirtualObject()`方法生成虚拟对象,当停止跟踪目标图像时,我们会调用`DestroyVirtualObject()`方法销毁虚拟对象。 在`GenerateVirtualObject()`方法中,我们使用`Instantiate()`方法实例化虚拟对象,并将其设置为目标图像的子对象,这样当目标图像移动时,虚拟对象也会跟随移动。 在使用该代码之前,需要先导入Vuforia插件,并将目标图像导入到项目中。此外,还需要将`MarkerScanner`脚本添加到目标图像的GameObject中,并将`virtualObject`字段设置为想要生成的虚拟对象的预制件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值