游戏物体拖拽、点击功能实现

       上一篇讲了UGUI的拖拽,其实所有游戏物体都可以通过实现IDragHandler, IBeginDragHandler, IEndDragHandler的接口来实现拖拽功能,如果要实现点击功能的话就实现IPointerClickHandler的接口。

        需要条件:

       1、需要添加Collider;

       2、需要手动添加Physic 2D Raycaster或Physic Raycaster(如果想实现2d和3d物体的点击拖拽功能,则两者都添加上;UGUI需要Graphic Raycaster组件,默认在创建canvas时自动添加)。

      可以封装一个事件处理的脚本,通过注册事件来实现相应的功能:

using UnityEngine;
using UnityEngine.EventSystems;
public class EventTriggerListener : MonoBehaviour,IPointerClickHandler, IPointerDownHandler, IPointerEnterHandler,
IPointerExitHandler, IPointerUpHandler,IDragHandler
{
	public delegate void VoidDelegate1(GameObject go, PointerEventData eventData);
	public event VoidDelegate1 OnClick;
	public event VoidDelegate1 OnDown;
	public event VoidDelegate1 OnEnter;
	public event VoidDelegate1 OnExit;
	public event VoidDelegate1 OnUp;
	public event VoidDelegate1 OnDragging;

	static public EventTriggerListener Get(GameObject go)
	{
		
		EventTriggerListener listener = go.GetComponent<EventTriggerListener>();
		if (listener == null) listener = go.AddComponent<EventTriggerListener>();
		return listener;
	}
	public void OnPointerClick (PointerEventData eventData)
	{
		if (OnClick != null) OnClick(gameObject, eventData);
	
	}
	public void OnPointerDown(PointerEventData eventData)
	{
		if (OnDown != null) OnDown(gameObject, eventData);
	}
	public void OnPointerEnter(PointerEventData eventData)
	{
		if (OnEnter != null) OnEnter(gameObject, eventData);
	}
	public void OnPointerExit(PointerEventData eventData)
	{
		if (OnExit != null) OnExit(gameObject, eventData);
	}
	public void OnPointerUp(PointerEventData eventData)
	{
		if (OnUp != null) OnUp(gameObject, eventData);
	}
	public void OnDrag (PointerEventData eventData)
	{
		if(OnDragging!=null) OnDragging(gameObject,eventData);
	}
}

注册事件:

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class Main : MonoBehaviour
{
    public SpriteRenderer spriteRenderer;
    public Image image;
    private void Start()
    {
        EventTriggerListener.Get(spriteRenderer.gameObject).OnClick += OnClick;
        EventTriggerListener.Get(image.gameObject).OnClick += OnClick;
        EventTriggerListener.Get(image.gameObject).OnDragging += OnDrag;
    }
    void OnClick(GameObject go, PointerEventData eventData)
    {
        Debug.Log("OnClick:"+go.name);
    }
    void OnDrag(GameObject go, PointerEventData eventData)
    {
        Debug.Log("Drag:" + go.name);
    }
}

                             

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity是一款强大的游戏开发引擎,它提供了丰富的功能实现自由查看3D物体。以下是一些常用的方法: 1. 摄像机控制:在Unity,可以通过摄像机控制来实现自由查看3D物体。可以使用鼠标控制摄像机的旋转、缩放和移动,以便在场景查看物体的不同角度和位置。可以使用Unity提供的摄像机脚本或自定义脚本来实现这些功能。 2. 物体交互:可以通过在物体上添加交互组件,让用户与物体进行交互,从而实现自由查看。例如,可以给物体添加拖拽组件,让用户通过鼠标拖拽物体来移动和旋转;也可以添加点击组件,在物体点击时切换不同的视角。这些交互组件可以通过Unity的脚本系统编写或使用现成的插件。 3. 视角切换:在Unity,可以通过切换不同的摄像机或相机视角来实现自由查看3D物体。可以创建多个摄像机,分别定位到不同的角度和位置,并在需要时切换摄像机来实现不同视角的查看。 4. 虚拟现实 (VR) 和增强现实 (AR) 技术:Unity提供了强大的虚拟现实和增强现实技术,可以让用户通过VR头盔或AR设备与3D物体进行互动。用户可以自由移动头盔或设备来查看物体的不同角度和位置,增强沉浸感和交互性。 总之,Unity提供了丰富的功能和工具来实现自由查看3D物体。可以根据项目需求和个人技术水平选择适合的方法来实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值