将2D纹理从库存拖动到游戏
本文关键字:拖动 游戏 2D 纹理 | 更新日期: 2023-09-27 18:01:00
好吧,所以我正在制作一款移动2d建筑游戏。你可以在游戏中从你的库存中拖动一个矩形或圆形。
我希望如何设置:当我将库存中的一个物品拖到游戏中时,顶部或右侧是一个带有对象/纹理的库存。然后它从库存中删除该项目。之后,物品库存将全部向上移动1个插槽。使得第一时隙一直被占用。
我该怎么做?有人能帮我思考或者给我举一些例子吗?
提前感谢!
首先需要为库存中的项目绘制一个图像。我以前用一个带有图像的GUI按钮做过这个操作。下面是C#中的一个例子:
void OnGUI(){
if (GUI.Button(new Rect(0, 0 , 10, 10), itemTexture,))
{
//The if here is to get when the image get pushed.
//Push the item to the world
}
}
当玩家点击物品时,你必须将其推向世界。你可以用这个代码做到这一点:
private Vector3 mousePositionInWorld = Camera.main.ScreenToWorldPoint(Input.mousePosition);
private Object block = Instantiate(objectYouClicked, new Vector3(mousePositionInWorld.x, mousePositionInWorld.y, 0), Quaternion.identity);
对象必须绑定到玩家鼠标/触摸位置。您可以使用以下代码将对象绑定到玩家:
private Vector3 screenPoint;
void OnMouseDown()
{
screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position);
}
void OnMouseDrag()
{
Vector3 currentScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
Vector3 currentPos = Camera.main.ScreenToWorldPoint(currentScreenPoint);
rigidbody.MovePosition(currentPos);
}
例如,您有一个库存对象。像这样:
void OnGUI(){
if (GUI.Button(new Rect(0, 0 , 10, 10), itemTexture,))
{
private Vector3 mousePositionInWorld = Camera.main.ScreenToWorldPoint(Input.mousePosition);
private Object block = Instantiate(objectYouClicked, new Vector3(mousePositionInWorld.x, mousePositionInWorld.y, 0), Quaternion.identity);
}
}
然后你有一个预制/对象,附带一个包含以下代码的脚本:
private Vector3 screenPoint;
void OnMouseDown()
{
screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position);
}
void OnMouseDrag()
{
Vector3 currentScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
Vector3 currentPos = Camera.main.ScreenToWorldPoint(currentScreenPoint);
rigidbody.MovePosition(currentPos);
}
这样,当玩家点击并按住对象上的鼠标按钮时,位置将更改为鼠标位置。