如何舍入 x/z 鼠标位置以及特定的 y 位置,然后在那里实例化一个对象?

How to get rounded x/z position of mouse, along with a certain y position, then instantiate an object there?

我正在尝试制作小型建筑游戏,我想在其中获取鼠标的 x/z 位置以及特定的 y 位置,然后将它们四舍五入为整数。然后我在那个最终位置实例化一个对象。它一直在数百个位置生成方块,例如,当我在 0,0,0 处单击时,它会在 580 处生成一个方块。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Building : MonoBehaviour
{
    public GameObject Block;

    void Update(){
        int mousePosX = Mathf.RoundToInt(Input.mousePosition.x);
        int mousePosZ = Mathf.RoundToInt(Input.mousePosition.z);

        if(Input.GetButtonDown("Fire1")){
            Instantiate(Block, new Vector3(mousePosX, 0.15f, mousePosZ), Quaternion.identity);
        }
    }
}

在你的例子中,因为你试图找到地面上的点来建造你的街区,你首先需要用一个碰撞器(一个盒子碰撞器,覆盖地面是一个很好的选项)。

现在,将您的更新语句修改为如下所示:

void Update ( )
{
    if ( Input.GetButtonDown ( "Fire1" ) )
    {
        if ( Physics.Raycast ( Camera.main.ScreenPointToRay ( Input.mousePosition ), out var hit ) )
        {
            var point = hit.point;
            point.x = Mathf.RoundToInt ( hit.point.x );
            point.z = Mathf.RoundToInt ( hit.point.z );
            point.y = 0.15f;

            Instantiate ( Block, point, Quaternion.identity );
        }
    }
}

您现在正在做的是从相机中找到一条光线,通过鼠标位置进入场景。它落地的地方是 hit.position Vector3。正是在这一点上,您想四舍五入到一个整数值,然后实例化。

此外,您也可以只在按下开火按钮后才检查鼠标位置。