unity UI拖拽出3d物体
时间: 2023-06-05 16:04:53 浏览: 214
Unity实现物品拖拽
您好!
在Unity中创建3D物体并在UI上拖拽出它可以通过以下步骤实现:
1. 创建一个3D物体,并将其命名为"3DObject"。
2. 在Hierarchy面板中选择"3DObject",然后在Inspector面板中将"Tag"设置为"Draggable"。
3. 在Hierarchy面板中创建一个UI > Button游戏对象,并将其命名为"DraggableButton"。
4. 在Project面板中创建一个新的C#脚本,并将其命名为"DraggableObject"。
5. 将"DraggableObject"脚本拖放到"3DObject"游戏对象上。
6. 在"DraggableObject"脚本中,添加以下代码:
```
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class DraggableObject : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler {
public Transform parentToReturnTo = null;
public Transform placeholderParent = null;
GameObject placeholder = null;
public void OnBeginDrag(PointerEventData eventData)
{
placeholder = new GameObject();
placeholder.transform.SetParent( this.transform.parent );
LayoutElement le = placeholder.AddComponent<LayoutElement>();
le.preferredWidth = this.GetComponent<LayoutElement>().preferredWidth;
le.preferredHeight = this.GetComponent<LayoutElement>().preferredHeight;
le.flexibleWidth = 0;
le.flexibleHeight = 0;
placeholder.transform.SetSiblingIndex( this.transform.GetSiblingIndex() );
parentToReturnTo = this.transform.parent;
placeholderParent = parentToReturnTo;
this.transform.SetParent( this.transform.parent.parent );
GetComponent<CanvasGroup>().blocksRaycasts = false;
}
public void OnDrag(PointerEventData eventData)
{
this.transform.position = eventData.position;
if(placeholder.transform.parent != placeholderParent)
placeholder.transform.SetParent(placeholderParent);
int newSiblingIndex = placeholderParent.childCount;
for(int i=0; i < placeholderParent.childCount; i++)
{
if(this.transform.position.x < placeholderParent.GetChild(i).position.x)
{
阅读全文