C# 需要在鼠标位置实例化预置

C# 需要在鼠标位置实例化预置,c#,unity3d,C#,Unity3d,因此,我从画布上拖动2D精灵并实例化3D对象。但问题是预制件在其默认位置生成。您试图在不指定实例化位置的情况下恢复预制件。试试这样的 public void OnEndDrag(PointerEventData eventData) { Instantiate(prefab,eventData.position); } 参考: 您不需要对对象位置执行任何操作,因此它将在原点生成 如果不看你的项目,很难猜测你的游戏需要什么来放置行为,我假设你有一个你想要放置它的环

因此,我从画布上拖动2D精灵并实例化3D对象。但问题是预制件在其默认位置生成。

您试图在不指定实例化位置的情况下恢复预制件。试试这样的

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

您不需要对对象位置执行任何操作,因此它将在原点生成

如果不看你的项目,很难猜测你的游戏需要什么来放置行为,我假设你有一个你想要放置它的环境,这可以通过
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()
中进行设置,如果您在鼠标移动时稍微插入对象的位置,这看起来会很不错。

是否可以添加代码而不是代码的屏幕截图?如果使用特定的标记,可以获得非常好的格式