unity小地图制作代码....

using UnityEngine;
using UnityEngine.EventSystems;

public class UIMiniMap : MonoBehaviour, IPointerDownHandler
{
    /// <summary>
    /// 小地图上的A点
    /// </summary>
    public RectTransform a;
    /// <summary>
    /// 小地图上的B点
    /// </summary>
    public RectTransform b;
    /// <summary>
    /// 控制的东西,这里使用cube代替
    /// </summary>
    public GameObject players;
    /// <summary>
    /// 3D物体0点,设置初始点
    /// </summary>
    public GameObject zerpos;
    /// <summary>
    /// 摄像机
    /// </summary>
    private Camera UICamera;
    /// <summary>
    /// 地图大小
    /// </summary>
    public float scale = 160;
    /// <summary>
    /// A,B两点
    /// </summary>
    private Vector3 acpos;
    private Vector3 bcpos;

    void Start()
    {
        setCamera(gameObject);
    }

    void setCamera(GameObject gam)
    {
        if (gam.GetComponent<Canvas>() != null)
        {
            Canvas can = gam.GetComponent<Canvas>();
            //设置画布相机的渲染模式为worldCamera
            if (can.renderMode == RenderMode.ScreenSpaceOverlay)
            {
                UICamera = null;
            }
          else
            {
                //
                UICamera = can.worldCamera;
            }
            return;
        }
        //获得父类,Canvas物体
        gam = gam.transform.parent.gameObject;
        //在运行的过程中实时设置摄像机的渲染模式
        setCamera(gam);
    }
    /// <summary>
    /// 鼠标点击事件的处理
    /// </summary>
    /// <param name="eventData">鼠标点击事件处理类</param>
    public void OnPointerDown(PointerEventData eventData)
    {
        III(eventData);
    }
    public void OnDrag(PointerEventData eventData)
    {
        III(eventData);
    }

    /// <summary>
    /// 处理鼠标点击事件的方法
    /// </summary>
    /// <param name="eventData"></param>
    void III(PointerEventData eventData)
    {
            if (UICamera == null)
            {
                //获取A,B两点,并保存
                acpos = a.position;
                bcpos = b.position;
            }
            else
            {
                acpos = UICamera.WorldToScreenPoint(a.position);
                bcpos = UICamera.WorldToScreenPoint(b.position);
            }
        //计算两个点的差值
            float h = bcpos.y - acpos.y;
            float w = bcpos.x - acpos.x;
<span style="white-space:pre">	</span>//计算鼠标点击的点与A,B两点的差值
            float tempH = eventData.position.y - acpos.y;
            float tempW = eventData.position.x - acpos.x;
        //小地图与大地图的转换公式
            float dtw = tempW / w * scale;
            float dth = tempH / h * scale;
        //把新的位置赋值给players,实现在小地图中的移动
            Vector3 tempPos = new Vector3(dtw, players.transform.position.y, dth);
            players.transform.position = zerpos.transform.position + tempPos;
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值