因此,我正在从画布上拖动2D精灵并实例化3D对象。但是问题是预制件在其默认位置产生。This is the code. Removed all the things I tried for spawning
答案 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()
中进行设置,如果在鼠标移动时稍微插入对象的位置,效果会很好