• 1400/02/13

متوجه نشدن کد در جلسه 76 :

سلام دوباره استاد ببخشید من این خط کد رو توی جلسه 76 متوجه نشدم و هرچقدر هم که جلسه رو از اول نگاه میکنم باز نمیفهمم 

        _IsGrounded = (_PlayerCharacterController.Move(_MoveDirection * Time.deltaTime) & CollisionFlags.Below) != 0;

من Collision.Flags.Bellow !=0 رو فهمیدم ولی مشکلم دستور قبلیشه ابن دستوری که شما نوشتید if یک خطی هست؟ 

  • 1400/02/13
  • ساعت 02:17

سلام

خب بزارید کامل توضیح بدم

ببینید CharacterController.Move یک متد هست که یه کالیژن فلگ بر میگردونه بر اساس اون جهتی که ما بهش دادیم

حالا نکته ای که هست نه تنها کالیژن فلگ رو بر میگردونه بلکه به سمت اون جهتی هم که دادیم حرکت میکنه

 

ینی چی؟ ینی اینکه هم به ما کالیژن فلگ رو میگه(دقت کنید کالیژن فلگی که میده بر اساس اون جهت هست) و هم حرکت میکنه

 

خب تا اینجا که ما حرکت کردیم و شرطمون رو هم بررسی کردیم و تمام

 

حالا سوال اینه که چرا ما این خط کد رو اینجوری نوشتیم؟

   _IsGrounded = (_PlayerCharacterController.Move(_MoveDirection * Time.deltaTime) & CollisionFlags.Below) != 0 ; 

چرا اینطوری ننوشتیم؟

_IsGrounded = (_PlayerCharacterController.Move(_MoveDirection * Time.deltaTime) == CollisionFlags.Below ; 

درواقع همین برای شما سوال شده دیگه؟ درسته؟

 

ما توی کد دومی میگیم اگه کالیژن فلگی که داره متد Move بهمون میده مساوی بود با Below(ینی زمین برای ما) یعنی ما داریم با زمین برخورد میکنیم و خب IsGrounded مقدارش عوض میشه و تمام...

 

و ما چرا ما کد اولی رو بجای دومی نوشتیم؟

دلیلش اینه که کد دومی یعنی اگه فقط و فقط کاراکترمون داشت زمین رو لمس میکرد مثبت برگردون در صورتی که ما این رو نمیخوایم ، چرا؟ چونکه ممکنه همزمان هم با دیوار(Side) برخورد کنه هم با زمین(Below) و هم با سقف(Above) برای همین باید جوری کد رو بنویسیم که یعنی اگه زمین رو لمس کرد مثبت بر گردون حالا اگه سقف و دیوار و بقیه چیزارم لمس میکرد مشکلی نداره...

 

اینجوری میشه که ما کد اولی و مینویسیم جایگزین دومی...


امیدوارم متوجه شده باشید


  • 1400/02/13
  • ساعت 12:05

سلام استاد خیلی ممنون از راهنماییتون الان

فهمیدم که چرا کد دومی رو جایگزین نکردیم فکر کنم منظور این خط کد این باشه؟؟

isGrounded رو true کن و به جلو حرکت کن اگه CollisionFlag.Below با 0 برابر نبود (زمین رو لمس کرد)

 


  • 1400/02/13
  • ساعت 13:01

یکم کاملتر
isGrounded رو true کن و به جلو حرکت کن اگه CollisionFlag.Below و CharacterController.Move  مخالف صفر بود

 

چون خود تابع Move هم یک کالیژن فلگ بر میگردونه که اگه صفر نباشه ینی به زمین برخورد کرده


  • 1400/02/13
  • ساعت 13:27

اها خیلی ممنون متوجه شدم 🙏🙏🙏🙏


logo-samandehi