পিক্সেল আর্ট গেমস তৈরি করতে ইউনিটি 2 ডি ব্যবহার করা যেতে পারে?


16

আমি ইউনিটির ৪.৩-তে নতুন নতুন 2 ডি বৈশিষ্ট্যগুলি দেখছি এবং আমি মনে করি যে আমি কিছু অনুপস্থিত।

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

পিক্সেল-আর্ট স্প্রিটটি স্ক্রিনে ঠিক 1: 1 পিক্সেল প্রদর্শনের জন্য ডিজাইন করা হয়েছে: স্কেলিং এটিকে ধ্বংস করে দেয় (লিনিয়ার আপ-স্কেলিং একটি ব্যতিক্রম, অর্থাৎ আপনি এটি 2x, 3x, 4x ইত্যাদি স্কেল করতে পারেন)।

তবে আমি "ঠিক যেমন এটি প্রদর্শিত হয়" তেমন কোনও উপায় খুঁজে পাইনি, দৃশ্যত Unক্য এটি যথাযথ যেটি রেজোলিউশন উপযুক্ত তা মাপতে জোর দেয়: আমি ক্যামেরা.সাইজ পরামিতি এবং স্প্রাইটের "পিক্সেল থেকে ইউনিট" প্যারামিটারটি নিয়ন্ত্রণ করতে পারি , কিন্তু আমি এই ফলাফলটি পরিচালনা করতে পারি না।


1
যদি আমি ভুল না হয়, "অরগান ট্রেইল" গেমটি সম্পূর্ণভাবে ইউনিটি 3 ডি তে তৈরি হয়েছিল, 4.3 এর আগে।
24:51

উত্তর:


19

এই নিবন্ধটি 4.3 এর আগে আসার আগেও কিছু দরকারী ব্যাখ্যা দেয়:

আপনি যদি "পিক্সেল আর্ট" চেহারাটির জন্য যাচ্ছেন তবে ক্যামেরার অর্থকোগ্রাফিক আকারটি অত্যন্ত গুরুত্বপূর্ণ; এটি ityক্যে 2 ডি পেরেকের সবচেয়ে জটিল অংশ।

অর্থোগ্রাফিক আকারটি প্রকাশ করে যে কতগুলি বিশ্ব ইউনিট ক্যামেরার অভিক্ষেপের শীর্ষ অর্ধেকটিতে রয়েছে। উদাহরণস্বরূপ, আপনি যদি 5 টির একটি orthographic আকার সেট করেন, তবে ভিউপোর্টের উল্লম্ব অংশগুলিতে বিশ্ব স্থানের 10 ইউনিট থাকবে। (অনুভূমিক প্রসারগুলি প্রদর্শন দিক অনুপাতের উপর নির্ভরশীল))

মনে রাখবেন যে আপনার স্প্রাইট কোয়াডটি একদিকে 1 ইউনিট। এর অর্থ অর্থোগ্রাফিক আকার আপনাকে বলবে যে আপনি কতগুলি স্প্রিটকে ভিউপোর্টে উল্লম্বভাবে স্ট্যাক করতে পারেন (২ দ্বারা বিভক্ত)।

পিক্সেল-আর্টকে পরিষ্কারভাবে রেন্ডার করতে, আপনাকে নিশ্চিত করতে হবে যে স্প্রাইটের উত্স টেক্সচারের প্রতিটি পিক্সেল ভিউপোর্ট ডিসপ্লেতে 1: 1 মানচিত্র করে। আপনি চান না যে উত্স পিক্সেলগুলি এড়িয়ে যাওয়া বা দ্বিগুণ হওয়া, বা আপনার স্প্রাইটগুলি বিকৃত এবং "নোংরা" দেখাবে। এই 1: 1 অনুপাতটি নিশ্চিত করার কৌশলটি একটি orthographic আকার সেট করা যা আপনার উল্লম্ব স্ক্রিনের রেজোলিউশনের সাথে একটি স্প্রাইটের পিক্সেল উচ্চতার দ্বারা বিভক্ত হয়।

ধরা যাক আপনি 960x640 এ চলছে এবং আপনি 64x64 স্প্রাইট ব্যবহার করছেন। উল্লম্ব স্ক্রিন রেজোলিউশন (640) একটি স্প্রাইটের পিক্সেল উচ্চতার দ্বারা ভাগ করে (64) ফলন করে 10, 64x64 স্প্রাইটের সংখ্যা যা উল্লম্বভাবে 640 পিক্সেলগুলিতে স্ট্যাক করা যেতে পারে। মনে রাখবেন অর্থোগ্রাফিক আকারটি একটি অর্ধ-উচ্চতা, সুতরাং এই ক্ষেত্রে আপনার টার্গেট অরোগ্রাফিক আকার 5 (10 এর অর্ধেক) হতে চলেছে। এটিকে ঐটির মত দেখতে হবে:

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

পরিবর্তনশীল রেজোলিউশন

ক্লিন পিক্সেল আর্ট রেন্ডার করার জন্য আপনাকে একক, স্থির রেজোলিউশনে সীমাবদ্ধ রাখার দরকার নেই। পরিবর্তনীয় রেজোলিউশনগুলি হ্যান্ডেল করার সহজতম উপায় হ'ল আপনার ক্যামেরায় একটি কাস্টম স্ক্রিপ্ট সংযুক্ত করা যা বর্তমান উল্লম্ব রেজোলিউশন এবং একটি জ্ঞাত (স্থির) স্প্রাইট আকার অনুযায়ী orthographic আকার নির্ধারণ করে :

// set the camera to the correct orthographic size
// (so scene pixels are 1:1)
s_baseOrthographicSize = Screen.height / 64.0f / 2.0f;
Camera.main.orthographicSize = s_baseOrthographicSize;

যদিও এটি একটি সরল ফিক্স, এতে একটি অসুবিধা রয়েছে: স্ক্রিনের রেজোলিউশন হ্রাস পাওয়ার সাথে সাথে আপনি বিশ্বের কম-বেশি দেখবেন এবং স্প্রিটগুলি স্ক্রিনটি আরও বেশি করে গ্রহণ করবে। এটি উত্স এবং স্ক্রিন পিক্সেলের মধ্যে 1: 1 অনুপাত রাখার পরিণতি: একটি 64x64 স্প্রিট 1920x1200 এর তুলনায় 640x480 এ আরও স্পষ্ট স্থান নেয়। এটি সমস্যা কিনা বা না তা আপনার নির্দিষ্ট গেমের প্রয়োজনের উপর নির্ভর করে।

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

(কিছু জোর যুক্ত)

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


টিএল; ডিআর :cameraSelf.orthographicSize = screenH / (float)spriteSize / 2f;


5
আর একটি দরকারী জিনিস টেক্সচার ফিল্টারিংকে 'পয়েন্ট' এ সেট করা।
24:56

@ ফিলিপ ভাল পয়েন্ট: আমি এটি সম্পর্কে ভুলে গেছি কারণ আমি ইতিমধ্যে এটি আবিষ্কার করেছি।
o0 '
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.