我无法在鼠标位置实例化预制件。
我尝试在当前鼠标位置实例化预制件,但是单击时,该块显示在层次结构中,而不是场景中。它还创建了4-5个预制件。
import app from "./app";
app.listen(42069);
我想创建1个预制块,并希望它显示在场景视图中。
答案 0 :(得分:2)
Input.mousePosition是鼠标在屏幕上的坐标。使用Camera.ScreenToViewportPoint获取世界位置。
该块将不会在场景中显示,因为它的位置可能很像(500,300,0),这很远。在“层次结构”中选择块,然后按“ F”查看。
只要按住鼠标,Input.GetMouseButton()就会一直触发。将此更改为Imput.GetMouseButtonDown()
using UnityEngine;
public class Building : MonoBehaviour {
public GameObject block;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Vector3 pos = Camera.main.ScreenToViewportPoint(Input.mousePosition);
Instantiate(block, pos, Quaternion.identity);
}
}
}
答案 1 :(得分:0)
您需要从屏幕空间转换为世界空间。
一种方法是使用Camera.ScreenToWorldPoint
:
private Camera mainCam;
void Start()
{
mainCam = Camera.main;
}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Vector3 blockPos = mainCam.ScreenToWorldPoint(Input.mousePosition);
Instantiate(block, blockPos, 0f), Quaternion.identity);
}
}
如果您想在离相机更远的地方产生,请查看Camera.ScreenPointToRay。