UGUI

来源:互联网 发布:乐知英语在哪里 编辑:程序博客网 时间:2024/04/30 15:26


using UnityEngine;

using UnityEngine.EventSystems;

using UnityEngine.UI;

 

[RequireComponent(typeof(Image))]

public class DragMe : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler

{

public bool dragOnSurfaces = true;

private GameObject m_DraggingIcon;

private RectTransform m_DraggingPlane;

 

public void OnBeginDrag(PointerEventData eventData)

{

var canvas = FindInParents<Canvas>(gameObject);

if (canvas == null)

return;

 

// We have clicked something that can be dragged.

// What we want to do is create an icon for this.

m_DraggingIcon = new GameObject("icon");

 

m_DraggingIcon.transform.SetParent (canvas.transform, false);

m_DraggingIcon.transform.SetAsLastSibling();

var image = m_DraggingIcon.AddComponent<Image>();

// The icon will be under the cursor.

// We want it to be ignored by the event system.

CanvasGroup group = m_DraggingIcon.AddComponent<CanvasGroup>();

group.blocksRaycasts = false;

 

image.sprite = GetComponent<Image>().sprite;

image.SetNativeSize();

if (dragOnSurfaces)

m_DraggingPlane = transform as RectTransform;

else

m_DraggingPlane = canvas.transform as RectTransform;

SetDraggedPosition(eventData);

}

 

public void OnDrag(PointerEventData data)

{

if (m_DraggingIcon != null)

SetDraggedPosition(data);

}

 

private void SetDraggedPosition(PointerEventData data)

{

if (dragOnSurfaces && data.pointerEnter != null && data.pointerEnter.transform as RectTransform != null)

m_DraggingPlane = data.pointerEnter.transform as RectTransform;

var rt = m_DraggingIcon.GetComponent<RectTransform>();

Vector3 globalMousePos;

if (RectTransformUtility.ScreenPointToWorldPointInRectangle(m_DraggingPlane, data.position, data.pressEventCamera, out globalMousePos))

{

rt.position = globalMousePos;

rt.rotation = m_DraggingPlane.rotation;

}

}

 

public void OnEndDrag(PointerEventData eventData)

{

if (m_DraggingIcon != null)

Destroy(m_DraggingIcon);

}

 

static public T FindInParents<T>(GameObject go) where T : Component

{

if (go == null) return null;

var comp = go.GetComponent<T>();

 

if (comp != null)

return comp;

Transform t = go.transform.parent;

while (t != null && comp == null)

{

comp = t.gameObject.GetComponent<T>();

t = t.parent;

}

return comp;

}

}




using UnityEngine;

 

public class TiltWindow : MonoBehaviour

{

public Vector2 range = new Vector2(5f, 3f);

 

Transform mTrans;

Quaternion mStart;

Vector2 mRot = Vector2.zero;

 

void Start ()

{

mTrans = transform;

mStart = mTrans.localRotation;

}

 

void Update ()

{

Vector3 pos = Input.mousePosition;

 

float halfWidth = Screen.width * 0.5f;

float halfHeight = Screen.height * 0.5f;

float x = Mathf.Clamp((pos.x - halfWidth) / halfWidth, -1f, 1f);

float y = Mathf.Clamp((pos.y - halfHeight) / halfHeight, -1f, 1f);

mRot = Vector2.Lerp(mRot, new Vector2(x, y), Time.deltaTime * 5f);

 

mTrans.localRotation = mStart * Quaternion.Euler(-mRot.y * range.y, mRot.x * range.x, 0f);

}

}



0 0
原创粉丝点击