ইউনিটিতে গেম অবজেক্টটি সরানোর জন্য প্রয়োজনীয় অনুবাদটি গণনা করার জন্য আমার কাছে নিম্নলিখিত কোড রয়েছে, যা ডাকা হয় LateUpdate
। আমি যা বুঝতে পারি তা থেকে, আমার ব্যবহারটি Time.deltaTime
চূড়ান্ত অনুবাদ ফ্রেম রেটকে স্বতন্ত্র করে CollisionDetection.Move()
তুলতে হবে (দয়া করে নোট করুন কেবলমাত্র রেসকাস্টগুলি করা হচ্ছে)।
public IMovementModel Move(IMovementModel model) {
this.model = model;
targetSpeed = (model.HorizontalInput + model.VerticalInput) * model.Speed;
model.CurrentSpeed = accelerateSpeed(model.CurrentSpeed, targetSpeed,
model.Accel);
if (model.IsJumping) {
model.AmountToMove = new Vector3(model.AmountToMove.x,
model.AmountToMove.y);
} else if (CollisionDetection.OnGround) {
model.AmountToMove = new Vector3(model.AmountToMove.x, 0);
}
model.FlipAnim = flipAnimation(targetSpeed);
// If we're ignoring gravity, then just use the vertical input.
// if it's 0, then we'll just float.
gravity = model.IgnoreGravity ? model.VerticalInput : 40f;
model.AmountToMove = new Vector3(model.CurrentSpeed, model.AmountToMove.y - gravity * Time.deltaTime);
model.FinalTransform =
CollisionDetection.Move(model.AmountToMove * Time.deltaTime,
model.BoxCollider.gameObject, model.IgnorePlayerLayer);
// Prevent the entity from moving too fast on the y-axis.
model.FinalTransform = new Vector3(model.FinalTransform.x,
Mathf.Clamp(model.FinalTransform.y, -1.0f, 1.0f),
model.FinalTransform.z);
return model;
}
private float accelerateSpeed(float currSpeed, float target, float accel) {
if (currSpeed == target) {
return currSpeed;
}
// Must currSpeed be increased or decreased to get closer to target
float dir = Mathf.Sign(target - currSpeed);
currSpeed += accel * Time.deltaTime * dir;
// If currSpeed has now passed Target then return Target, otherwise return currSpeed
return (dir == Mathf.Sign(target - currSpeed)) ? currSpeed : target;
}
private void OnMovementCalculated(IMovementModel model) {
transform.Translate(model.FinalTransform);
}
যদি আমি গেমের ফ্রেমরেট 60FPS এ লক করে রাখি তবে আমার বিষয়গুলি প্রত্যাশা অনুযায়ী সরে যায়। তবে, যদি আমি এটি আনলক করি ( Application.targetFrameRate = -1;
), কিছু অবজেক্টগুলি খুব ধীর গতিতে চলে যাবে তখন 144hz মনিটরে 200FPS অর্জন করার সময় আমি আশা করব। এটি কেবল একক সংঘর্ষে ঘটবে বলে মনে হয়, ইউনিটির সম্পাদকের মধ্যে নয়।
সম্পাদকের মধ্যে অবজেক্টের চলাফেরার জিআইএফ, আনলক করা এফপিএস
http://gfycat.com/SmugAnnualFugu
স্ট্যান্ডেলোন বিল্ডের মধ্যে অবজেক্ট মুভমেন্টের জিআইএফ, আনলক করা এফপিএস