Question by
Alexandre_I · Feb 12, 2018 at 05:06 PM ·
instantiateprefabdragclamppanel
how to drag a instantiate Panel (prefab)?
hello,
I have a Panel that i can drag (thanks to this https://unity3d.com/fr/learn/tutorials/modules/intermediate/live-training-archive/panels-panes-windows) but when i instantiate a new Panel, the script for drag don't work, i dont really undesrtand why. can you help me please? that is the script for drag my panel :
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using UnityEngine;
using System.Collections.Generic;
using System;
public class DragPanel_Script : MonoBehaviour, IDragHandler, IEventSystemHandler
{
private Vector2 pointerOffset;
private RectTransform canvasRectTransform;
private RectTransform panelRectTransform;
void Start()
{
}
void Awake ()
{
Canvas canvas = GetComponentInParent<Canvas>();
if (canvas != null)
{
canvasRectTransform = canvas.transform as RectTransform;
panelRectTransform = transform.parent as RectTransform;
}
}
public void OnPointerDownDelegate(PointerEventData data)
{
panelRectTransform.SetAsLastSibling();
RectTransformUtility.ScreenPointToLocalPointInRectangle(
panelRectTransform,
data.position,
data.pressEventCamera,
out pointerOffset);
}
public void OnDrag(PointerEventData data)
{
if (panelRectTransform == null)
return;
Vector2 localPointerPosition;
Vector2 pointerPosition = ClampToWindow(data);
if (RectTransformUtility.ScreenPointToLocalPointInRectangle(
canvasRectTransform,
pointerPosition,
data.pressEventCamera,
out localPointerPosition))
{
panelRectTransform.localPosition = localPointerPosition - pointerOffset;
}
}
private Vector2 ClampToWindow(PointerEventData data)
{
Vector2 rawPointerPosition = data.position;
Vector3[] canvasCorners = new Vector3[4];
canvasRectTransform.GetWorldCorners(canvasCorners);
float clampedX = Mathf.Clamp(rawPointerPosition.x, canvasCorners[0].x, canvasCorners[2].y);
float clampedY = Mathf.Clamp(rawPointerPosition.y, canvasCorners[0].y, canvasCorners[2].y);
Vector2 newPointerPosition = new Vector2(clampedX, clampedY);
return (newPointerPosition);
}
}
Comment
Your answer
![](https://koobas.hobune.stream/wayback/20220612152502im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Screen Space - Camera : Not displaying button size correctly during play 0 Answers
My code is instantiating many prefabs, i only want one. 1 Answer
Generating prefabs at origin that are children of moving GameObjects? 2 Answers
How to spawn a prefab at a duplicate objects location 1 Answer
I get an error message every time i run this script? Any ideas? 0 Answers