我已经创建了一个脚本,该脚本应该根据鼠标位置实例化gameobject,但是出了问题。它只是在屏幕的一个位置和中间进行实例化。
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;
}
}
}
请告诉我我的剧本有什么问题。
答案 0 :(得分:4)
问题是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
被调用一次,直到密钥被释放。按住按键时会反复调用Input.GetMouseButton
,您可以轻松地创建数千个对象。