首页 > 其他分享 >Unity游戏副本地图点击图标移动功能

Unity游戏副本地图点击图标移动功能

时间:2023-01-05 13:41:03浏览次数:46  
标签:minimap 副本 maxmap GetComponent Screen Unity tempVector sizeDelta 图标


本篇讲相同的功能即:点击地图中的一个位置,让图标瞬间移动到点击位置,同时3D场景中人物也可以抵达场景中对应的点击位置。

如图:

Unity游戏副本地图点击图标移动功能_Click

操作方法和之前一样:

找到大地图的渲染的Rawimage。然后在它上面添加EventTrigger用来实现交互。接着添加新脚本Click map。

Unity游戏副本地图点击图标移动功能_游戏_02

Unity游戏副本地图点击图标移动功能_3D_03

脚本的代码内容如下:

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;

public class ClickMap : MonoBehaviour, IPointerClickHandler
{
public testmin minimap;
private Vector2 tempVector;
private Vector2 raypoint;
public void OnPointerClick(PointerEventData eventData)
{
tempVector = new Vector2(eventData.pointerCurrentRaycast.screenPosition.x / Screen.width, eventData.pointerCurrentRaycast.screenPosition.y / Screen.height);

Debug.Log("d点击位置"+tempVector);

//通用分辨率
raypoint = new Vector2((tempVector.x - (((Screen.width - minimap.maxmap.GetComponent<RectTransform>().sizeDelta.x) / 2) / Screen.width)) / (minimap.maxmap.GetComponent<RectTransform>().sizeDelta.x / Screen.width),
(tempVector.y - (((Screen.height - minimap.maxmap.GetComponent<RectTransform>().sizeDelta.y) / 2) / Screen.height)) / (minimap.maxmap.GetComponent<RectTransform>().sizeDelta.x / Screen.height));



Ray ray = minimap.minicamera.ViewportPointToRay(raypoint);//将视图窗口点击位置转化到相机射线
RaycastHit hit;
if (Physics.Raycast(ray, out hit, Mathf.Infinity))
{

{
minimap.player.position = hit.point;
Debug.Log("位置" + tempVector);
}

}
}
}

整体代码需要理解的地方。

一个重要的方法就是: Ray ray = minimap.minicamera.ViewportPointToRay(raypoint);//将视图窗口点击位置转化到相机射线。


//通用分辨率
raypoint = new Vector2((tempVector.x - (((Screen.width - minimap.maxmap.GetComponent<RectTransform>().sizeDelta.x) / 2) / Screen.width)) / (minimap.maxmap.GetComponent<RectTransform>().sizeDelta.x / Screen.width),
(tempVector.y - (((Screen.height - minimap.maxmap.GetComponent<RectTransform>().sizeDelta.y) / 2) / Screen.height)) / (minimap.maxmap.GetComponent<RectTransform>().sizeDelta.x / Screen.height));

     

掌握了这几点核心就没什么问题了。至此副本地图的功能也讲完了。

标签:minimap,副本,maxmap,GetComponent,Screen,Unity,tempVector,sizeDelta,图标
From: https://blog.51cto.com/u_8378185/5990794

相关文章

  • unity3D实现镜头拉近拉远及视角旋转
    镜头拉近拉远的代码(无限拉远拉近) 代码如下: if(Input.GetAxis("MouseScrollWheel")!=0){this.gameObject.transform.Translate(newVector3(0,0,Input.GetAxis("Mouse......
  • unity读取Excel
    使用unity5.6的和Excel是2016版本。新建工程,新建文件夹Plugins,然后导入两个dll,一个是EXCEL一个system.Data。  读取脚本如下:usingSystem.Collections.Generic;usingUnit......
  • Unity之使用Assetbundle更新视频文件
    承接之前讲过的Assetbundle的内容。这次要讲解更新游戏中的CG的视频案例。开发内容:点击按钮加载视频数据,按鼠标右键播放加载完成的视频。第一步,新建一个unity的场景。场景非......
  • unity之network客户端向服务器发送消息【Command】方法详解
    如果是纯粹是聊天室功能则可以使用NetworkView的方法来进行,简单实用。如果不是聊天室功能而是要传递数据给服务器,同时为了以后更多功能的拓展性,还是应该用networkmanager来......
  • Unity之NetworkView聊天室功能
    NetworkView是Unity封装的一套快速实现多人联机游戏的功能。以此为基础,我们可以开发各种类型的多人游戏,可以开发过关游戏的双人联机,也可以开发类似于CS的射击游戏,以房间为单......
  • unity之粒子碰撞触发方法
    需求是用水灭掉火焰。所以水的粒子要与火焰的粒子发生碰撞时执行灭火事件。效果如图: 首先从火焰角度思考:火焰的粒子要监测是否被撞到,所以要给它加上碰撞体。同时勾选collis......
  • Unity制作聊天室功能
    用untiy作客户端、用VS的控制台程序来做服务器。首先是服务器端的代码,分两个类一个Program,一个ForClient类。分别如下:usingSystem.Net.Sockets;usingSystem.Collections.......
  • unity的UI Event事件(Event Trigger和EventSystem对比)
    首先看Unity中UIEvent事件介绍上图中出现的组件在场景里都是unity里的事件相关的组件。例如:场景里EventSystem里默认就有Standaloneinputmodule这个组件(当然也可以随便加......
  • Unity3D之数据持久化储存
        首先我们来看两段Unity3D中实现数据读写的简单代码吧://保存数据PlayerPrefs.SetString("Name",mName);PlayerPrefs.SetInt("Age",mAge);PlayerPref......
  • Unity计时器功能
    在程序开发中很多地方会用到计时器进行倒计时的功能。下面我就写一个非常实用的倒计时功能。首先在场景中建一个Text用来显示倒计时的数值,然后给它加上倒计时的脚本Timer。......