首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要在鼠标位置实例化prefab

需要在鼠标位置实例化prefab
EN

Stack Overflow用户
提问于 2019-10-19 20:13:58
回答 2查看 42关注 0票数 0

所以,我从画布上拖动2D精灵并实例化一个3D对象。但问题是预制工厂是在它们的默认位置产生的。This is the code. Removed all the things I tried for spawning

EN

回答 2

Stack Overflow用户

发布于 2019-10-19 23:10:00

您正在尝试实例化一个预制件,但没有指定要实例化的位置。试试这样的东西。

代码语言:javascript
复制
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

票数 0
EN

Stack Overflow用户

发布于 2019-10-21 14:12:26

您不需要对对象位置做任何操作,因此它将在原点繁殖。

如果没有看到你的项目,很难猜测你的游戏需要什么来放置行为,我假设你有一个你想要放置它的环境,这可以很容易地通过一个Physics.Raycast()来完成。但是如果你不在任何环境中,那么你可以从你的鼠标位置发射一条光线,并从相机向前投射任意数量的光线,然后将物体放置在那里,以获得良好的效果。

这段代码应该就足够了:

代码语言:javascript
复制
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()中设置,如果在鼠标移动时稍微插值对象的位置,效果会非常好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58463566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档