所以,我从画布上拖动2D精灵并实例化一个3D对象。但问题是预制工厂是在它们的默认位置产生的。This is the code. Removed all the things I tried for spawning
发布于 2019-10-19 23:10:00
您正在尝试实例化一个预制件,但没有指定要实例化的位置。试试这样的东西。
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
发布于 2019-10-21 14:12:26
您不需要对对象位置做任何操作,因此它将在原点繁殖。
如果没有看到你的项目,很难猜测你的游戏需要什么来放置行为,我假设你有一个你想要放置它的环境,这可以很容易地通过一个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()中设置,如果在鼠标移动时稍微插值对象的位置,效果会非常好。
https://stackoverflow.com/questions/58463566
复制相似问题