如何在鼠标光标处生成对象

时间:2017-04-18 16:37:15

标签: c# unity3d unity5

我希望能够实例化鼠标所在的对象。我尝试这样做(下面的代码),但在我的尝试中,对象总是在屏幕的中心产生。我该怎么做才能解决这个问题?

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

public class CraftingControl : MonoBehaviour
{

    public GameObject[] selectedObjectArray = new GameObject[3];
    public GameObject selectedObject;
    // Use this for initialization


    void Update()
    {
        if (selectedObject == null)
        {
            return;
        }
        if (Input.GetMouseButtonDown(0))//Here im getting postion and spawning objects
        {
            Vector3 tempMousePost = Input.mousePosition;
            Vector3 mousePost = Camera.main.ScreenToWorldPoint(tempMousePost);
            mousePost.y = 0;
            Instantiate(selectedObject, mousePost, transform.rotation);

        } 

    }
    void OnGUI()
    {

        if (Input.GetKey(KeyCode.C))
        {
            GUI.Box(new Rect(100, 100, 300, 300), "Crafting");
            if (GUI.Button(new Rect(125, 125, 100, 50), "Campfire"))
            {
                selectedObject = selectedObjectArray[0];
            }

            if (GUI.Button(new Rect(125, 200, 100, 50), "Tent"))
            {
                selectedObject = selectedObjectArray[1];
            }
            if (GUI.Button(new Rect(125, 275, 100, 50), "Fence"))
            {
                selectedObject = selectedObjectArray[2];
            }
        }
    }
}

2 个答案:

答案 0 :(得分:4)

我认为Camera.ScreenToWorldPoint会返回与您的相机的镜头位置相对应的世界中的一个点。它没有返回鼠标下几何体的世界坐标,我怀疑它是你想要的。为此,您需要在场景中进行光线投射并找到交叉点所在的位置。

答案 1 :(得分:0)

我建议您在鼠标位置进行光线投射,如果要进行2D项目,请将Z值设置回来:

 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
 RayCastHit rayHit;
        if (Physics.Raycast(ray, out rayHit))
        {
           Vector3 position = rayHit.point;
           position.z = 0f;
           Instantiate(yourGameObject, position, Quaternion.Identity);
        }