আমি এটি একটি মন্তব্য হিসাবে লিখতে যাচ্ছিলাম, তবে এটি শেষ হয়ে গেছে বরং দীর্ঘায়িত তাই আমি এটিকে একটি উত্তরে পরিণত করেছি।
বর্তমান উত্তরগুলি বেশিরভাগই সঠিক, তবে উল্লিখিত কয়েকটি বিষয় বিভ্রান্তিকর / ভুল।
সাধারণভাবে, বেশিরভাগ গেম-প্লে সম্পর্কিত কাজগুলি হবে Update
।
উদাহরণস্বরূপ, আপনি ইনপুটটির জন্য ভোটগ্রহণ করতে চান না FixedUpdate
(পারফরম্যান্সের কারণে নয়, তবে কলগুলি কেবল সঠিকভাবে কাজ করবে না বলে)। এআই একই নৌকায় পড়ে।
ক্রমাগত আপডেট হওয়া পদার্থবিজ্ঞান হ'ল একমাত্র গেমপ্লে সম্পর্কিত টাস্ক যা এর FixedUpdate
জন্য ব্যবহার করা উচিত। অবিচ্ছিন্ন / একবার-একবার-এ- যেমন-তে Physics.Raycast
বা এমনকি Rigidbody.AddForce
অন্তর্ভুক্ত জিনিসগুলিতে কল Update
। আমার উল্লেখটি Rigidbody.AddForce
ডকুমেন্টেশন দ্বারা বোঝানো যা হতে পারে তার বিপরীতে আপাতদৃষ্টিতে বিপরীত, তবে মূলটি হল ধারাবাহিক বনাম অ-অবিচ্ছিন্ন।
শুধুমাত্র অবিচ্ছিন্ন পদার্থবিজ্ঞানের সাথে যুক্ত থাকার একটি বিশাল কারণ FixedUpdate
হ'ল প্রকৃত প্রকৃতি FixedUpdate
। অন্যান্য উত্তরে উল্লেখ করা হয়েছে যে কীভাবে স্থির interval, but that's slightly misleading. In reality, a script is passed a time in Time.deltaTime
/ Time.fixedDeltaTime
* এ ফিক্সডআপডেটকে ডাকা হয় যা কলগুলির মধ্যে প্রকৃত সময়ের সাথে সরাসরি মিল নয়, বরং কলগুলির মধ্যে সিমুলেটেড সময়।
(* Time.deltaTime
এবং Time.fixedDeltaTime
একই মান হিসাবে FixedUpdate
কল করা হলে [ইউনিটি বলতে পারে যে বর্তমান কলটি কখন উত্সাহিত Time.deltaTime
হয়েছিল FixedUpdate
এবং ফিরে আসে কি তা বলতে সক্ষম হয় Time.fixedDeltaTime
))
স্বাভাবিকভাবে একই Update
রকমভাবে বিভিন্ন পারফরম্যান্সের কারণে ধ্রুবক পদ্ধতিতে কল করা যায় না, পারে না FixedUpdate
। মূল পার্থক্যটি হ'ল, প্রতিটি ফ্রেম, যদি FixedUpdate
কলগুলির মধ্যে সঠিক ব্যবধানের জন্য প্রায়শই পর্যাপ্ত পরিমাণে ফোন করা না হয় তবে এটি একাধিকবার বলা হয় (বা বলা হয় না গড় খুব বেশি)। এক্সিকিউশন অর্ডারে থাকা ডক্সগুলি এটিকেই উল্লেখ করে যে ফিক্সডআপকে একটি ফ্রেমে একাধিকবার বলা যেতে পারে:
... ফিক্সডআপডেট: ফিক্সডআপডেটকে প্রায়শই আপডেটের চেয়ে বেশি বলা হয়। এটি ফ্রেম প্রতি একাধিকবার বলা যেতে পারে, যদি ফ্রেমের হার কম থাকে এবং ফ্রেমের হার বেশি হলে ফ্রেমের মধ্যে একেবারেই নাও বলা যেতে পারে ...
এক্সিকিউশন অর্ডার এবং ইঞ্জিনের বাকী প্রকৃতির কারণে এটি পদার্থবিজ্ঞানের উপর প্রভাব ফেলবে না, তবে আপনি যে কোনও কিছু রেখেছিলেন FixedUpdate
তা প্রভাবিত হবে এবং এটি সমস্যা সৃষ্টি করবে।
উদাহরণস্বরূপ, আপনি যদি এআই প্রসেসিংয়ের ভিতরে রাখেন তবে FixedUpdate
ধরে নেওয়ার কোনও কারণ নেই যে এআই এক একাধিক ফ্রেমের আপডেটগুলি এড়িয়ে যাবে না। অতিরিক্তভাবে, প্রতিবার `ফিক্সডআপ্টেট পিছনে পড়ে আপনার পদার্থবিজ্ঞান এবং প্লেয়ার ইনপুট / মুভমেন্টের মতো জিনিসগুলি প্রক্রিয়াজাতকরণের আগে আপনার এআই একক ফ্রেমে একাধিকবার আপডেট করবে যা খুব কমপক্ষে প্রক্রিয়াজাতীয় অপচয় নয়, তবে খুব জটিল হওয়ার সম্ভাবনাও রয়েছে ত্রুটি এবং ভুল আচরণ ট্র্যাক করতে।
আপনি একটি নির্দিষ্ট ব্যবধান ব্যবহার অন্যান্য পদ্ধতি ইউনিটি যেমন উপলব্ধ এ কিছু করার প্রয়োজন হলে Coroutines
এবং InvokeRepeating
।
Time.deltaTime
এবং কখন এটি ব্যবহার করবেন সে সম্পর্কে একটি ছোট নোট :
টাইম.ডেলটাটাইমের প্রভাব বর্ণনা করার সবচেয়ে সহজ উপায় হ'ল এটি হ'ল একটি ফ্রেম প্রতি ইউনিট থেকে প্রতি সেকেন্ডে ইউনিট পরিবর্তন করে । উদাহরণস্বরূপ, transform.Translate(Vector3.up * 5)
আপডেটের মতো কিছু সহ আপনার যদি কোনও স্ক্রিপ্ট থাকে তবে আপনি মূলত ফ্রেম প্রতি 5 মিটার হারে ট্রান্সফর্মটি সরিয়ে নিচ্ছেন । এর অর্থ যদি ফ্রেমরেট কম হয় তবে চলাচল ধীর হয় এবং ফ্রেমরেট যদি উচ্চ হয় তবে চলাচল আরও দ্রুত হয়।
আপনি যদি একই কোডটি নেন এবং এটিকে পরিবর্তন করেন transform.Translate(Vector3.up * 5 * Time.deltaTime)
তবে অবজেক্টটি সেকেন্ডে 5 মিটার হারে সরানো হচ্ছে । এর অর্থ ফ্রেমরেট কোনও ব্যাপার নয়, বস্তুটি প্রতি সেকেন্ডে 5 মিটার সরে যাবে (তবে ফ্রেমরেটটি ধীরে ধীরে, অবজেক্টের গতিবেগটি লাফিয়ে উঠবে কারণ এটি প্রতি X সেকেন্ডে একই পরিমাণে সরায়)
সাধারণভাবে, আপনি চান আপনার চলাচল প্রতি সেকেন্ডে হোক। কম্পিউটার যে গতিতে চলেছে সেভাবেই আপনার পাতাগুলি / চলাচল একই রকম আচরণ করবে এবং ধীর ডিভাইসগুলিতে আপনার অদ্ভুত বাগ পপ হবে না।
এবং এটি ব্যবহার করে কোন লাভ নেই FixedUpdate
। আমি উপরে উল্লিখিত কি কারণে, আপনি প্রতিটি কল (স্থির আপডেট টাইমসেটপ মান) একই মান পাবেন এবং এটি আপনার মানগুলিতে কিছুই করবে না। সংজ্ঞায়িত আন্দোলন / পদার্থবিজ্ঞান FixedUpdate
ইতিমধ্যে প্রতি সেকেন্ডে ইউনিট হতে চলেছে যাতে আপনার এটির প্রয়োজন হয় না।