C# 为我的沙盒游戏在鼠标位置实例化一个预置

C# 为我的沙盒游戏在鼠标位置实例化一个预置,c#,unity3d,C#,Unity3d,我无法在鼠标位置实例化预置 我尝试在当前鼠标位置实例化预置,但单击后,块显示在层次中,而不是场景中。它还创建4-5个预制件 using UnityEngine; public class Building : MonoBehaviour { public GameObject block; void Update() { if (Input.GetMouseButton(0)) { Instantiate(block

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

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

using UnityEngine;
public class Building : MonoBehaviour
{
    public GameObject block;
    void Update()
    {
        if (Input.GetMouseButton(0))
        {
            Instantiate(block, new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0f), Quaternion.identity);
        }
    }
}

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

Input.mousePosition是鼠标在屏幕上的坐标。使用Camera.ScreenToViewportPoint获取世界位置

块将不会显示在场景中,因为它的位置可能类似于(500300,0),非常远。选择层次结构中的块,然后按“F”键查看它

只要按住鼠标,Input.GetMouseButton()就会一直启动。将其更改为Imput.GetMouseButtonDown()


您需要从屏幕空间转换到世界空间

一种方法是使用:


如果您想在离摄影机更远的地方繁殖,请查看。

它给了我一个错误,对象引用未设置为对象建筑的实例。cs:11确保在“检查器”选项卡中指定了块,还确保您在游戏视图中,并且有一个摄影机确保您的摄影机标记为“主摄影机”没有问题,很高兴我能帮忙!
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);
    }
}
}
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);
    }
}