在沙盒游戏的鼠标位置实例化预制件

时间:2019-07-26 19:19:42

标签: c# unity3d

我无法在鼠标位置实例化预制件。

我尝试在当前鼠标位置实例化预制件,但是单击时,该块显示在层次结构中,而不是场景中。它还创建了4-5个预制件。

import app from "./app";

app.listen(42069);

我想创建1个预制块,并希望它显示在场景视图中。

2 个答案:

答案 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