VR射线拾取

 射线拾取其实很简单,这个加多了个shader

脚本要挂载在里,


namespace VRTK { 
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class RayPick : MonoBehaviour
{
	public bool IsUse = true;

     public  Shader  outLine;
	LineRenderer m_Renderer;
		[Range(0, 10)]


	 

	GameObject oldObj;
	// Use this for initialization
	void Start()
	{
	
	}
	void Awake() {
		m_Renderer = GetComponent<LineRenderer>();
	}
	// Update is called once per frame
	void Update()
	{

			if (IsUse)
			{
				Ray camRay = new Ray(transform.position, transform.forward);
				RaycastHit Hit;
				if (m_Renderer == null)
					gameObject.AddComponent<LineRenderer>();

				m_Renderer.SetPosition(0, transform.position);
				if (m_Renderer.enabled == false)
					m_Renderer.enabled = true;
				if (Physics.Raycast(camRay, out Hit, Mathf.Infinity)) // 射线 捡取
				{
					m_Renderer.SetPosition(1, Hit.point);

					if (Hit.transform.CompareTag("PickItem"))
					{
						oldObj = Hit.transform.gameObject;
						oldObj.GetComponent<MeshRenderer>().materials[1].shader = outLine;


						//视线捡取,当按下toupaid 左边建,视线对焦物品 按下griss就可以捡取
						if (GetComponentInChildren<VRTK_ControllerEvents>().gripPressed == true)
						{

							oldObj.GetComponent<MeshRenderer>().materials[1].shader = null;
							float a = Mathf.Sign(Vector3.Dot(transform.forward, oldObj.transform.position));
							oldObj.transform.position = transform.position - new Vector3(-0.25f, 0, 0.25f) * a;

							m_Renderer.enabled = false;
							IsUse = false;
						}

					}
					else
					{
						if (oldObj != null)
							oldObj.GetComponent<MeshRenderer>().materials[1].shader = null;
					}
				}
				else
				{
					if (oldObj != null)
						oldObj.GetComponent<MeshRenderer>().materials[1].shader = null;
				}

			}
			else
			{if (oldObj != null) { 
				oldObj.GetComponent<MeshRenderer>().materials[1].shader = null;
					oldObj = null;
				}
			}

	}

	public void m_use()
	{
		IsUse = true;
	}

	public void PickItem()
	{

	
	}

	void OnEnter()
	{

	}

	void OnExit()
	{
	}



}
}
当然你也可以直接继承point类,但是我觉得point里面有些没必要的于是就写多了这个。新手起步,大神勿喷。谢谢宝贵意见。

猜你喜欢

转载自blog.csdn.net/qq2512667/article/details/79842850
今日推荐