首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在鼠标位置为我的沙盒游戏实例化一个预制件

在鼠标位置为我的沙盒游戏实例化一个预制件
EN

Stack Overflow用户
提问于 2019-07-27 03:19:42
回答 2查看 179关注 0票数 1

我不能在我的鼠标位置实例化一个预制件。

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

代码语言:javascript
复制
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);
        }
    }
}

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

EN

回答 2

Stack Overflow用户

发布于 2019-07-27 03:30:48

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

块不会显示在场景中,因为它的位置可能类似于(500,300,0),这是非常远的。选择层次结构中的块并按"F“键查看它。

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

代码语言:javascript
复制
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);
    }
}
}
票数 2
EN

Stack Overflow用户

发布于 2019-07-27 03:31:40

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

其中一种方法是使用Camera.ScreenToWorldPoint

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57225928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档