需要在鼠标位置实例化预制件

时间:2019-10-19 12:13:58

标签: c# unity3d

因此,我正在从画布上拖动2D精灵并实例化3D对象。但是问题是预制件在其默认位置产生。This is the code. Removed all the things I tried for spawning

2 个答案:

答案 0 :(得分:0)

您试图实例化预制件而未指定实例化位置。尝试这样的事情。

public void OnEndDrag(PointerEventData eventData)
    {
        Instantiate(prefab,eventData.position);
    }

参考: https://docs.unity3d.com/ScriptReference/Object.Instantiate.html https://docs.unity3d.com/2017.3/Documentation/ScriptReference/EventSystems.PointerEventData-position.html

答案 1 :(得分:0)

您对对象位置不做任何操作,因此它将在原点生成。

在没有看到您的项目的情况下,很难猜测您的游戏需要放置什么行为,我假设您有一个想要放置它的环境,并且可以使用Physics.Raycast()轻松完成。但是,如果您不在任何环境中,则可以从鼠标位置发射光线,并将其投射到相机上任意数量的位置,然后将物体放在那里以取得良好的效果。

此代码段足以满足要求:

public float raycastDistance = 10f;
public float projectDistance = 4f;

public void OnEndDrag(PointerEventData eventData)
{
    var spawned = Instantiate(prefab);

    var ray = Camera.main.ScreenPointToRay(eventData.position);

    if (Physics.Raycast(ray, out RaycastHit hit, raycastDistance)
    {
        spawned.transform.position = hit.point;
    }
    else
    {
        spawned.transform.position = Camera.main.transform.position + (ray * projectDistance);
    }
}

如果愿意,您可以在OnDrag()中更新生成的对象的位置,而不仅仅是在OnDragEnd()中进行设置,如果在鼠标移动时稍微插入对象的位置,效果会很好