会议聊天分屏

主要涉及到的是Camera的ViewportRect属性

一个全屏的相机,rect值为:(0, 0, 1, 1)

 

屏幕坐标规则

左下角为起点(0, 0)

右上角为终点(1, 1)

 

相机与屏幕规则基本相同

X, y 即前两个值为屏幕位置,数值范围均为0-1

width, height 即后两个值为相机宽高,数值范围同样是0-1

 

一个相机的rect数值为(0,0,1,1),即相机原点位于左下角,大小和屏幕相同,也就是全屏

 

需求是多个相机同时存在,左侧一个大的,右侧竖直排列剩余小相机,然后上半部分和右侧部分需要留出空余显示其他UI

 

首先,创建五个相机,为了便于区分,在其下创建canvas,每个相机对应一个canvas

 

 

开始编码:

我想要实现大部分分屏情况,例如:水平排列、竖直排列、固定行数或列数、一大一小、一大多小

其中一大多小,就是这次需要的显示方式

 

先写了一个基类:

using System.Collections.Generic;

using UnityEngine;



public class CameraSortBase

{

    /*

     * 相机参数规则

     * Camera.rect 中有四个参数,x, y, width, height

     * x, y:相机起点,相机左下角那一点的屏幕坐标,屏幕坐标 (左下角)Vector2(0, 0) -> (右上角)Vector2(1, 1)

     * width, height:相机缩放,相对于屏幕大小的缩放,和屏幕相同大小时为(1, 1)

     */



    protected List<Camera> mCameras;

    protected float mScaleX;

    protected float mScaleY;

    protected float mPosX;

    protected float mPosY;



    /// <summary>

    /// 设置所有相机占位总和

    /// </summary>

    public virtual void SetAllScalePos()

    {

        mScaleX = CameraManager.Me.mScaleX;

        mScaleY = CameraManager.Me.mScaleY;

        mPosX = CameraManager.Me.mPosX;

        mPosY = CameraManager.Me.mPosY;

    }



    /// <summary>

    /// 设置相机

    /// </summary>

    public virtual void SetCameras(List<Camera> cameras)

    {

        mCameras = cameras;

    }



    /// <summary>

    /// 修正相机坐标及大小

    /// </summary>

    /// <param name="x">坐标x</param>

    /// <param name="y">坐标y</param>

    /// <param name="width">宽</param>

    /// <param name="height">高</param>

    protected void Correction(ref float x, ref float y, ref float width, ref float height)

    {

        x = x * mScaleX + mPosX;

        y = y * mScaleY + mPosY;

        width = width * mScaleX;

        height = height * mScaleY;

    }

}

 

一共实现了七种排列方式

 

由于需要留空白部分显示其他UI,添加了参数

 

用来控制所有相机占位的总和:

mScaleX 占位宽度

mScaleY 占位高度

mPosX 占位起点X

mPosY 占位起点Y

数值范围均为0-1

 

只需要在设置相机rect值前调用修正方法Correction即可

 

空白部分UI做了简单的适配:

高度固定为1080

宽度计算后获得:

这里是设置上方空白部分和右侧空白部分大小的方法

效果图:

源码不在这里贴了,全放在百度云盘里:

链接:https://pan.baidu.com/s/10rR5dyZXwFGxS5qWPkib9A

提取码:lftx

 

转载请注明出处:

https://blog.csdn.net/qq_28873519/article/details/109852602

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰翼无痕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值