统一使用 3d 模型作为按钮
Use a 3d model as button in unity
我有一个简单的 AR 应用程序,适用于 android。当相机跟踪图像时生成 3d 模型(狐狸)。
它工作正常。
我想点击 android phone 中的 3d 模型并打开第二个 scene.I 可以使用按钮,但我不能将 3d 模型用作按钮。
有没有办法使用 3d 模型作为按钮?
谢谢
您可以通过使用 Raycast“触摸”3D 模型来实现。
在您的 3D 模型上使用 Input.GetTouch function to get your user's input. Inside this, you will need to call the Raycast function. The Raycast function will emit a ray with origin on the camera and direction normal to the screen (i.e. the direction you are looking). You will need to put a Collider 对象。当光线撞击碰撞器时,Raycast 函数 returns 为真,您可以使用此结果打开您的第二个场景。
我终于使用了 Raycast 并制作了 6 个 3d 模型。我将网格碰撞器放在所有这些物体上,然后使用开关打开相应的场景。
这是其中一个模型的代码。它适用于鼠标点击和 android 屏幕点击。非常感谢 Stitt
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using System;
public class GoToScene : MonoBehaviour
{
void Update()
{
if (Input.GetMouseButton(0))
{
Vector3 mousePosFar = new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.farClipPlane);
Vector3 mousePosNear = new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.nearClipPlane);
Vector3 mousePosF = Camera.main.ScreenToWorldPoint(mousePosFar);
Vector3 mousePosN = Camera.main.ScreenToWorldPoint(mousePosNear);
RaycastHit hit;
if (Physics.Raycast(mousePosN, mousePosF - mousePosN, out hit))
{
var tagGit = hit.transform.gameObject.tag;
if (int.TryParse(tagGit, out int caseSwitch))
{ caseSwitch = Int32.Parse(tagGit); }
else { }
switch (caseSwitch)
{
case 1:
SceneManager.LoadScene("FoxScene");
break;
case 2:
SceneManager.LoadScene("TigerScene");
break;
case 3:
SceneManager.LoadScene("RaptorScene");
break;
case 4:
SceneManager.LoadScene("PenguinScene");
break;
case 5:
SceneManager.LoadScene("BeeScene");
break;
case 6:
SceneManager.LoadScene("EagleScene");
break;
default:
break;
}
}
}
}
}
我有一个简单的 AR 应用程序,适用于 android。当相机跟踪图像时生成 3d 模型(狐狸)。 它工作正常。
我想点击 android phone 中的 3d 模型并打开第二个 scene.I 可以使用按钮,但我不能将 3d 模型用作按钮。 有没有办法使用 3d 模型作为按钮? 谢谢
您可以通过使用 Raycast“触摸”3D 模型来实现。
在您的 3D 模型上使用 Input.GetTouch function to get your user's input. Inside this, you will need to call the Raycast function. The Raycast function will emit a ray with origin on the camera and direction normal to the screen (i.e. the direction you are looking). You will need to put a Collider 对象。当光线撞击碰撞器时,Raycast 函数 returns 为真,您可以使用此结果打开您的第二个场景。
我终于使用了 Raycast 并制作了 6 个 3d 模型。我将网格碰撞器放在所有这些物体上,然后使用开关打开相应的场景。 这是其中一个模型的代码。它适用于鼠标点击和 android 屏幕点击。非常感谢 Stitt
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using System;
public class GoToScene : MonoBehaviour
{
void Update()
{
if (Input.GetMouseButton(0))
{
Vector3 mousePosFar = new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.farClipPlane);
Vector3 mousePosNear = new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.nearClipPlane);
Vector3 mousePosF = Camera.main.ScreenToWorldPoint(mousePosFar);
Vector3 mousePosN = Camera.main.ScreenToWorldPoint(mousePosNear);
RaycastHit hit;
if (Physics.Raycast(mousePosN, mousePosF - mousePosN, out hit))
{
var tagGit = hit.transform.gameObject.tag;
if (int.TryParse(tagGit, out int caseSwitch))
{ caseSwitch = Int32.Parse(tagGit); }
else { }
switch (caseSwitch)
{
case 1:
SceneManager.LoadScene("FoxScene");
break;
case 2:
SceneManager.LoadScene("TigerScene");
break;
case 3:
SceneManager.LoadScene("RaptorScene");
break;
case 4:
SceneManager.LoadScene("PenguinScene");
break;
case 5:
SceneManager.LoadScene("BeeScene");
break;
case 6:
SceneManager.LoadScene("EagleScene");
break;
default:
break;
}
}
}
}
}