Unity的小地图功能的制作

今天我们来讲一下小地图的制作

首先在场景里创建一个Cube,坐标设置为在这里插入图片描述
然后创建一个plane作为地面设置坐标点为在这里插入图片描述
创建另一个Cube作为前面创建的Cube的子物体并改成红色位置位置和缩放为
在这里插入图片描述
②创建一个image设置锚点为左上角
在这里插入图片描述
再创建一个image为其子物体
在这里插入图片描述
然后我找了一张箭头的图片在这里插入图片描述
切换为sprite给这个image赋值

using UnityEngine;
using UnityEngine.UI;
public class PlayMoveCtr : MonoBehaviour
{
    /// <summary>
    /// 角色控制器
    /// </summary>
    private CharacterController _player;

    /// <summary>
    /// plane
    /// </summary>
    public GameObject terrain;
    /// <summary>
    /// 由于plane的长度未知所以通过代码获取各个方向上的长度,
    /// 虽然本程序plane是单位plane
    /// </summary>
    float _xlength;
    float _ylength;
    float _zlength;
    // Use this for initialization
    void Start ()
	{
	    _player = GetComponent<CharacterController>();
	    Vector3 length = GetComponent<MeshFilter>().mesh.bounds.size;
	    _xlength = length.x * transform.lossyScale.x;
	    _ylength = length.y * transform.lossyScale.y;
	    _zlength = length.z * transform.lossyScale.z;
    }
    /// <summary>
    /// 目标点坐标
    /// </summary>
    private Vector3 _targetpos;

    /// <summary>
    /// 方向向量
    /// </summary>
    private Vector3 _direction;
    /// <summary>
    /// 旋转四元数
    /// </summary>
    private Quaternion _dirRotation;

    /// <summary>
    /// 箭头对象
    /// </summary>
    public Image Arrow;

    // Update is called once per frame
    void Update () {
        //鼠标抬起时触发移动
	    if (Input.GetMouseButtonUp(0))
	    {
            //射线检测点击到的点
	        Ray hit=Camera.main.ScreenPointToRay(Input.mousePosition);
	        RaycastHit hitpoint;

	        if (Physics.Raycast(hit,out hitpoint))
	        {
                //移动的目标点为鼠标点击到的点
	            _targetpos = hitpoint.point;
                //获取移动的方向并归一化
	            _direction =new Vector3(_targetpos.x- transform.position.x,0, _targetpos.z - transform.position.z).normalized;
	        }
            //得到旋转四元数
	        _dirRotation = Quaternion.LookRotation(_direction);

	    }
        //当目标点为zero和距离目标点距离小于0.1(假如设置==0的话移动到目标点可能会一直抖动)时不移动
	    if (_targetpos!=Vector3.zero&&Vector3.Distance(new Vector3(_targetpos.x,0, _targetpos.z),new Vector3(transform.position.x,0,transform.position.z))>0.1)
	    {
            //插值旋转
            transform.rotation=Quaternion.Lerp(transform.rotation, _dirRotation, 10f * Time.deltaTime);
            //玩家控制器移动(我把速度设置为10大家可以把10公开出来自己调整)
	        _player.Move(_direction * 10 * Time.deltaTime);
            //由于箭头要指向玩家面朝方向所以y值取复数
	        Arrow.transform.rotation = new Quaternion(transform.rotation.x, transform.rotation.z,-transform.rotation.y, transform.rotation.w);
            //根据比例获取当前箭头所处位置(cube的x轴坐标/plane长度=arrow的x轴坐标/地图的x轴长度,y轴同理)计算得知当前箭头的坐标
            Arrow.transform.localPosition = new Vector3(transform.position.x/ _xlength*Arrow.GetComponent<RectTransform>().rect.x,0, transform.position.z / _zlength * Arrow.GetComponent<RectTransform>().rect.y);
        }
	}
}

当前项目github地址为https://github.com/oneSitDown/LittleMap大家看完觉得满意就给我一颗星吧

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity3D是一款强大的游戏开发引擎,可以用于制作各种类型的游戏,包括小地图。小地图可以帮助玩家在游戏中快速定位自己的位置,了解周围的环境和目标位置。下面是制作Unity3D小地图的步骤: 1.首先,需要创建一个小地图的背景图。可以使用2D图片或者3D模型作为地图的背景。根据游戏的需求选择合适的背景。 2.接下来,创建一个摄像机对象,并将其设置为渲染到一个RenderTexture上。RenderTexture是一个可以用于将某个摄像机渲染的图像输出到纹理的类。在这个RenderTexture上设置小地图的尺寸和位置。 3.将创建的摄像机对象添加到主摄像机上。这样可以实现将主摄像机的渲染图像投影到小地图的背景图上。 4.创建小地图上的角色或者目标的图标。可以使用2D图片或者3D模型作为图标,根据游戏需求选择合适的样式。 5.根据角色或者目标的位置,将图标放置在小地图的对应位置上。可以通过坐标转换等方式将世界坐标转换为小地图上的坐标。 6.在游戏进行中,更新小地图上的角色或者目标的位置。可以通过实时获取角色或者目标的位置信息,然后将图标移动到对应的位置。 7.可以在小地图上添加一些标记物,比如重要地点、敌人位置等。这样可以帮助玩家更好地了解游戏世界的结构和情况。 通过以上步骤,就可以制作出一个基本的Unity3D小地图。当然,在实际制作中还可以根据游戏的需求进行一些定制和优化,比如添加一些特效、增加互动功能等,以提升游戏体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值