Unity

【UnityAsset】FPSMemoryFriends – UnityでAndroid/iOSのFPSとメモリ使用量を取得する

去年は個人開発を優先していてブログの更新を行えなかったのですが、最近いろいろな方に記事見たよと言われ、嬉しかったのでまたちょいちょい書いていこうかと思います(笑)
まずは最近作ったAssetの紹介から♪(大したものではないですけど^^;)

FPSMemoryFriendsとは

Android/iOSのFPSとメモリ使用量を取得するAssetです。
用途としては開発中アプリのパフォーマンスの目安とする等。詳細に調べるならUnityのProfilerを使った方がいいけど、ProfilerだとUnity使える人じゃないと調べられないので、誰でも視覚的にFPSとメモリ使用量を確認できるようにするためのAsset。

ロジック的にはよくやられてる人がいて、毎回ネイティブプラグインを作ってたんだけど、ここらで整理してAsset化しておこうと思い作りました☆

【Unity】実機上(ゲーム内)でメモリ使用量を表示してみる 〜iOS編〜
標準Profilerだけに頼らないUnityのプロファイリングに挑んでみる

動作環境

Unity2018.4.0 LTS
iOS 7.0+
Android 4.1+
※ただしほとんどネイティブプラグインなのでUnity5系でも動くかと

使用方法

FPSMemoryFriendsコンポーネントを追加し、スクリプトからFPSとメモリ使用量を取得。

Demo.cs

using UnityEngine;
using Friends;

public class Demo
{
    [SerializeField] FPSMemoryFriends fpsMemoryFriends;

    void Update()
    {
        var fps          = fpsMemoryFriends.FPS;
        var usedMemory   = fpsMemoryFriends.UsedMemory;
        var usedMemoryKB = fpsMemoryFriends.UsedMemoryKB;
        var usedMemoryMB = fpsMemoryFriends.UsedMemoryMB;
    }
}

プロパティ説明
AutoUpdateMemoryメモリ使用量を1秒おきに自動更新するか?false の場合は fpsMemoryFriends.UpdateUsedMemory() メソッドで手動更新。
FPSFPS。1秒おきに更新される。
UsedMemoryアプリのメモリ使用量[Byte]
UsedMemoryKBアプリのメモリ使用量[KB]
UsedMemoryMBアプリのメモリ使用量[MB]

ネイティブプラグイン

参考までにネイティブプラグインのコードを載せておきます。

Android

FPSMemoryFriends.java

package jp.okamura0510.fpsmemoryfriendsandroid;

import android.content.Context;
import android.app.ActivityManager;
import android.os.Debug;
import android.os.Process;

import com.unity3d.player.UnityPlayer;

public class FPSMemoryFriends
{
    public static long getUsedMemoryKB() {
        long usedMemoryKB               = 0;
        Context context                 = UnityPlayer.currentActivity.getApplication().getApplicationContext();
        ActivityManager activityManager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
        Debug.MemoryInfo[] memoryInfos  = activityManager.getProcessMemoryInfo(new int[]{ Process.myPid() });
        for(Debug.MemoryInfo mi : memoryInfos) {
            usedMemoryKB += mi.getTotalPss();
        }
        return usedMemoryKB;
    }
}

iOS

FPSMemoryFriends.mm

#import <mach/mach.h>

extern "C"
{
    unsigned int getUsedMemory() {
        struct task_basic_info info;
        mach_msg_type_number_t infoCount = TASK_BASIC_INFO_COUNT;
        kern_return_t status = task_info(current_task(), TASK_BASIC_INFO, (task_info_t)&info, &infoCount);

        if(status == KERN_SUCCESS) {
            return (unsigned int)info.resident_size;
        } else {
            return -1;
        }
    }
}

最後に

今年はゆる〜く更新していきます(。´・ω・`。)

https://github.com/okamura0510/FPSMemoryFriends

【エビでもわかる】オセロプログラミング
〜オセロを作りながらゲームのプログラムを学ぼう〜
「Unityで初めてゲームを作ってみたい!」

そんな人のためにこの本を作りました。
オセロを一から作りながら実践形式でプログラムを学べる本です。
すでに完成したプロジェクトを説明するのではなく、実際に作りながら説明していきます。
一緒に手を動かしながら、プログラムを覚えていきましょう🌟