unity小地图的开发2(纯UGUI不使用Camera)

小地图是3D游戏中非常重要的
之前我写过一篇关于小地图的开发的 用到了Camera
camera小地图开发地址

然后这篇博客我们纯使用UGUI来实现小地图
我这里用个第一人称的控制器来做主角 (控制器是我之前写的)
之前我写的第一人称控制器地址
大家可以用作参考

准备过程

我们随便找一个地图 然后添加第一人称控制器在地形上
如果条件允许我们根据自己的地图可以自己画一个地图(我的条件不太行 哈哈)
我就用一张随便找的图来代替了

然后根据下边的UGUI遮罩的博客我们搭建简单的UI
在这里插入图片描述
其中playerlogo是主角

思路

我们的思路是在場景中主角的旋转和小地图中主角标志的旋转同步(这个效果是之前的博客没有实现的)
这里我们会用到UGUI的遮罩的知识 同样我写过(哈哈)其实下边的博客是我专门为这篇做的铺垫
unity的UGUI遮罩的地址
给大家做参考

对于地形的思路 我想的是主角不动 我们让背景也就是地图动 这样的效果肉眼看起来是一样的
不知道我说的是不是很清楚

实现过程

我们划分为几个块
第一个主角的同步旋转

 private RectTransform ArrowRect;//玩家logo
    public Transform playerTransform;//场景中的玩家(第一人称摄像机)
    void Awake()
    {
        ArrowRect = transform.GetComponent<RectTransform>();
    }
    void Update()
    {
        ArrowRect.rotation=(Quaternion.Euler(new Vector3(0, 0, -playerTransform.eulerAngles.y)));
    }

这个不是很难理解(默认为大家有点基础)

第二个场景中玩家的移动同步到小地图上
这里我们要在第一人称控制器上做手脚了

 private CharacterController Chc;//角色控制器
    public  Vector3 Dir;//方向
    private int speed;//速度
    private Vector3 primitiveRot;


    public Transform Maps;//小地图的背景(地图本图)
    private void Start()
    {
        Cursor.visible = false;//鼠标图标消失
        Cursor.lockState = CursorLockMode.Locked;//鼠标位于屏幕中心
        Chc = GetComponent<CharacterController>();
        primitiveRot = transform.eulerAngles;
    }
    private void Update()
    {
        Move();
        Rotate();
    }
    public void Move()//移动
    {
        if (Chc.isGrounded)//检测是否触底
        {
            Dir = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
            //获取键盘输入wasd键或方向键  
            Dir = transform.TransformDirection(Dir);
            if (Input.GetKey(KeyCode.LeftShift))//按下左shift键  移速加快相当于跑
            {
                speed = 14;
            }
            else
            {
                speed = 7;
            }
            Dir = Dir * speed;
            if (Input.GetKeyDown(KeyCode.Space))//跳
            {
                Dir.y = 7;
            }
            if (Input.GetKey(KeyCode.LeftShift) && Input.GetKeyDown(KeyCode.Space))//蹲跳
            {
                Dir.y = 10;
            }
        }
        Dir.y -= 20 * Time.deltaTime;
        Chc.Move(Dir * Time.deltaTime);
        Maps.Translate(-new Vector3(Dir.x,Dir.z, 0) * Time.deltaTime * 10);//小地图的同步
}
    public void Rotate()//旋转
    {
        float x = Input.GetAxis("Mouse X");
        float y = Input.GetAxis("Mouse Y");
        primitiveRot.x -= y;
        primitiveRot.y += x;
        transform.eulerAngles = primitiveRot;
    }

上边的代码如果有不懂的地方 建议大家去看我上边挂的链接(感觉自己已经很贴心了 一站式服务 哈哈哈)
大家在unity给第一人称代码赋值 只有地图 这个一定要赋值正确
在这里插入图片描述

这样小地图的旋转和移动就实现了
存在一个问题就是无论场景中主角是否移动 小地图上的都会动不过方向没错 这是因为我的方向是通过按键检测的
场景中的主角可能被一些碰撞体挡住

在这里插入图片描述

如果你也是unity开发爱好者 欢迎关注我的博客
我会在这里持续更新我的学习过程

如果有问题或者是代做可以联系我qq 1149293885(知无不答)
最后祝大家头发浓密 睡眠良好 财富自由
我是一名爱健身的准程序员

猜你喜欢

转载自blog.csdn.net/weixin_44302602/article/details/107734760