Posts

Showing posts from October, 2015

Sleeping

যখন কোন একটি অবজেক্টের Rigidbody একটি নির্দিষ্ট Linear অথবা Rotational ভ্যালু থেকে কম ভ্যালু নিয়ে মুভ করতে থাকে তখন Unity3D'র বিল্টইন ফিজিক্স ইঞ্জিন ধরে নেয় যে উক্ত অবজেক্টটি'র মুভমেন্ট কিছুক্ষণ পর বন্ধ হয়ে যাবে বা থেমে যাবে। এই অবস্থায় উক্ত অবজেক্ট অন্যান্য অবজেক্টের সাথে Collide না হওয়া পর্যন্ত বা অবজেক্টের উপর কোন Force প্রয়োগ করা না করা পর্যন্ত অবজেক্টটি পুনরায় মুভ করে না এবং উক্ত অবজেক্টটি Sleep মুডে চলে যায়। কোন অবজেক্ট Sleep মুডে থাকাকালীন সময় উক্ত অবজেক্টের জন্য কোন প্রসেসর টাইম খরচ হয় না, যতক্ষণ না পর্যন্ত অবজেক্টটি Awake হয়। Sleep মুডে থাকা কোন অবজেক্ট অন্য অবজেক্টের সাথে Collide হলে বা অবজেক্টের উপর Force প্রয়োগ করা হলেই অবজেক্টটি Awake মুডে চলে আসে।

Rigidbody

দুই বা ততোধিক অবজেক্টের মধ্যে ধাক্কা/সংঘর্ষ হলে অবজেক্টগুলোর ভর ও গ্র্যাভিটি অনুসারে কে কোন দিকে কত গতি নিয়ে কত দূরত্ব সরে যাবে, কে কোন দিকে কত গতি নিয়ে ঘুরতে থাকবে, কার উপর কত ঘর্ষণ জনিত বাঁধা কাজ করবে ইত্যাদি বৈশিষ্ট্য গুলোই হচ্ছে ঐ সকল অবজেক্টের ফিজিক্যাল বিহ্যাভিয়ার বা আচরণ। Rigidbody গেম অবজেক্টের এই ফিজিক্যাল বিহ্যাভিয়ার এনাবল করে। Rigidbody যুক্ত প্রত্যেকটা গেম অবজেক্টের ফিজিক্যাল প্রোপার্টির ভ্যালু কত হবে সেটা Unity3D'র বিল্টইন ফিজিক্স ইঞ্জিন ক্যালকুলেট করে। কোন গেম অবজেক্টে যদি শুধু Rigidbody যুক্ত করা হয় তবে এটি শুধু গ্র্যাভিটির সাথে রেসপন্স করবে। অন্যান্য ফিজিক্যাল বিহ্যাভিয়ার এনাবল করার জন্য অবজেক্টের সাথে Collider কম্পোনেন্ট যুক্ত করতে হবে। Rigidbody যুক্ত গেম অবজেক্টকে Script এর মাধ্যমে এর Transform প্রোপার্টি যেমন Position, Rotation ইত্যাদি পরিবর্তন করা উচিৎ নয়। এর পরিবর্তে Force অ্যাপ্লাই করা উচিৎ এবং বাকী সব কাজগুলো ফিজিক্স ইঞ্জিন করবে। অনেক সময় Rigidbody যুক্ত গেম অবজেক্টকে Script এর মাধ্যমে কন্ট্রোল করা প্রয়োজন হয়, এক্ষেত্রে Rigidbody এর Is Kinematic অপশ

টিপস অ্যান্ড ট্রিক্স

১। GetComponent ব্যবহার করে বারবার একই গেম অবজেক্টের কম্পোনেন্ট অ্যাক্সেস না করে কোন Variable এ স্টোর করে তারপর সেটা ব্যবহার করা। ২। Update/OnGUI জাতীয় ফাংশনের ভেতর Variable ডিক্লেয়ার না করা। ৩। একই গেম অবজেক্ট যদি বারবার ব্যবহার করা হয় তবে তাদের Scale সেইম রাখতে হয়, সেইম রাখা না হলে Dynamic Batching কাজ করে না। যদি কোন Game Scene এ একটি Tree অনেক জায়গায় ববহার করা হয় তবে সব Tree এর Scale সেইম রাখতে হবে। ৪। 

সফটওয়্যার ডিজাইন প্যাটার্ন

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