모바일 앱에서 디바이스의 배터리 잔량 표시하기

 

PC나 콘솔 같은 디바이스에서 동작하는 앱이라면 상관없는 문제이지만 모바일 같은 휴대기기에서 동작하는 앱이라면 현재 앱이 동작하고 있는 디바이스의 배터리 잔량에 대해서 알아야 하거나 확인해야 할 수도 있다. 사용자가 일일이 화면 상단을 드래그나 터치해서 상태바(Status bar)를 꺼내지 않고도 배터리 잔량을 할 수 있게 하는 방식으로 말이다.

 

유니티는 모바일을 타깃으로 하는 게임이나 앱들을 굉장히 폭넓게 지원하기 때문에 이와 관련된 기능 역시 제공하고 있다.

 

SystemInfo.batteryLevel;

SystemInfo.batteryStatus;

 

유니티에서 배터리의 상태와 관련된 정보는 SystemInfo 클래스의 정적 프로퍼티를 통해서 가져올 수 있다.

 

첫 번째로 batteryLevel은 현재 디바이스의 배터리 충전량으로 float 변수이며, 0-1사이의 값을 가지며, 이 프로퍼티를 호출한 디바이스가 배터리를 사용하지 않거나 batteryLevel을 지원하지 않는 디바이스라면 -1을 반환한다.

 

두 번째 프로퍼티는 batteryStatus로 현재 배터리의 상태를 가져올 수 있다. 이 프로퍼티는 BatteryStatus 타입의 열거형이며 열거형의 종류와 내용은 다음과 같다.

 

BatteryStatus.Unknown;       // 충전 상태를 알 수 없음. 배터리 상태를 지원하지 않는 플랫폼일 때 반환되는 값.
BatteryStatus.Discharging;   // 충전 케이블이 연결되지 않았고, 충전도 되지 않는 상태.
BatteryStatus.NotCharging;   // 충전 케이블은 연결되어 있지만, 충전은 되지 않는 상태.
BatteryStatus.Charging;      // 충전 케이블이 연결되어 있고, 충전되고 있는 상태.
BatteryStatus.Full;          // 충전 케이블이 연결되어 있고, 배터리가 가득 찬 상태.

 

 

 

 

 

간단한 사용 예시

 

using UnityEngine;
using UnityEngine.UI;

public class BatteryUI : MonoBehaviour
{
    Sprite chargeStateSprite;   // 배터리 충전중 표시 스프라이트
    Sprite fewStateSprite;      // 배터리가 부족하다는 표시 스프라이트

    Image batteryStateImg;      // 배터리 상태 표시 이미지
    Image batteryFrameImg;      // 배터리 모양 프레임 이미지
    Image batteryLevelImg;      // 배터리 잔량 표시 이미지

    public void UpdateBatteryUI()
    {
        float batteryLevel = SystemInfo.batteryLevel;
        switch (SystemInfo.batteryStatus)
        {
            case BatteryStatus.Full:
            case BatteryStatus.Charging:

                batteryLevelImg.color = batteryFrameImg.color = Color.white;
                batteryStateImg.sprite = chargeStateSprite;
                batteryStateImg.gameObject.SetActive(true);
                batteryLevelImg.fillAmount = 1f;
                break;

            case BatteryStatus.Discharging:
                if(batteryLevel < 0.1f) // 배터리가 부족하면 이미지를 빨갛게
                {
                    batteryLevelImg.color = batteryFrameImg.color = Color.red;
                    batteryStateImg.sprite = fewStateSprite;
                    batteryStateImg.gameObject.SetActive(true);
                }
                else
                {
                    batteryLevelImg.color = batteryFrameImg.color = Color.white;
                    batteryStateImg.gameObject.SetActive(false);
                }

                batteryLevelImg.fillAmount = batteryLevel;
                break;
        }
    }
}

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Create 2D & 3D Experiences With Unity's Game Engine | Unity Pro - Unity Store

Unity Pro software is a real-time 3D platform for teams who want to design cross-platform, 2D, 3D, VR, AR & mobile experiences with a full suite of advanced tools.

store.unity.com

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

+ Recent posts