Unity 使用Camera制作小地图显示,玩家可通过点击小地图到达任意位置

创建小地图显示的方法很多,各有千秋,最近项目需要用到小地图实时显示玩家的位置,并且玩家可通过点击小地图跳转到所点击的位置,因前期偷懒没有只考虑了显示玩家的位置并没有考虑小地图的可点击的情况,后来通过判断鼠标的位置来解决了这个问题,所以再次记录一下:

  1. 使用第二个相机创建小镜头,并通过调节ViewportRect的数值来控制显示的位置;

Viewport Rect

四个值表示这个摄像机视图将在屏幕上的哪个位置被绘制。在Viewport坐标中测量(值0-1)。

X

相机视图将被绘制的开始水平位置。

Y

相机视图将被绘制的开始垂直位置。

W (Width)

屏幕上相机输出的宽度。

H (Height)

摄像头在屏幕上输出的高度。

小地图左下角坐标可通过:

x= Screen.width * ViewportRect.rect.x;

y=Screen.height * ViewportRect.rect.y;

maxY= yMin + Screen.height * ViewportRect.rect.height;

maxX = xMin + Screen.width * ViewportRect.rect.width;

点击相应通过射线来触发;

具体代码如下:

public class MinDemo : MonoBehaviour

{

/// <summary>

/// 玩家

/// </summary>

public Transform Play;

/// <summary>

/// 小地图的相机

/// </summary>

public Camera minCam;

/// <summary>

/// 小地图是否可点击

/// </summary>

public bool minCamIsClick;

[HideInInspector]

/// <summary>

///记录小地图的最大以及最小坐标值

/// </summary>

public float xMin, xMax, yMin, yMax;

/// <summary>

/// 当前鼠标的坐标

/// </summary>

[HideInInspector]

public Vector2 mousePos;

void Update()

{

if (minCamIsClick)

if (minCam.gameObject.activeSelf == true)

{

if (Input.GetMouseButton(0))

{

//小镜头显示框的左下角坐标

xMin = Screen.width * minCam.rect.x;

yMin = Screen.height * minCam.rect.y;

//左下角的坐标加上相机视口的高度或宽度为最大坐标

yMax = yMin + Screen.height * minCam.rect.height;

xMax = xMin + Screen.width * minCam.rect.width;

mousePos = Input.mousePosition;

if (mousePos.x > xMin && mousePos.x < xMax && mousePos.y > yMin && mousePos.y < yMax)

{

Ray ray = minCam.ScreenPointToRay(Input.mousePosition);

RaycastHit hit;

if (Physics.Raycast(ray, out hit))

{

Play.position = new Vector3(hit.point.x, Play.position.y, hit.point.z);

}

}

}

}

}

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Unity制作地图并进行放大缩小是比较常见的功能。下面是一个简单的实现步骤: 1. 导入地图素材:将小地图的图片素材导入Unity项目中,并确保其格式为常见的图片格式(如PNG、JPEG等)。 2. 创建地图对象:在Unity场景中创建一个空物体,并将导入的地图图片设置为其子对象。可以根据需求,设置地图位置、缩放和旋转等属性。 3. 放大缩小功能的实现:可以通过代码或者UI交互的方式来实现地图的放大缩小。以下是一个简单的代码示例: ``` public class MiniMapController : MonoBehaviour { private float minScale = 0.5f; // 最小缩放值 private float maxScale = 2.0f; // 最大放大值 private float zoomSpeed = 0.1f; // 缩放速度 void Update() { // 获取鼠标滚轮输入 float scroll = Input.GetAxis("Mouse ScrollWheel"); // 根据滚轮输入计算缩放值 float currentScale = transform.localScale.x; float newScale = currentScale + scroll * zoomSpeed; // 限制缩放在最小值和最大值之间 newScale = Mathf.Clamp(newScale, minScale, maxScale); // 更新地图缩放 transform.localScale = new Vector3(newScale, newScale, newScale); } } ``` 这段脚本代码可以添加到地图对象上,并且在运行时,向上滚动鼠标滚轮可以使地图放大,向下滚动则可以使地图缩小。 当然,这只是一个简单的实现方式。根据具体需求,还可以增加更多的功能,例如拖拽地图等。希望对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值