Unity小地图方向位置同步
程序员文章站
2022-07-14 08:50:46
...
欢迎加入Unity业内qq交流群:956187480
qq扫描二维码加群
demo下载地址:https://download.csdn.net/download/qq_37310110/13119995
先声明一点这个只是功能思路并不是一个完整小地图功能,传统的小地图功能一般是使用一张2d原画1:1描绘出场景里面的静态画面,当然了很多小的demo里面直接使用多相机渲染也是可以的不过会有一些局限性(主要是不美观),这里就不讲述这两种地图的实现方法了,也不复杂就是体力活。
副业店铺有客户让帮忙写个小地图功能效果如下:小地图上要有箭头指示方向同步玩家的位置和旋转
写完了以后客户很满意,就贴出来给大家后面参考,没什么难度跟着想法走就行,后面想着以这个为基础把LOL里面的地图系统完整的打造出来方便以后用在的个人项目里
要点:地形和地图的位置映射
1. 需要知道玩家相对于地形的位置偏移
offsetP_T = Player.position - Terrain.transform.position;
2. 玩家相对于地形偏移量的 X轴方向的比列系数
proportion_X = offsetP_T.x / Terrain.terrainData.size.x;
3.玩家相对于地形偏移量的 Y轴方向的比列系数
proportion_Y = offsetP_T.z / Terrain.terrainData.size.z;
4.根据计算的比列系数和地图的长宽可以计算 虚拟玩家相对于地图的位置偏移量
offsetP_Mx = parentRect.sizeDelta.x * proportion_X;
offsetP_My = parentRect.sizeDelta.y * proportion_Y;
5.给虚拟玩家位置赋值即可
transform.localPosition = new Vector2(offsetP_Mx, offsetP_My);
全部代码:脚本挂在地图ui的箭头上即可,玩家和地形要进行赋值
#region 模块信息
// **********************************************************************
// Copyright (C) 2020
// Please contact me if you have any questions
// File Name: Map
// Author: 幻世界
// QQ: 853394528
// **********************************************************************
#endregion
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Map : MonoBehaviour
{
public Transform Player;
public Terrain Terrain;
RectTransform parentRect;
//玩家相对于地形的偏移量
Vector3 offsetP_T;
//偏移量的x值和地形的宽的比列系数
float proportion_X;
//偏移量的z值和地形的长的比列系数
float proportion_Y;
//虚拟玩家相对于地图的偏移量的x值
float offsetP_Mx;
//虚拟玩家相对于地图的偏移量的y值
float offsetP_My;
void Start()
{
parentRect = transform.parent.GetComponent<RectTransform>();
}
float h;
float v;
// Update is called once per frame
void Update()
{
//玩家相对于地形的位置偏移
offsetP_T = Player.position - Terrain.transform.position;
//玩家相对于地形偏移量的 X轴方向的比列系数
proportion_X = offsetP_T.x / Terrain.terrainData.size.x;
//玩家相对于地形偏移量的 Y轴方向的比列系数
proportion_Y = offsetP_T.z / Terrain.terrainData.size.z;
//虚拟玩家相对于地图背景的位置偏移的X值
offsetP_Mx = parentRect.sizeDelta.x * proportion_X;
//虚拟玩家相对于地图背景的位置偏移的Z值
offsetP_My = parentRect.sizeDelta.y * proportion_Y;
transform.localPosition = new Vector2(offsetP_Mx, offsetP_My);
h = Input.GetAxis("Horizontal");
v = Input.GetAxis("Vertical");
Player.transform.Translate(Vector3.forward * Time.deltaTime * v * 20);
Player.transform.Rotate(Vector3.up * Time.deltaTime * h * 200);
transform.Rotate(-Vector3.forward * Time.deltaTime * h * 200);
}
}
demo下载地址:https://download.csdn.net/download/qq_37310110/13119995
欢迎加入Unity业内qq交流群:956187480
qq扫描二维码加群