欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Unity小地图方向位置同步

程序员文章站 2022-07-14 08:50:46
...

欢迎加入Unity业内qq交流群:956187480

qq扫描二维码加群

Unity小地图方向位置同步


demo下载地址:https://download.csdn.net/download/qq_37310110/13119995

先声明一点这个只是功能思路并不是一个完整小地图功能,传统的小地图功能一般是使用一张2d原画1:1描绘出场景里面的静态画面,当然了很多小的demo里面直接使用多相机渲染也是可以的不过会有一些局限性(主要是不美观),这里就不讲述这两种地图的实现方法了,也不复杂就是体力活。

副业店铺有客户让帮忙写个小地图功能效果如下:小地图上要有箭头指示方向同步玩家的位置和旋转
写完了以后客户很满意,就贴出来给大家后面参考,没什么难度跟着想法走就行,后面想着以这个为基础把LOL里面的地图系统完整的打造出来方便以后用在的个人项目里

 

Unity小地图方向位置同步

Unity小地图方向位置同步

要点:地形和地图的位置映射
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扫描二维码加群

Unity小地图方向位置同步