C# 在鼠标位置实例化对象

C# 在鼠标位置实例化对象,c#,unity3d,C#,Unity3d,我已经创建了一个脚本,该脚本应该根据鼠标位置实例化游戏对象,但出现了一些问题。它只是在屏幕的一个位置和中间被实例化。 using System.Collections; using System.Collections.Generic; using UnityEngine; public class LineInstantiater : MonoBehaviour { public GameObject lineprefab; private GameObject lineh

我已经创建了一个脚本,该脚本应该根据鼠标位置实例化游戏对象,但出现了一些问题。它只是在屏幕的一个位置和中间被实例化。

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

public class LineInstantiater : MonoBehaviour {

    public GameObject lineprefab;
    private GameObject linehandler;
    private Vector3 mousepos;

    void Update(){
        if (Input.GetMouseButton (0)) {
            mousepos = Camera.main.ScreenToWorldPoint (Input.mousePosition);
            linehandler = Instantiate (lineprefab,Camera.main.ScreenToWorldPoint(Input.mousePosition),Quaternion.identity) as GameObject ;
            linehandler.transform.position = mousepos;
        }
    }

}

请告诉我我的脚本有什么问题

问题在于
Input.mousePosition
没有z轴,因为鼠标坐标只有x轴和y轴。
z
轴只是
0
,因此在使用
Camera.main.ScreenToWorldPoint
时返回错误的位置

您需要执行
Input.mousePosition,手动将其z轴值修改为任意值
>0
。通常,
10
可以这样做,但如果不够,您可以修改它。然后,您可以将修改后的
Vector3
传递给
Camera.main.ScreenToWorldPoint(mousepos)
函数

public GameObject lineprefab;
private GameObject linehandler;
private Vector3 mousepos;

void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        mousepos = Input.mousePosition;
        mousepos.z = 10;

        mousepos = Camera.main.ScreenToWorldPoint(mousepos);
        linehandler = Instantiate(lineprefab, mousepos, Quaternion.identity) as GameObject;
    }
}

public GameObject lineprefab;
private GameObject linehandler;

void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        Ray rayCast = Camera.main.ScreenPointToRay(Input.mousePosition);
        linehandler = Instantiate(lineprefab, rayCast.GetPoint(10), Quaternion.identity) as GameObject;
    }
}
不相关:


我注意到您正在使用
Input.GetMouseButton
。您可能希望
Input.GetMouseButtonDown
作为
Input.GetMouseButtonDown
被调用一次,直到释放键为止<代码>输入。按住该键时,会重复调用GetMouseButton
,您可以轻松创建数千个对象。

您好,您有什么问题?出了什么问题?如果您有任何错误,请将其发布。@程序员检查它是否已编辑。我总是忘了提那件事。对不起,我们不知道你有什么问题。“在一个位置实例化”是什么意思?预设没有实例化鼠标箭头所在的位置?这是什么类型的物体?用户界面,二维还是三维对象?我建议你发布截图too@Programmer不实例化鼠标箭头所在的位置。答案取决于它是什么类型的对象。用户界面(图像、原始图像组件)、2D(喷绘渲染器)或3D(网格渲染器)对象?