বড় স্ক্রিন ও ফোল্ডেবেলের জন্য Unity গেম অপ্টিমাইজ করা

১. ভূমিকা

এই কোডল্যাবে, আপনি কীভাবে বড় স্ক্রিন ও ফোল্ড করা যায় এমন ডিভাইসের জন্য Unity Android গেম অপ্টিমাইজ করতে হয় তা জানবেন। আপনি Lost Crypt স্যাম্পেল প্রোজেক্ট ব্যবহার করে অ্যাস্পেক্ট রেশিও সাপোর্ট প্রয়োগ করবেন, ফুল স্ক্রিন ব্যবহার করার সুবিধা বাড়াবেন এবং ফোল্ড করা যায় এমন ডিভাইসের ক্ষেত্রে বিভিন্ন স্টেটে প্রতিক্রিয়া জানাবেন।

পূর্বশর্ত

  • Unity ও Android ডেভেলপমেন্ট সম্পর্কে প্রাথমিক জ্ঞান।
  • ট্যাবলেট বা ফোল্ড করা যায় এমন ফোনের মতো বড় স্ক্রিনের Android ডিভাইস।

আপনি কী শিখবেন

  • বিভিন্ন অ্যাস্পেক্ট রেশিওর জন্য কীভাবে সহায়তা প্রয়োগ করতে হয়।
  • স্ক্রিনের সাইজ অনুযায়ী অটোমেটিক অ্যাডজাস্ট করতে, আপনার গেমের UI ও ক্যামেরা সেটিংসে কীভাবে অ্যাঙ্কর ব্যবহার করবেন।
  • ডিভাইসের ফোল্ডিং পজিশন শনাক্ত করতে এবং লেআউট অ্যাডজাস্ট করতে Android-এর Jetpack Window Manager কীভাবে ব্যবহার করতে হয়।

আপনার যা প্রয়োজন

  • Unity Hub ও Editor: Unity 2020 LTS বা Unity 2022 ইনস্টল করা থাকতে হবে, সাথে Android বিল্ড সাপোর্ট থাকতে হবে।
  • হার্ডওয়্যার: ট্যাবলেট বা ফোল্ড করা যায় এমন ফোনের মতো বড় স্ক্রিনের Android ডিভাইস।
  • আপনি স্কিল ব্যবহার করার পরিকল্পনা করলে, Google Antigravity-এর মতো এজেন্টিক ডেভেলপমেন্ট প্ল্যাটফর্ম।

২. এজেন্টের স্কিল

ঐচ্ছিকভাবে, আপনার Unity গেম প্রোজেক্ট মূল্যায়ন করার জন্য একটি এজেন্ট স্কিল উপলভ্য। এই স্কিল আপনাকে রিসাইজ করার সুবিধা এবং বড় স্ক্রিন ও ফোল্ড করা যায় এমন ডিভাইসের জন্য সহায়তা যোগ করতে সাহায্য করে। আরও তথ্যের জন্য, এখানে দেখুন: GitHub

এই স্কিল ব্যবহার করতে:

  1. আপনার এজেন্ট ডিরেক্টরিতে SKILL.md ফাইল কপি করুন। কীভাবে কোনও স্কিল যোগ করতে হয় সেই সম্পর্কে আরও তথ্য পেতে, Google Antigravity-র ব্যবহার শুরু করা দেখুন।
  2. Antigravity-এর মতো আপনার Agentic IDE-তে, বড় স্ক্রিন, ফোল্ড করা যায় বা সাইজ পরিবর্তন করা যায় এমন ডিভাইস সম্পর্কে প্রশ্ন করে আপনার এজেন্টকে প্রম্পট করুন।
  3. বড় স্ক্রিন ও ফোল্ড করা যায় এমন ডিভাইসের জন্য সহায়তা যোগ করতে এজেন্টকে বলুন।

৩. অ্যাস্পেক্ট রেশিও সংক্রান্ত সহায়তা

বিভিন্ন স্ক্রিন সাইজে আপনার গেম সঠিকভাবে দেখা যাচ্ছে কিনা তা নিশ্চিত করতে, বিভিন্ন অ্যাস্পেক্ট রেশিওর জন্য সহায়তা প্রয়োগ করার মাধ্যমে শুরু করুন। বিভিন্ন স্ক্রিনে আরও ভালোভাবে ফিট করার জন্য আপনি ক্যামেরা বা ক্যানভাসের অ্যাস্পেক্ট রেশিও অ্যাডজাস্ট করার কথা বিবেচনা করতে পারেন।

  1. আপনার অ্যাপ্লিকেশন যেন ফুল-স্ক্রিন রিসাইজেবল সেটিং ব্যবহার করে তা নিশ্চিত করুন।
  2. আপনার AndroidManifest.xml-এ (Assets/Plugins/Android/AndroidManifest.xml-এ অবস্থিত):
    1. android:resizeableActivity="true" সেট করুন।
    2. android:screenOrientation="fullSensor" সেট করুন।

যেমন:

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.unity3d.player"
    xmlns:tools="http://schemas.android.com/tools">
    <application>
        <activity android:name="com.unity.lostcryptlargescreenexample.LargeScreenPlayableActivity"
                  android:theme="@style/UnityThemeSelector"
                  android:screenOrientation="fullSensor"
                  android:launchMode="singleTask"
                  android:resizeableActivity="true"
                  android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale|layoutDirection|density"
                  android:hardwareAccelerated="false">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
        </activity>
    </application>
</manifest>
  1. Android প্ল্যাটফর্ম কনফিগারেশনের জন্য Unity-তে আপনার বিল্ড সেটিংস চেক করুন।

মনে রাখবেন: ট্যাবলেট ও ফোল্ড করা যায় এমন ডিভাইসে আপনার গেমকে দুর্দান্ত দেখাতে, বিভিন্ন অ্যাস্পেক্ট রেশিও সাপোর্ট করা হল প্রথম ধাপ।

৪. ফুল-স্ক্রিন ব্যবহার

বিভিন্ন অ্যাস্পেক্ট রেশিওতে মানিয়ে নেওয়ার পরে, গেমপ্লে আরও বেশি ইমারসিভ করে তুলতে আপনার গেম পুরো স্ক্রিন ব্যবহার করছে কিনা তা নিশ্চিত করুন।

সম্পূর্ণ স্ক্রিন ব্যবহার করতে:

  1. আপনার গেমের UI ও ক্যামেরা সেটিংসে অ্যাঙ্কর ব্যবহার করুন। এর ফলে UI এলিমেন্ট স্ক্রিন সাইজের সাথে সামঞ্জস্য রেখে অটোমেটিক নিজেদের পজিশন অ্যাডজাস্ট করতে পারে।
  2. UI ক্যানভাস অ্যাঙ্করিং কীভাবে সেট-আপ করা হয় তা দেখতে, উদাহরণ প্রোজেক্টে অ্যাঙ্করিং সিন খুলুন।
  3. অ্যাঙ্করিং দৃশ্যে, ক্যানভাস আপডেট করে সেফ-ফ্রেম সচেতন করা হয় এবং মুভমেন্ট কন্ট্রোল স্ক্রিনের কোণে অ্যাঙ্কর করা হয়।

আপনার মূল ক্যামেরার অ্যাস্পেক্ট রেশিও বজায় রাখতে, ক্যামেরার pixelRect ডায়নামিক অ্যাডজাস্ট করুন। CameraAspectLock.cs স্ক্রিপ্টটি দেখায় যে কীভাবে ওরিয়েন্টেশন পরিবর্তন হলে তার উত্তর দিতে হয় এবং ক্যামেরা ভিউ লেটারবক্স করতে হয়:

[SerializeField]
private float minAspectRatio = 4f / 3f;

[SerializeField]
private float maxAspectRatio = 21f / 9f;

public void MaintainAspectRatio() {
    int viewWidth = Display.main.systemWidth;
    int viewHeight = Display.main.systemHeight;

    // 1. Calculate screen aspect ratio
    float scaleScreen = viewWidth / (float)viewHeight;
    Rect rect = _camera.pixelRect;

    // 2. Scale to the fullest of the lower between width or height
    if (scaleScreen > maxAspectRatio) {
        // use height, lock width to max at aspect scale
        rect.width = viewHeight * maxAspectRatio;
        rect.height = viewHeight;
    } else if (scaleScreen < minAspectRatio) {
        // use width, lock height to min at aspect scale
        rect.width = viewWidth;
        rect.height = viewWidth / minAspectRatio;
    } else {
        // within allowed aspect ratio range, use full screen
        rect.width = viewWidth;
        rect.height = viewHeight;
    }

    // make sure to center the rect within the window
    rect.x = Mathf.Floor((viewWidth - rect.width) * 0.5f);
    rect.y = Mathf.Floor((viewHeight - rect.height) * 0.5f);

    Debug.Log("camera view width = " + rect.width +
        " height = " + rect.height +
        " x = " + rect.x +
        " y = " + rect.y);

    // 3. Commit the new size to the camera so that it takes effect
    _camera.pixelRect = rect;
}

৫. ফোল্ড করা যায় এমন ডিভাইসে কাজ করে

ফোল্ড করা যায় এমন ডিভাইসের ক্ষেত্রে, ডিভাইসের ফোল্ডিং পজিশন (যেমন, অর্ধেক খোলা, ফ্ল্যাট) ও স্ক্রিনের সাইজ অনুযায়ী আপনাকে গেমের লেআউট অ্যাডজাস্ট করতে হবে।

  1. ডিভাইসের স্ট্যাটাস শনাক্ত করতে Android-এর Jetpack Window Manager ব্যবহার করুন।
  2. নমুনা প্রোজেক্টে, HingeAware দৃশ্য খুলুন।
  3. এই দৃশ্যে একটি ConfigurationManager MonoBehaviour আছে যা Android-এর Jetpack WindowManager ইভেন্টকে Unity-র সাথে কানেক্ট করে এবং UnityEvent কলব্যাকের মাধ্যমে ফোল্ডিং স্টেটের উত্তর দেয়।
  4. com.unity.lostcryptlargescreenexample.HingeAngleSensor Java প্লাগ-ইন ব্যবহার করে HingeSensor.cs হিঞ্জ অ্যাঙ্গেল রিড করে।

ConfigurationManager ব্যবহার করা

ConfigurationManager.cs কাস্টম Android অ্যাক্টিভিটির সাথে যোগাযোগ করে এবং স্টেটকে প্রতিনিধিত্বকারী JSON স্ট্রিং পার্স করে। এটি Android অ্যাক্টিভিটি থেকে onConfigurationChanged ও onFoldChanged কলব্যাকের জন্য শোনে।

[System.Serializable]
public class FoldInfo {
	public string orientation;
	public string state;
	public int isSeparating;
	public int boundsLeft;
	public int boundsTop;
	public int boundsRight;
	public int boundsBottom;
}

public void onFoldChanged(string strFoldInfo) {
	FoldInfo info = JsonUtility.FromJson<FoldInfo>(strFoldInfo);

	// Always call the refresh from the main Unity thread
	StartCoroutine(ExecuteOnMainUnityThread(ActionOnFoldChange, info));
}

এছাড়াও, আপনি getFoldableState প্রপার্টি ব্যবহার করে সিঙ্ক্রোনাস পদ্ধতিতে স্টেট কোয়েরি করতে পারবেন:

public static string getFoldableState {
	get {
		if (Application.platform == RuntimePlatform.Android) {
			var foldingFeatureObject = foldablePlayerActivity.Call<AndroidJavaObject>("getFoldingFeature");
			if (foldingFeatureObject != null) {
				var state = foldingFeatureObject.Call<AndroidJavaObject>("getState");
				return state.Call<string>("toString");
			}
		}
		return "NONE";
	}
}

৬. HingeSensor ব্যবহার করা

কিছু ফোল্ড করা যায় এমন ডিভাইসে ফিজিক্যাল হিঞ্জ সেন্সর থাকে যা ফোল্ডের সঠিক কোণ (০ থেকে ৩৬০ ডিগ্রি) প্রদান করে। আপনি এটি গেমপ্লে মেকানিক্স চালাতে বা ক্যামেরা অ্যাডজাস্ট করতে ব্যবহার করতে পারেন।

HingeSensor.cs-এ, হার্ডওয়্যার সেন্সর রিড করার জন্য একটি Android প্লাগ-ইন ইনিশিয়ালাইজ করা হয়। এছাড়াও, আপনি চেক করে দেখতে পারেন যে হিঞ্জ চালু আছে কিনা:

public class HingeSensor : IDisposable {
	AndroidJavaObject plugin;

	public static HingeSensor Start() {
		if (Application.platform == RuntimePlatform.Android) {
			return OnPlayer.Run(p => {
				var context = p.GetStatic<AndroidJavaObject>("currentActivity");
				var plugin = new AndroidJavaClass("com.unity.lostcryptlargescreenexample.HingeAngleSensor")
						.CallStatic<AndroidJavaObject>("getInstance", context);

				if (plugin != null) {
					plugin.Call("setupSensor");
					return new HingeSensor(plugin);
				}
				return null;
			});
		}
		return null;
	}

	public float GetHingeAngle() {
		return (Application.platform == RuntimePlatform.Android && plugin != null) ? plugin.Call<float>("getHingeAngle") : -1.0f;
	}

	public bool IsHingeEnabled() {
		return Application.platform == RuntimePlatform.Android && plugin != null && plugin.Call<int>("isHingeEnabled") > 0;
	}
}

মনে রাখবেন: ব্যাটারির চার্জ যাতে শেষ না হয়ে যায়, সেই জন্য আপনার অ্যাপ্লিকেশন পজ বা বন্ধ হয়ে গেলে HingeSensor ইনস্ট্যান্সে Dispose() বা StopSensing() কল করতে ভুলবেন না।

৭. AAB ফাইল তৈরি করা

Unity Editor-এ AAB ফাইল তৈরি করতে, এইসব ধাপ অনুসরণ করুন:

  1. Unity এডিটরে, ফাইল > বিল্ড সেটিংস বিকল্পে ক্লিক করুন।
  2. অ্যাপ বান্ডেল তৈরি করুন ( Google Play ) বিকল্প বেছে নিন।আরও তথ্যের জন্য, Android বিল্ড সেটিংস রেফারেন্স দেখুন।
  3. তৈরি করুন বিকল্পে ক্লিক করুন।
  4. Unity Editor থেকে AAB ফাইল ডাউনলোড করুন।

ইন্টার্নাল টেস্টিং রিলিজ তৈরি করা

Play Console-এ ইন্টার্নাল টেস্টিং রিলিজ তৈরি করতে এবং পরীক্ষক যোগ করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:

  1. Google Play Console-এ, একটি গেম বেছে নিন।
  2. টেস্ট ও রিলিজ পৃষ্ঠায় নেভিগেট করুন (টেস্টিং > ইন্টার্নাল টেস্টিং)।
  3. আপলোড করুন বিকল্পে ক্লিক করে AAB ফাইলটি বেছে নিন।
  4. রিলিজের বিবরণ ফিল্ডে, একটি নাম লিখুন।
  5. পরবর্তী বিকল্পে ক্লিক করে রিলিজের বিবরণ পর্যালোচনা করুন।
  6. সেভ ও প্রকাশ করুন বিকল্পে ক্লিক করুন।

৮. প্রোজেক্ট বিল্ড ও রান করা

এখন আপনি প্রজেক্ট তৈরি করতে এবং আপনার ডিভাইসে এটি পরীক্ষা করার জন্য প্রস্তুত।

  1. গেমটি খোলা আছে কিনা তা ভালো করে দেখে নিন।
  2. Play Console-এ, ফাইল > বিল্ড প্রোফাইল (বা বিল্ড সেটিংস) বিকল্পে যান।
  3. আপনি Play Console-এ আপলোড করতে চাইলে, অ্যাপ বান্ডেল (Google Play) তৈরি করুন বিকল্পে টিকচিহ্ন দেওয়া আছে কিনা দেখুন অথবা আপনার কানেক্ট করা ডিভাইসে সরাসরি ডেপ্লয় করতে তৈরি ও রান করুন বিকল্পে ক্লিক করুন।
  4. ফোল্ড করা যায় এমন ডিভাইস যাচাই করুন, ডিভাইসের ফোল্ডিং পজিশন (যেমন, অর্ধেক খোলা, ফ্ল্যাট) এবং স্ক্রিনের সাইজ অনুযায়ী আপনাকে গেমের লেআউট অ্যাডজাস্ট করতে হবে।

৯. অভিনন্দন

আপনি বড় স্ক্রিন ও ফোল্ডেবলের জন্য Unity Android গেম অ্যাডাপ্ট করার নীতি সফলভাবে শিখেছেন!

সমীক্ষা

এই কোডল্যাব সম্পর্কে আপনার মতামত অত্যন্ত মূল্যবান। আমাদের সমীক্ষা সম্পূর্ণ করার জন্য কয়েক মিনিট সময় বের করুন।