অ্যান্ড্রয়েডে ইউনিটি গেমটি পোর্ট করার সময় সমস্যার সমাধান করুন


9

সুতরাং, আমি ইউনিটি 3 ডি-তে প্রথমবার অ্যান্ড্রয়েডে একটি গেম পোর্ট করছি। এবং আমি পথে কয়েকটা সমস্যায় পড়েছি। আমার বর্তমান সমস্যাটি সমাধানটি সঠিক বলে মনে হচ্ছে না, এটি স্ক্রিনের প্রান্তগুলি কেটে দেয় এবং স্ক্রিন বামে / ডানদিকে স্ক্রোল করার জন্য আমার স্ক্রোলিং স্টপগুলি আর সঠিক জায়গায় নেই।

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

সম্পাদনা: আমার এখনও যা প্রয়োজন তা আমার কাছে এখনও নেই, রেজোলিউশনগুলি এখনও নীচে তালিকাভুক্ত কোড এবং কৌশলগুলি সহ সঠিকভাবে কাজ করছে না। ডিভাইসের উপর ভিত্তি করে রেজুলেশনটি সামঞ্জস্য করতে আমার কিছু উপায় দরকার need কোনও কারণে যখন আমি মুংগোইডের কোড ব্যবহার করে কোনও ডিভাইসটির রেজোলিউশন পুনরুদ্ধার করার চেষ্টা করি তখন এটি 0x0 ফিরে আসে


1
আপনাকে এমন কোনও কোডের মধ্য দিয়ে যেতে হবে যা একটি নির্দিষ্ট স্ক্রিন রেজোলিউশন ধরে এবং এটিকে পরিবর্তন করতে পারে যাতে এটি বর্তমান স্ক্রিন রেজোলিউশন নিতে পারে এবং এটি দিয়ে কিছু করতে পারে। আপনি কী করছেন এবং কীভাবে তার উপর নির্ভর করে কোনও আকারের-ফিট-সব সমাধান নেই।
টেট্রাড

এ পর্যন্ত সুনির্দিষ্ট যেমন, এই প্রশ্নের কিছু বিস্তারিত মধ্যে যায় হিসাবে (সেখানে সাইটে এই সম্পর্কে প্রশ্ন অনেক আছে) gamedev.stackexchange.com/questions/51/...
Tetrad

আহ্, তাই মূলত যা বলেছিলেন নামার: "আপনি অবশ্যই অনুপাতের সাথে সবকিছু স্থাপন করেছেন তা নিশ্চিত করুন example উদাহরণস্বরূপ একটি স্বাস্থ্য বার স্ক্রিনের প্রস্থের ৮০% স্ক্রিনের প্রস্থের অনুভূমিক স্কেলের জন্য স্থাপন করা হবে" তবে আমি কীভাবে রেফারেন্সিং ঠিক করতে পারব? মহাকাশে নির্দিষ্ট অঞ্চল? আমার স্ক্রিন স্ক্রোলিং বিশ্ব স্থানের নির্দিষ্ট ক্ষেত্রগুলির উপর ভিত্তি করে চলেছে, তবে রেজোলিউশনের পরিবর্তনের সাথে এটি মিশে গেছে বলে মনে হচ্ছে।
টিমোথি উইলিয়ামস 22 '

আপনি কি আপনার সমস্যা সম্পর্কে আরও নির্দিষ্ট হতে পারেন? আপনি বলেছেন রেজোলিউশনটি "ঠিক আছে বলে মনে হচ্ছে না" এবং এটি "এখনও বন্ধ" - তবে স্ক্রিন রেজোলিউশনটি সাধারণত ডিভাইসের একটি স্থির সম্পত্তি is সুতরাং এটি যে রেজোলিউশনটি ভুল তা নয়, আপনি যেভাবে পর্দায় রেন্ডার করছেন। আপনি যদি স্ক্রিনটি কত প্রশস্ত এবং উচ্চতর সম্পর্কে অনুমান করেন তবে আপনার সর্বদা বিভিন্ন ডিভাইস এবং দিক অনুপাতের ক্ষেত্রে সমস্যা হবে।
কাইলোটন

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

উত্তর:


7

অ্যান্ড্রয়েডের সাথে আপনি যে সমস্যাটি চালাবেন তা হ'ল প্রতিটি ভিন্ন ডিভাইসের নিজস্ব স্ক্রিন আকার, রেজোলিউশন এবং পিক্সেল ঘনত্ব থাকে। আপনি যদি নিজের গেমটি সমস্ত ডিভাইসে অভিন্ন দেখতে চান তবে আপনি প্রচুর পরিশ্রমের জন্য রয়েছেন এবং ফলাফলগুলি নিয়ে কখনও সন্তুষ্ট হতে পারবেন না। হয় গেমটি প্রশস্ত স্ক্রিন প্রদর্শনগুলিতে প্রসারিত হবে বা অ-প্রশস্ত স্ক্রিনগুলিতে সংকুচিত হবে। আমি আপনাকে পরামর্শ দিচ্ছি সত্যিকারের গুরুত্বপূর্ণ কী তা ঠিক করুন এবং অন্য কোনও কিছুকে কিছুটা স্লাইড করুন।

আপনার গেমটি কী এবং এটি কেমন দেখাচ্ছে সম্পর্কে কোনও স্ক্রিনশট বা জ্ঞান ছাড়াই আমরা সকলেই সমাধানের অনুমান করতে পারি তবে আপনাকে নির্দিষ্ট পরামর্শ দেওয়ার জন্য আমাদের কাছে নির্দিষ্ট দিকনির্দেশ নেই।

ইউনিটিতে, আপনি বর্তমান স্ক্রিনের মাত্রাগুলি অ্যাক্সেসের সাথে অ্যাক্সেস করতে পারেন স্ক্রিন শ্রেণি: Screen.widthএবং Screen.height(অন্যান্য বৈশিষ্ট্যগুলির মধ্যে) । এরপরে আপনি পর্দার মাত্রা এবং কী দৃশ্যমান হওয়া উচিত তার ব্যক্তিগত প্রত্যাশার উপর ভিত্তি করে আপনার বিভিন্ন আকারের স্ক্রিনগুলিতে যা দৃশ্যমান তা পরিবর্তন করতে আপনি ক্যামেরার দিক অনুপাত পরিবর্তন করতে পারেন।

যদি আপনার কোনও HUD প্রদর্শনগুলি সঠিকভাবে মাপা যায় তা নিশ্চিত করার দরকার হয় তবে আপনি এটি পরিবর্তন করে এটি করতে পারেন প্রতিটি OnGUI()ফাংশনে স্ক্রিনের মাত্রার উপর ভিত্তি করে GUI রূপান্তর ম্যাট্রিক্স । আমি আগে এই সাধারণ স্ক্রিপ্টটি তৈরি করে এবং এমন কোনও কিছুর সাথে সংযুক্ত করে যা আমি স্কেল করতে চেয়েছি এমন জিইআইআই উপাদানগুলি সরবরাহ করে:

//GUI values in code are assigned based on an 800x600 screen
private var nativeWidth : float = 800.0f;  
private var nativeHeight : float = 600.0f;
private var guiMatrix : Matrix4x4;

function Start () 
{
    var scale : Vector3 = Vector3(Screen.width / nativeWidth, 
                                  Screen.height / nativeHeight,
                                  1.0f);
    guiMatrix = Matrix4x4.TRS(Vector3.zero, Quaternion.identity, scale);
}

function GetGUIMatrix() : Matrix4x4
{
    return guiMatrix;
}

তারপরে, আসল OnGUI()ফাংশন (গুলি) এ, আমি এখনই ট্রান্সফর্ম ম্যাট্রিক্স সেট করেছি:

function OnGUI()
{
    GUI.matrix = guiScale.GetGUIMatrix();
    /* Everything Else */
}

স্ক্রিনের প্রস্থ এবং উচ্চতার উপর ভিত্তি করে ক্যামেরার দিক অনুপাত সেট করা সাহায্য করবে না, ফোনটি যখন উল্লম্ব হয় তখন তা কখনই প্রদর্শিত হয় না এবং ফোনটি যখন অনুভূমিক হয় তখন ঠিক আগের মতোই প্রদর্শিত হয়। গেমটি তিনটি ভাগে বিভক্ত হয়ে গেছে, আপনি আঙুলের সাহায্যে অধ্যায়গুলির মধ্যে স্মুথলি স্ক্রোল করুন (অ্যাংরি পাখির মতো), এখানে বাম দিকটি দেখতে কেমন হবে তার একটি চিত্র এখানে । এবং মাঝখানে । এখানে বাম পাশে যখন আমার ফোন অনুষ্ঠিত হয় উল্লম্বভাবে ,
টিমোথি উইলিয়ামস

এবং এখানে অনুভূমিকভাবে । আশা করি এই ছবিগুলি সাহায্য করতে পারে, এটি আমার প্রথমবারের মতো ইউনিটি থেকে অ্যান্ড্রয়েডে পোর্টিং, এমনকি একটি অ্যান্ড্রয়েড গেম তৈরি করাও। আমি কিছুটা হারিয়েছি
টিমোথি উইলিয়ামস

আপনার ব্যাখ্যা এবং আপনার ছবি দ্বারা (আমার ব্যাখ্যা) বিচার করে, সমস্যার সমাধান নয়; আপনার ক্যামেরা এমন কোনও স্থানে নেই যা সম্ভবত আপনি ছোট পর্দায় যা চান তা সব দেখাতে পারে। আপনার স্তরগুলি আরও ছোট করুন বা আরও বা কিছু দেখানোর জন্য আপনার ক্যামেরাটিকে আবার সরিয়ে দিন। আমি আপনার গেম উইন্ডোটিকে আরও ছোট আকারে সেট করার পরামর্শ দিচ্ছি আপনার কাছে থাকা 1230x530ish আকারের পরিবর্তে আকারটি একটি আসল ডিভাইসটিকে উপস্থাপন করুন যাতে আপনি যখন এটির উপরে চাপ দেবেন তখন আপনি যা দেখতে পাবেন তার অনুভূতি পেতে পারেন।
বিশৃঙ্খলাবিদ 10'12

সমস্যাটি হ'ল আমি ইতিমধ্যে যথেষ্ট পরিমাণে ক্যামেরা জুম করে ফেলেছি। যদি এই সমস্যাটি স্থির থাকে, তবে আমি কীভাবে সঠিকভাবে বিভিন্ন স্ক্রিন এবং মাপের জন্য অ্যাকাউন্ট করতে পারি এবং এতে কীভাবে পরিবর্তন করতে পারি?
টিমোথি উইলিয়ামস

টিমোথিওয়িলিয়ামস, আপনার গেমের সাথে কাজ করে এমন একটি সংক্ষিপ্ত রেজোলিউশন (800x600 বা কিছু) বাছাই করে আপনি সম্ভবত কিছু কাজ করতে পারেন। তারপর, ব্যবহার Screen.widthএবং .heightটমটম Camera.fieldOfViewএবং Camera.aspectনির্বিচারে পর্দা মাপ একই দৃশ্য প্রজনন করার। এটি কীভাবে করা যায় তা নির্দিষ্টভাবে কাজ করার জন্য কিছু ট্রিগের প্রয়োজন হবে।
বিশৃঙ্খলাবিদ

0

আপনি নীচের মতো কিছু চেষ্টা করে প্রয়োগ করতে পারেন। আমি অনুমান করব যে কোনও মোবাইল ডিভাইসে কেবল একটি রেজোলিউশন ফিরিয়ে দেওয়া উচিত।

function Start()
{
    var resolutions : Resolution[] = Screen.resolutions;
    // Print the resolutions
    for (var res in resolutions) {
        print(res.width + "x" + res.height);
    }
    // Switch to the lowest supported fullscreen resolution
    Screen.SetResolution (resolutions[0].width, resolutions[0].height, true);
};

Unityক্যের স্ক্রিন সম্পর্কে আরও তথ্যের জন্য এখানেও একবার দেখুন: http://une3d.com/support/docamentation/ScriptReferences/Screen.html


এটি আমাকে সাহায্য করেনি, রেজোলিউশনটি এখনও বন্ধ।
টিমোথি উইলিয়ামস

এটি কোনও কারণে আমার অ্যান্ড্রয়েডে "0x0" ফেরায় ...
টিমোথি উইলিয়ামস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.