unity 打包安卓UI自适应

前言

  • 一直以来在我感觉UI自适应就是一个老大难的问题,从入这行的时候老师给我们讲UI自适应就觉得懵懵懂懂,也许是潜意识在作祟,一直感觉UI自适应挺难的,工作之后打包apk的时候也找过UI自适应的方法,感觉靠谱的方法就是根据不同的手机比例制作不错比例的UI,但是一般公司没人去整这个。

  • 还有就是度娘上边零零总总的文章,都是在说设置锚点和中心点,之前我也用这种方法,在手机屏幕比例和设计时候的UI比例相近的时候没什么问题,但是如果手机屏幕的比例和设计时候的比例相差比较大的时候,就会出现问题了,首当其冲的就是UI拉伸问题,要是纯色的UI还行,拉伸看不出来,但是如果有图案的话就会一眼看出来了。第二个问题就是控件的问题,有可能会叠加在一起,有可能会消失在屏幕上。比如把顶部栏的锚点设置在屏幕中点,如果实体手机的屏幕高小于编辑器里设定的屏幕高的话,顶部栏就会偏移到手机外边,在屏幕上消失。如果我们把顶部栏的锚点设置在顶部,在顶部栏下边设置一个标题,标题的锚点设置在中心的话,那么顶部栏和标题又会重叠。所以对于设置锚点自适应的方法我一直觉得用着不顺手,也许是我没整明白。

  • 今天要说的这个方法是使用空间坐标来自适应UI,这种方法不会出现UI拉伸和重叠的现象,但是如果比例不同,会有留边,也不是完美的办法。暂时先用这个方法吧,以后要是有好的方法,在替换。

  • Canvas设置成Word Space,摄像机设置成正交。

  • 在这里插入图片描述
    在这里插入图片描述

  • 整个类只有一个函数,这个函数主要分三部分,获取当前屏幕的项目,设置相机的正交大小,UI的对齐方式。

详情如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AdaptiveScreen : MonoBehaviour {
   

	private Camera mCamera = null;

	[SerializeField, Tooltip
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity 中,你可以使用 `EventSystem` 来检测触摸事件是否发生在 UI 元素上。通过检测触摸事件的位置,你可以确定是否点击了 UI 元素,并相应地禁止物体的旋转。以下是一个示例代码: ```csharp using UnityEngine; using UnityEngine.EventSystems; public class MobileRotateControl : MonoBehaviour { private Touch touch; private Vector2 touchStartPos; private Vector3 rotationOrigin; private bool isRotating; void Update() { if (Input.touchCount == 1) { touch = Input.GetTouch(0); if (touch.phase == TouchPhase.Began) { // 检查是否点击在 UI 元素上 if (EventSystem.current.IsPointerOverGameObject(touch.fingerId)) { isRotating = false; // 如果点击在 UI 元素上,则不进行旋转 } else { // 记录触摸开始时的位置和物体当前的欧拉角 touchStartPos = touch.position; rotationOrigin = transform.eulerAngles; isRotating = true; } } else if (touch.phase == TouchPhase.Moved) { if (isRotating) { // 计算触摸移动的偏移量 Vector2 touchOffset = touch.position - touchStartPos; // 根据偏移量计算旋转角度 Vector3 rotation = new Vector3(-touchOffset.y, touchOffset.x, 0) * 0.1f; // 应用旋转角度 transform.eulerAngles = rotationOrigin + rotation; } } else if (touch.phase == TouchPhase.Ended) { // 停止旋转 isRotating = false; } } } } ``` 在上述代码中,我们使用 `EventSystem.current.IsPointerOverGameObject()` 方法来检测触摸事件是否发生在 UI 元素上。如果点击在 UI 元素上,则将 `isRotating` 设置为 `false`,从而禁止物体的旋转。否则,执行旋转操作。请确保你使用的 UI 元素添加了合适的 `EventSystem` 组件。 将以上代码添加到一个空物体上,并将需要旋转的物体作为该空物体的子物体。在安卓手机上运行游戏时,如果触摸事件发生在 UI 元素上,则物体不会进行旋转。如果触摸事件发生在非 UI 元素上,则可以进行旋转操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值