Аюулгүй байдлын мэдээллийн портал. Бид Unity дээр arkanoid бичдэг

Хүүхдэд зориулсан antipyretics нь хүүхдийн эмчийн зааж өгсөн байдаг. Гэхдээ хүүхдэд яаралтай эм өгөх шаардлагатай үед халуурсан онцгой нөхцөл байдал байдаг. Дараа нь эцэг эх нь хариуцлага хүлээж, antipyretic эм хэрэглэдэг. Нярайд юу өгөхийг зөвшөөрдөг вэ? Том хүүхдүүдэд температурыг хэрхэн бууруулах вэ? Ямар эм хамгийн аюулгүй вэ?

Эв нэгдэл- маш хүчирхэг, дэвшилтэт хөдөлгүүр, асар их боломж. Энэ нь аль хэдийн суулгасан олон функцтэй (физик хөдөлгүүр гэх мэт Nvidia PhysX), хэрэглэгчид бид гараар бүртгүүлэх шаардлагагүй. :)
Энэ богино өгүүлэлд би хөдөлгүүрийн физик чадамжийн талаар ярилцахыг хүсч байна. Ингээд эхэлцгээе:

Хатуу бие

Энэ юу вэ?

Функцийн ард Хатуу биеТуйлын хатуу биеийг нуух ( ATT). Хэрэв та үүнийг бүдүүлэг бөгөөд тодорхой тайлбарлавал ATTФизик ба механикийн хувьд энэ нь хүчний нөлөөн дор шинж чанараа өөрчилж чадахгүй, гэхдээ (түүний нөлөөгөөр) 3 хэмжээст (доош, дээш, урагш гэх мэт, өөрөөр хэлбэл бидний X-Y-Z тэнхлэгт) хөдөлж чаддаг хамгийн тохиромжтой хатуу бие юм. ), түүнчлэн 3 хэмжээст (дахин X-Y-Z тэнхлэгийн дагуу) эргүүлнэ.

AT Эв нэгдэл, бусад тоглоомын хөдөлгүүрүүдийн нэгэн адил (дахин би тэднийг "тоглоомын" хөдөлгүүр гэж нэрлэдэг), Хатуу биеБид түлхэх, өшиглөх гэх мэт янз бүрийн объектуудтай харьцах боломжтой. Бидний нөлөөн дор байгаа ийм биетүүд таталцлын нөлөөгөөр өнхөрч, хөдөлж, бусад объектуудтай мөргөлдөнө.

Бид энэ функцэд ямар программыг олох вэ?

Жишээлбэл, машин бүтээх, үүнээс гадна Хатуу биебидэнд хэрэгтэй 4 дугуйтай мөргөлдүүлэгч"болон код (скрипт) , дарагдсан товчлууруудаас хамааран дугуйнд хүч өгдөг.

Тохируулах боломжууд

  • Масс- Манай объектын масс килограммаар. Бусдын массаас 100 дахин их буюу бага массын утгыг тогтоохгүй байхыг зөвлөж байна ATT.
  • Чирэх- Хүчний нөлөөгөөр хөдөлж байгаа бие нь агаарын эсэргүүцэлд хэр их өртдөг. Үнэ цэнэ бүхий 0 эсэргүүцэл байхгүй бөгөөд хязгааргүй утга нь бидний объектыг шууд зогсоох болно.
  • Өнцгийн чирэх- Хүчний нөлөөн дор бие нь эргэлдэж байх үед агаарын эсэргүүцэл хэр их байдаг. Үнэ цэнэ бүхий 0 эсэргүүцэл байхгүй бөгөөд хязгааргүй утга нь бидний объектын эргэлтийг шууд зогсоох болно.
  • Таталцал- Асаах үед тухайн объект хүндийн хүчний нөлөөнд автдаг.
  • Кинематик- Идэвхжүүлсэн үед объект нь физикийн хөдөлгүүрт нөлөөлөхгүй бөгөөд зөвхөн функцээр нь өөрчлөх боломжтой. Хувиргах. Энэ нь жишээлбэл, хөдөлгөөнт платформ үүсгэхэд хэрэгтэй байж болох юм.
  • Интерполяци хийх- Таны ATT-ийн хөдөлгөөн танд хачирхалтай эсвэл болхи мэт санагдсан тохиолдолд л хамаарна:
    1. Байхгүй:Интерполяци ашиглаагүй
    2. интерполяци хийх:Өмнөх хүрээний өөрчлөлттэй харьцуулахад ( хүрээ), дараагийнх нь гөлгөр болно.
    3. экстраполяци хийх:Одоогийн хүрээний өөрчлөлтийг дараагийнхын тооцоолсон (ойролцоогоор) хувиргахтай харьцуулахад жигдрүүлсэн байна.
  • Хөлдөөх эргэлт- Скрипт болон мөргөлдөөний аль алиныг нь эргүүлэхийг идэвхгүй болгоно. Гэсэн хэдий ч эргэлтийг функцээр гүйцэтгэж болно хувиргах.Эргэх()
  • Мөргөлдөөнийг илрүүлэх- Хурдан хөдөлж буй биетийг бусад биетийн дундуур ололгүйгээр нэвтрүүлэхгүйн тулд хэрэглэнэ Зөрчилдөөн"ov" (бие биетэйгээ болон тоглогчтой мөргөлддөг объектууд дээрх тусгай "тор").
    1. салангид:Манай объектын өгөгдмөл утга нь мөргөлдөж болзошгүй бусад бүх объектыг "анхаарах".
    2. Үргэлжилсэн:Ашиглах Дискрет мөргөлдөөндинамик мөргөлдөөнтэй объектуудтай (тэдгээр нь ATT), a Тасралтгүй мөргөлдөөнстатикийн хувьд MeshCollider"ov (үгүй ATT). Горим Тасралтгүй динамикашигладаг Тасралтгүй мөргөлдөөнтодорхой нэг хувьд ATT. Амрах ATTгоримыг ашиглах болно Дискрет. (Энэ нь физикийн хөдөлгүүрийн ачаалалд ихээхэн нөлөөлнө, зүгээр л орхи Дискрет, хэрэв хурдан объектууд мөргөлдөхөд асуудал байхгүй бол)
    3. Тасралтгүй динамик:горимд байгаа объектуудад ашигладаг Үргэлжилсэнэсвэл Тасралтгүй динамик мөргөлдөөн. Тасралтгүй мөргөлдөөнмөн статикт ашиглах болно MeshCollider"ov (үгүй ATT). Бусад бүх хүмүүсийн хувьд энэ горимыг ашигладаг Дискрет. Хурдан хөдөлж буй объектуудад ашигладаг.

Бид энэ функцийг хэрхэн ашиглах вэ?

Үндсэн мэдлэг.

Хэрэглэх ATT, бидэнд аль хэдийн үүсгэсэн тоглоомын объект хэрэгтэй байна ( GameObject), үүн дээр дарснаар бид дараах зам дагуу цэс рүү очно. Бүрэлдэхүүн хэсгүүд - Физик - Хатуу биет . Бүгд, ATTнэмсэн! :)
Одоо объект нь таталцлын нөлөөнд автсан тул та скрипт ашиглан түүнд хүч хэрэглэж болно, гэхдээ объект яг хэрэгтэй байдлаар ажиллахын тулд та нэмэх хэрэгтэй. Коллайдерэсвэл хамтарсан.

Код дэлхийг захирдаг.

Скрипт дээр бид одоо функцуудыг ашиглан объектоо удирдах болно AddForce()болон AddTorque() .
Намайг орсноос хойш Эв нэгдэлөргөдөл гаргах JavaScript, миний жишээнүүд түүнтэй хамт байх болно, бусад скриптийн жишээнүүдийн холбоосууд (at C#эсвэл Боо) та доор, догол мөрөөс олох болно ATT-ийн нэмэлт мэдээлэл.

» Rigidbody.AddForce

// Rigidbody.AddForce нь орон зай дахь хөдөлгөөнтэй холбоотой бусад олон функцүүдийн нэгэн адил 2 төрлийн томъёог ашигладаг. // 1 төрөл: функц AddForce (хүч: Vector3, горим: ForceMode = ForceMode.Force) : хүчингүй // Глобал координатын системтэй харьцуулахад объектыг дээш түлхэж буй хүч. функц FixedUpdate () ( rigidbody.AddForce (Vector3.up * 10); ) // Стандарт координатын системтэй үндсэндээ ижил суурилагдсан Unity функц болох Vector3-ийг ашиглана. // 2-р төрөл: AddForce функц (x: хөвөх, y: хөвөх, z: хөвөх, горим: ForceMode = ForceMode.Force) : хүчингүй // Ижил, гэхдээ энд ашигласан X-Y-Z системкоординатууд. функц FixedUpdate() ( rigidbody.AddForce(0, 10, 0); )

» Хатуу бие.AddTorque

// Функц нь тухайн объектыг өгөгдсөн тэнхлэгийн дагуу эргүүлдэг. // 1 төрөл: функц AddTorque (момент: Vector3, горим: ForceMode = ForceMode.Force) : хүчингүй // ATT-ийг дэлхийн Y тэнхлэгийн эргэн тойронд эргүүлнэ. функц FixedUpdate () ( rigidbody.AddTorque (Vector3.up * 10); ) // төрөл 2: функц AddTorque (x: хөвөх, y: хөвөх, z: хөвөх, горим: ForceMode = ForceMode.Force) : хүчингүй // Ижил үйлдлийг хийдэг, гэхдээ дахин өөр хэмжилтийн системд. функц FixedUpdate() ( rigidbody.AddTorque(0, 10, 0); )

ATT нь объектуудтай харьцдаг.

Манайхыг зөв ажиллуулахын тулд ATTтэдгээрийг нийлүүлэх шаардлагатай Коллайдер"ами (эсвэл Зөрчилдөөн"Ами, хүссэнээрээ ^.^).
Коллайдеруудын талаар доороос уншина уу.

Хэмжээ чухал!

Өөрийн объектын хэмжээсийг ажиглаарай, учир нь тэдгээр нь бүр масстай ч хамаагүй илүү ач холбогдолтой юм ATT. Хэрэв таны объект буруу хөдөлж, агаарт хөвж, мөргөлдөхгүй бол түүний хэмжээг тохируулна уу. ATT, гэхдээ объект өөрөө). Загварыг 3D засварлагчаас импортлохдоо түүний хэмжээсүүд хадгалагдан үлддэг тул загварчлалын үе шатанд болгоомжтой байж, бүх загварын хэмжээсийг хүндэтгээрэй.

ATT-ийн нэмэлт мэдээлэл

Энэ талаар тайлбарлана уу ATTэсвэл Хатуу биеБи дуусгах байх. Гэсэн хэдий ч, ялангуяа энэ хүртэл уншсан хүмүүст зориулсан хэд хэдэн зөвлөгөө байна :)

  1. стандарт шоо хэмжээ Эв нэгдэлтэнцүү байна 1 метр, тиймээс үүнийг ашиглан загварынхаа хэмжээг шалгах нь маш тохиромжтой. Шоо үүсгэхийн тулд цэснээс сонгоно уу GameObject - Бусад үүсгэх - Cube
  2. Харьцангуй үзүүлэлт МассХоёр объект хоорондоо хэрхэн харьцахыг тодорхойлдог.
  3. Массөндрөөс унах хурдад нөлөөлөхгүй тул эдгээр зорилгоор ашигладаг Чирэх.
  4. Утга өндөр байх тусам Чирэхобъект илүү их жинтэй болно. стандарт утгууд өөр өөр байдаг 0.001-ээс(цул төмөр хэсэг) 10 хүртэл(өд).
  5. Хэрэв та объектыг скрипт болон физикийн тусламжтайгаар өөрчлөх шаардлагатай бол түүнд нэмнэ үү ATTпараметртэй Кинематик.

Коллайдерууд

Энэ юу вэ?

Өмнөх хэсэгт бид хэрхэн яаж хийхийг ярилцсан Хатуу биегэж нэрлэгддэг зүйлийг дурдсан мөргөлдөөгчид. Коллайдербидний хувьд - энгийн команд буюу эсрэгээр нь нарийн төвөгтэй хэлбэрийн тор хэлбэртэй туслах объект бөгөөд энэ нь бидний загвар эсвэл загварын нэг хэсгийг тойрон байрладаг бөгөөд хэрэв тэдгээр нь мөргөлдүүлэгчээр хүрээлэгдсэн бол бусад объектуудтай харилцан үйлчилдэг.
*Warcraft 3* дэлхийн засварлагчийн мэргэжилтнүүдэд тодорхой тайлбарлахын тулд dudad редактор дээр замын бүтэц хуваарилаагүй бидний импортолсон загварыг төсөөлөөд үз дээ - энэ нь бидний объект байх болно; мөн энд мөргөлдүүлэгчдийн үүргийг загварыг эргэн тойрон дахь замыг блоклогчид гүйцэтгэх болно. Мэдээжийн хэрэг, энэ нь нэлээд бүдүүлэг харьцуулалт юм, учир нь Эв нэгдэлтэд илүү ажиллагаатай байдаг. За ингээд сайтар харцгаая.

Коллайдеруудын төрлүүд.

Коллайдеруудыг цэсээр нэмдэг Бүрэлдэхүүн хэсэг - Физик . Хэд хэдэн төрөл байдаг:

  • Хайрцаг мөргөлдүүлэгч- шоо хэлбэрээр.
  • Sphere Collider- бөмбөрцөг хэлбэртэй.
  • Капсул мөргөлдүүлэгч- капсул хэлбэрээр.
  • Mesh Collider- объектын сүлжээний хэлбэрийн дагуу автоматаар мөргөлдүүлэгч үүсгэдэг, ижил төрлийн бусад мөргөлдүүлэгчтэй мөргөлдөх боломжгүй. Уралдааны замын орчин гэх мэт хөдөлгөөнгүй объектуудад голчлон ашигладаг.
  • Дугуйтай мөргөлдүүлэгч- дугуйнд ашигладаг, маш хэрэгтэй зүйл.
  • Нийлмэл коллайдер- хамтдаа нэг үүрэг гүйцэтгэдэг командуудын хослолууд. Ийм нарийн төвөгтэй мөргөлдөөнийг бий болгохын тулд та манай үндсэн мөргөлдөөнд хүүхэд объектуудыг нэмж, тэдгээрийг командын тусламжтайгаар аль хэдийн холбох хэрэгтэй. Тиймээс, жишээлбэл, машинд зориулсан энгийн мөргөлдүүлэгчийг маш тохиромжтой байдлаар хийдэг.

Тохируулах боломжууд

Зарчмын хувьд бүх мөргөлдөөгчид бие биентэйгээ төстэй бөгөөд тэдгээрийг зөвхөн өөр өөр хэлбэртэй объектуудад ашигладаг боловч хэд хэдэн өөр параметртэй байдаг.

  • Шоо
    • материал- Металл, мөс гэх мэт физик материалыг хуваарилахдаа мөргөлдүүлэгч бусад объектуудтай хэрхэн харьцаж байгааг харуулдаг.
    • Trigger юм- Хэрэв параметрийг идэвхжүүлсэн бол объектод физик биш харин скрипт нөлөөлнө.
    • хэмжээ- X-Y-Z тэнхлэгийн дагуух коллайдерын хэмжээ.
    • Төв- Тухайн объектын орон нутгийн координаттай харьцуулахад мөргөлдүүлэгчийн байрлал.
  • Бөмбөрцөг
    • Радиус- Бөмбөрцгийн радиус нь параметрийг орлоно хэмжээ.
    • Үлдсэн параметрүүд өөрчлөгдөөгүй байна.
  • Капсул(хэмжээг солих параметрүүд)
    • Радиус- Капсулын зузаан.
    • Өндөр- Коллайдерын цилиндр хэсгийн өндөр (бөөрөнхий суурьгүй).
    • чиглэл- Тухайн объектын орон нутгийн координаттай харьцуулахад мөргөлдүүлэгчийн чиглэл.
  • Mesh Collider(хэмжээг солих параметрүүд)
    • тор- Коллайдер үүсгэхийн тулд хүссэн торыг сонгох.
    • Гөлгөр бөмбөрцгийн мөргөлдөөн - Энэ функцийг идэвхжүүлснээр мөргөлдүүлэгчийн гадаргууг тэгшлэнэ. Үүнийг гөлгөр гадаргуу дээр, жишээлбэл, бөмбөрцөг эргэлдэж байх ёстой хэт их өнцөггүй налуу газар ашиглах хэрэгтэй.
    • Гүдгэр- Идэвхжүүлсэн үед манай мөргөлдүүлэгчийг бусад мөргөлдүүлэгчтэй мөргөлдөх боломжийг олгоно. Гүдгэр торон мөргөлдүүлэгч-ээр хязгаарлагддаг 255 гурвалжин.
  • Дугуйтай мөргөлдүүлэгч(хэмжээг солих параметрүүд)
  • Радиус- Дугуйны радиус.
  • Түдгэлзүүлэх зай- Дугуйны түдгэлзүүлэлтийг нэмэгдүүлэх хамгийн их зай. Түдгэлзүүлэлт нь орон нутгийн тэнхлэгийн дагуу үргэлж нэмэгддэг Ю.
  • Түдгэлзүүлсэн хавар- Түдгэлзүүлэлт нь янз бүрийн хүчийг ашиглан тогтоосон цэгт хүрэхийг оролддог.
  1. Spring:// заасан цэг (байрлал) хүрэхийг оролддог. Тохиргоо өндөр байх тусам хурдан хүрэх болно.
  2. Дампер:// зөөлрүүлж, суспензийн хурдыг удаашруулна. Утга өндөр байх тусам сааруулагч нь удаан хөдөлдөг.
  3. Зорилтот байрлал: Түдгэлзүүлэлтийн "аялж" чадах бүрэн "зам". 0 бүрэн сунгасан амортизатор гэсэн үг, ба 1 - бүрэн шахагдсан. Анхдагч утга нь 0 бөгөөд энэ нь ердийн машины түдгэлзүүлэлттэй тохирч байна.
  • Масс- Дугуйны масс.
  • Урагшаа/хажуу талын үрэлт - Дугуйны энгийн өнхрөх болон хажуу тийш өнхрөх үрэлтийн параметрүүд (энэ нь гулгах эсвэл гулсахад тохиолддог).


би дуртай +15 - 0

*Unity* бол маш хүчирхэг, дэвшилтэт хөдөлгүүр бөгөөд асар их боломж. Энэ нь олон суулгасан функцтэй (*NvidiaPhysX* физикийн хөдөлгүүрийг оруулаад) хэрэглэгчид бид гараар зааж өгөх шаардлагагүй. :)
Энэ богино өгүүлэлд би хөдөлгүүрийн физик чадамжийн талаар ярилцахыг хүсч байна. Ингээд эхэлцгээе:

Хатуу бие
=
= Энэ юу вэ? =
*Rigidbody* функцын ард туйлын хатуу бие (*ATT*) байдаг. Ойролцоогоор тодорхой тайлбарлавал физик, механикийн шинжлэх ухаанд *ATT* нь хүчний нөлөөн дор шинж чанараа өөрчилж чаддаггүй, харин (нөлөөлөлд нь) 3 хэмжээст (доошоо, дээш, урагш, гэх мэт). гэх мэт, өөрөөр хэлбэл манай X-Y-Z тэнхлэгт), түүнчлэн 3 хэмжээст (дахин X-Y-Z тэнхлэгийн дагуу) эргүүлнэ.

*Unity* болон бусад тоглоомын хөдөлгүүрүүдэд (дахин би тэднийг "тоглоомын" хөдөлгүүр гэж нэрлэдэг) *Rigidbody*-ийг бид түлхэх, өшиглөх гэх мэт янз бүрийн объектод ашигладаг. Бидний нөлөөн дор байгаа ийм биетүүд таталцлын нөлөөгөөр өнхрөх, хөдөлж, бусад объектуудтай мөргөлдөх болно.

Бид энэ функцэд ямар программыг олох вэ? =
Жишээлбэл, машин бүтээхэд *Rigidbody*-ээс гадна бидэнд хэрэгтэй 4 дугуйтай мөргөлдүүлэгч"a ба *код* (*скрипт*) дарагдсан товчлууруудаас хамааран дугуйнд хүч хэрэглэх.

  • *Масс* - Манай объектын масс килограммаар. Бусад *ATT*-ийн массаас 100 дахин их буюу бага массын утгыг тогтоохгүй байхыг зөвлөж байна.
  • *Чирэх* - Хүчний нөлөөн дор бие нь хөдөлж байх үед агаарын эсэргүүцэлд хэр их өртдөгийг илэрхийлнэ. *0* утгатай бол эсэргүүцэл байхгүй бөгөөд хязгааргүй утга нь бидний объектыг шууд зогсоох болно.
  • Өнцгийн чирэх- Хүчний нөлөөн дор бие нь эргэлдэж байх үед агаарын эсэргүүцэл хэр их байдаг. *0* утгатай бол эсэргүүцэл байхгүй бөгөөд хязгааргүй утга нь бидний объектын эргэлтийг шууд зогсоох болно.
  • Таталцал- Асаах үед тухайн объект хүндийн хүчний нөлөөнд автдаг.
  • Кинематик- Идэвхжүүлсэн үед объект физикийн хөдөлгүүрт нөлөөлөхгүй бөгөөд зөвхөн *Transform* функцээр л өөрчлөх боломжтой. Энэ нь жишээлбэл, хөдөлгөөнт платформ үүсгэхэд хэрэгтэй байж болох юм.
  • *Interpolate* - Зөвхөн таны ATT хөдөлгөөн танд хачирхалтай эсвэл болхи мэт санагдсан тохиолдолд л хамаарна:
  1. Байхгүй:Интерполяци ашиглаагүй
  2. интерполяци хийх:Өмнөх хүрээний (*хүрээ*) өөрчлөлттэй харьцуулахад дараагийнх нь жигд болно.
  3. экстраполяци хийх:Одоогийн хүрээний өөрчлөлтийг дараагийнхын тооцоолсон (ойролцоогоор) хувиргахтай харьцуулахад жигдрүүлсэн байна.
  • Хөлдөөх эргэлт- Скрипт болон мөргөлдөөний аль алиныг нь эргүүлэхийг идэвхгүй болгоно. Гэхдээ эргэлтийг // функцээр гүйцэтгэж болно. хувиргах.Эргэх()
  • Мөргөлдөөнийг илрүүлэх- Хурдан хөдөлж буй биетийг бусад биетийн дундуур ололгүйгээр нэвтрүүлэхгүйн тулд хэрэглэнэ Зөрчилдөөн"ov" (бие биетэйгээ болон тоглогчтой мөргөлддөг объектууд дээрх тусгай "тор").
  1. салангид:Манай объектын өгөгдмөл утга нь мөргөлдөж болзошгүй бусад бүх объектыг "анхаарах".
  2. Үргэлжилсэн:Ашиглах Дискрет мөргөлдөөндинамик мөргөлдөөнтэй объектуудтай (тэдгээр нь *ATT*), болон Тасралтгүй мөргөлдөөнстатикийн хувьд MeshCollider"s (* ATT *-гүй). Горим Тасралтгүй динамикашигладаг Тасралтгүй мөргөлдөөннэг тодорхой *ATT*. Үлдсэн *ATT* нь _Discrete_ горимыг ашиглах болно. (Энэ нь физикийн хөдөлгүүрийн ачаалалд ихээхэн нөлөөлнө, хурдан биетүүд мөргөлдөхөд асуудал гарахгүй бол _Discrete_-г үлдээгээрэй)
  3. Тасралтгүй динамик: _Тасралтгүй_ горимд байгаа объектуудад ашигладаг эсвэл Тасралтгүй динамик мөргөлдөөн. Тасралтгүй мөргөлдөөнмөн статикт ашиглах болно MeshCollider"s (* ATT *-гүй). Бусад бүх тохиолдолд _Discrete_ горимыг ашигладаг. Хурдан хөдөлж буй объектуудад ашигладаг.

Бид энэ функцийг хэрхэн ашиглах вэ? =
= Үндсэн мэдлэг.
*ATT*-г ашиглахын тулд бидэнд аль хэдийн үүсгэсэн тоглоомын объект (*GameObject*) хэрэгтэй бөгөөд түүн дээр дарснаар бид дараах замаар цэс рүү орно. Бүрэлдэхүүн хэсгүүд - Физик - Хатуу биет . Ингээд л *ATT* нэмлээ! :)
Одоо объект нь таталцлын нөлөөнд автсан тул та скрипт ашиглан түүнд хүч хэрэглэж болно, гэхдээ объект яг хэрэгтэй байдлаар ажиллахын тулд та * Collider * эсвэл * Joint * -ийг нэмэх хэрэгтэй.

Код дэлхийг захирдаг.
Скрипт дээр бид одоо функцуудыг ашиглан объектоо удирдах болно AddForce()болон AddTorque() .
Би *Unity*-д *JavaScript* ашигладаг тул миний жишээнүүд үүнтэй хамт байх болно, бусад скриптийн жишээнүүдийн холбоосууд (дээр) C#эсвэл *Boo*) та доор, догол мөрөөс олох болно ATT-ийн нэмэлт мэдээлэл.

Rigidbody.AddForce

// Rigidbody.AddForce нь орон зай дахь хөдөлгөөнтэй холбоотой бусад олон функцүүдийн нэгэн адил 2 төрлийн томъёог ашигладаг. // 1 төрөл: функц AddForce (хүч: Vector3, горим: ForceMode = ForceMode.Force) : хүчингүй // Глобал координатын системтэй харьцуулахад объектыг дээш түлхэж буй хүч. функц FixedUpdate () ( rigidbody.AddForce (Vector3.up * 10); ) // Стандарт координатын системтэй үндсэндээ ижил суурилагдсан Unity функц болох Vector3-ийг ашиглана. // 2-р төрөл: функц AddForce (x: хөвөх, y: хөвөх, z: хөвөх, горим: ForceMode = ForceMode.Force) : хүчингүй // Үүнтэй ижил зүйл, гэхдээ энэ нь X-Y-Z координатын системийг ашигладаг. функц FixedUpdate() ( rigidbody.AddForce(0, 10, 0); )

Хатуу бие.AddTorque

// Функц нь тухайн объектыг өгөгдсөн тэнхлэгийн дагуу эргүүлдэг. // 1 төрөл: функц AddTorque (момент: Vector3, горим: ForceMode = ForceMode.Force) : хүчингүй // ATT-ийг дэлхийн Y тэнхлэгийн эргэн тойронд эргүүлнэ. функц FixedUpdate () ( rigidbody.AddTorque (Vector3.up * 10); ) // төрөл 2: функц AddTorque (x: хөвөх, y: хөвөх, z: хөвөх, горим: ForceMode = ForceMode.Force) : хүчингүй // Ижил үйлдлийг хийдэг, гэхдээ дахин өөр хэмжилтийн системд. функц FixedUpdate() ( rigidbody.AddTorque(0, 10, 0); )

ATT нь объектуудтай харьцдаг.
Манай * ATT * зөв ажиллахын тулд тэдгээрийг нийлүүлэх шаардлагатай Коллайдер"ами (эсвэл Зөрчилдөөн"Ами, хүссэнээрээ ^.^).
Коллайдеруудын талаар доороос уншина уу.


Хэмжээ чухал!
Өөрийн объектын хэмжээсийг ажиглаарай, учир нь тэдгээр нь *ATT* массаас хамаагүй илүү ач холбогдолтой юм. Хэрэв таны объект буруу хөдөлж, агаарт хөвж, мөргөлдөхгүй бол түүний хэмжээг (*ATT* биш, харин объект өөрөө) тохируулж үзээрэй. Загварыг 3D засварлагчаас импортлохдоо түүний хэмжээсүүд хадгалагдан үлддэг тул загварчлалын үе шатанд болгоомжтой байж, бүх загварын хэмжээсийг хүндэтгээрэй.

ATT дээр нэмэлт мэдээлэл =
Үүн дээр *ATT* эсвэл *Rigidbody*-ийг тайлбарлавал би дуусгах болно. Гэсэн хэдий ч, ялангуяа энэ хүртэл уншсан хүмүүст зориулсан хэд хэдэн зөвлөгөө байна :)

  1. *Unity* дээрх стандарт шоо хэмжээ нь 1 метр, тиймээс үүнийг ашиглан загварынхаа хэмжээг шалгах нь маш тохиромжтой. Шоо үүсгэхийн тулд цэснээс сонгоно уу GameObject - Бусад үүсгэх - Cube
  2. *Масс* харьцангуй илтгэгч нь хоёр объект хоорондоо хэрхэн харьцахыг тодорхойлдог.
  3. *Масс* нь өндрөөс унах хурдад нөлөөлөхгүй, энэ зорилгоор *Drag*-ыг ашиглана.
  4. *Drag*-ын утга өндөр байх тусам тухайн зүйлийн жин нэмэгдэнэ. стандарт утгууд өөр өөр байдаг 0.001-ээс(цул төмөр хэсэг) 10 хүртэл(өд).
  5. Хэрэв та скрипт болон физик ашиглан объектыг өөрчлөх шаардлагатай бол *ATT*-г *Кинематик* параметрээр нэмнэ үү.

Та дараах холбоосоор *ATT* функцтэй объектод гадны хүчний нөлөөллийн скриптээр бичсэн жишээг үзэж болно.
*Хүч нэмэх*
*Момент нэмэх*

Скриптийн жишээг өөрчлөхийн тулд програмчлалын хэлний нэр бүхий текст дээр дарна уу!

Коллайдерууд
=
= Энэ юу вэ? =
Өмнөх хэсэгт бид *Rigidbody* хэрхэн ажилладаг талаар судалж, *colliders* гэж нэрлэгддэг зүйлсийг дурдсан. * Collider * бидний хувьд бол энгийн команд буюу эсрэгээрээ нарийн төвөгтэй хэлбэрийн тор хэлбэртэй туслах объект бөгөөд бидний загвар эсвэл загварын нэг хэсгийг тойрон байрладаг бөгөөд хэрэв мөргөлдүүлэгчээр хүрээлэгдсэн бол бусад объектуудтай харилцан үйлчилдэг. .
*Warcraft 3* дэлхийн засварлагчийн мэргэжилтнүүдэд тодорхой тайлбарлахын тулд dudad редактор дээр замын бүтэц хуваарилаагүй бидний импортолсон загварыг төсөөлөөд үз дээ - энэ нь бидний объект байх болно; мөн энд мөргөлдүүлэгчдийн үүргийг загварыг эргэн тойрон дахь замыг блоклогчид гүйцэтгэх болно. Мэдээжийн хэрэг, энэ нь нэлээд бүдүүлэг харьцуулалт юм, учир нь *Unity*-д тэд илүү ажиллагаатай байдаг. За ингээд сайтар харцгаая.

Коллайдеруудын төрлүүд. =
Коллайдеруудыг цэсээр нэмдэг Бүрэлдэхүүн хэсэг - Физик . Хэд хэдэн төрөл байдаг:

  • Хайрцаг мөргөлдүүлэгч- шоо хэлбэрээр.
  • Sphere Collider- бөмбөрцөг хэлбэртэй.
  • Капсул мөргөлдүүлэгч- капсул хэлбэрээр.
  • Mesh Collider- объектын сүлжээний хэлбэрийн дагуу автоматаар мөргөлдүүлэгч үүсгэдэг, ижил төрлийн бусад мөргөлдүүлэгчтэй мөргөлдөх боломжгүй. Уралдааны замын орчин гэх мэт хөдөлгөөнгүй объектуудад голчлон ашигладаг.
  • Дугуйтай мөргөлдүүлэгч- дугуйнд ашигладаг, маш хэрэгтэй зүйл.
  • Нийлмэл коллайдер- хамтдаа нэг үүрэг гүйцэтгэдэг командуудын хослолууд. Ийм нарийн төвөгтэй мөргөлдөөнийг бий болгохын тулд та манай үндсэн мөргөлдөөнд хүүхэд объектуудыг нэмж, тэдгээрийг командын тусламжтайгаар аль хэдийн холбох хэрэгтэй. Тиймээс, жишээлбэл, машинд зориулсан энгийн мөргөлдүүлэгчийг маш тохиромжтой байдлаар хийдэг.


Захиалгат техникийн үзүүлэлтүүд =
Зарчмын хувьд бүх мөргөлдөөгчид бие биентэйгээ төстэй бөгөөд тэдгээрийг зөвхөн өөр өөр хэлбэртэй объектуудад ашигладаг боловч хэд хэдэн өөр параметртэй байдаг.

  • *Шоо*

* *Материал* - Металл, мөс гэх мэт биет материалыг хуваарилахдаа мөргөлдүүлэгч бусад объектуудтай хэрхэн харьцаж байгааг харуулдаг.
* Trigger юм- Хэрэв параметрийг идэвхжүүлсэн бол объектод физик биш харин скрипт нөлөөлнө.
* *Хэмжээ* - X-Y-Z тэнхлэгийн дагуух коллайдерын хэмжээ.
* *Төв* - Тухайн объектын орон нутгийн координаттай харьцуулахад мөргөлдүүлэгчийн байрлал.

  • *Бөмбөлөг*

* *Радиус* - Бөмбөрцгийн радиус нь *Хэмжээ* параметрийг орлоно.
* Бусад параметрүүд өөрчлөгдөөгүй.

  • *Капсул* (хэмжээг солих параметрүүд)

* *Радиус* - Капсулын зузаан.
* *Өндөр* - Коллайдерын цилиндр хэсгийн өндөр (бөөрөнхий суурьгүй).
* *Чиглэл* - Тухайн объектын орон нутгийн координаттай харьцуулахад мөргөлдүүлэгчийн чиглэл.


  • Mesh Collider(хэмжээг солих параметрүүд)

* *Mesh* - Хүссэн тороо сонгоод мөргөлдөөн үүсгэнэ.
* Гөлгөр бөмбөрцгийн мөргөлдөөн - Энэ функцийг идэвхжүүлснээр мөргөлдүүлэгчийн гадаргууг тэгшлэнэ. Үүнийг гөлгөр гадаргуу дээр, жишээлбэл, бөмбөрцөг эргэлдэж байх ёстой хэт их өнцөггүй налуу газар ашиглах хэрэгтэй.
* *Гүдгэр* - Идэвхжүүлсэн үед манай мөргөлдүүлэгчийг бусад мөргөлдүүлэгчтэй мөргөлдөх боломжийг олгоно. Гүдгэр торон мөргөлдүүлэгч-ээр хязгаарлагддаг 255 гурвалжин.

  • Дугуйтай мөргөлдүүлэгч(хэмжээг солих параметрүүд)

* *Радиус* - Дугуйны радиус.
* Түдгэлзүүлэх зай- Дугуйны түдгэлзүүлэлтийг нэмэгдүүлэх хамгийн их зай. Түдгэлзүүлэлт нь орон нутгийн *Y* тэнхлэгийн дагуу үргэлж нэмэгддэг.
* Түдгэлзүүлсэн хавар- Түдгэлзүүлэлт нь янз бүрийн хүчийг ашиглан тогтоосон цэгт хүрэхийг оролддог.

  1. Хавар: Заасан цэг (байрлал) хүрэх оролдлого. Тохиргоо өндөр байх тусам хурдан хүрэх болно.
  2. Дамппер: зөөлрүүлж, түдгэлзүүлэх хурдыг удаашруулна. Утга өндөр байх тусам сааруулагчийн хөдөлгөөн удааширна.
  3. Зорилтот байрлал: Түдгэлзүүлэлтийн "аялж" чадах нийт "зам". *0* нь бүрэн сунгасан, *1* бүрэн шахагдсан гэсэн үг. Анхдагч утга нь 0 бөгөөд энэ нь ердийн машины түдгэлзүүлэлттэй тохирч байна.

* *Масс* - Дугуйны масс.
* Урагшаа/хажуу талын үрэлт - Дугуйны энгийн өнхрөх болон хажуу тийш өнхрөх үрэлтийн параметрүүд (энэ нь гулгах эсвэл гулсахад тохиолддог).

Үзсэн: 734


Миний хачирхалтай бүтээлч зам намайг тоглоомын хөгжилд хүргэсэн. Манай их сургуультай хамтран нэр нь нэг жижиг грек үсгээс бүрдсэн мэдээллийн технологийн компаниас маш сайн оюутны хөтөлбөрийн ачаар бид багаа бүрдүүлж, баримт бичгийг төрүүлж, Agile тоглоомын хөгжүүлэлтийг өндөр зэрэглэлийн багшийн удирдлаган дор байгуулж чадсан. QA инженер (Сайн уу Анна!)

Нэг их бодолгүйгээр Unity-г хөдөлгүүрээр сонгосон. Энэ бол та маш хурдан бөгөөд амархан хийж чадах гайхалтай хөдөлгүүр юм муу тоглоомЭнэ нь тэдний зөв оюун ухаанд хэн ч хэзээ ч тоглохгүй. Бүтээх сайн тоглоом, та баримт бичгийг хүрзээр цуглуулж, зарим онцлог шинж чанаруудыг судалж, хөгжүүлэлтийн туршлага олж авах хэрэгтэй.

Манай тоглоом физикийн хөдөлгүүрийг санаанд оромгүй байдлаар ашигласан бөгөөд энэ нь гар утасны платформ дээр гүйцэтгэлийн олон асуудал үүсгэсэн. Энэхүү нийтлэл нь манай тоглоомын жишээг ашиглан физикийн хөдөлгүүртэй хийсэн тэмцэл, түүний ажиллах боломжтой бета хувилбар руу шилжих замд анзаарагдсан бүх шинж чанаруудыг тайлбарласан болно.

Тоглоом

Үүнийг хэрхэн хийдэг талаар хэдэн үг хэлье.
Blender болон хэд хэдэн питон скриптээр хийгдсэн. Зураг авалт хийх үед дэлгэцийн буланд 16 квадрат байсан бөгөөд тэдгээрийн өнгө нь хөвөгч цэгийн дугаарын 32 битийг кодлосон - тухайн үед утасны эргэлтийг харуулсан. R, G - өгөгдөл, B - паритет. 0 - 0, 255 - 1. Компьютер дээр авсан видеог ffmpeg ашиглан фрейм болгон хувааж, дүрслэх хүрээ тус бүрд код тайлсан өнцгийг оноож өгсөн. Энэхүү формат нь зураг авалтын явцад аливаа шахалтыг даван туулах боломжийг олгосон бөгөөд бүх програмууд цаг хугацаа өнгөрөхөд арай өөр санаатай байдаг гэдгийг даван туулсан. Бодит байдал дээр тоглоом нь рэндэртэй адилаар тоглогддог.


Онгоц эцэс төгсгөлгүй, урьдчилан тааварлашгүй агуйг дамжин нисдэг бөгөөд үүнд урамшуулал, бүх төрлийн зоос, дайснууд байдаг бөгөөд та пуужингаар харваж болно. Хананд мөргөсөн - тэр даруй алдагдсан.
Тоглоомын нэг онцлог шинж чанар нь түвшин нь тэнгэрийн хаяанд хадагдсан бөгөөд хяналт нь гироскопик, үүнээс гадна үнэмлэхүй юм. Утсаа 45 градус хазайлгана - онгоц 45 градусын өнцгөөр нисэв. Та үхсэн гогцоо хийх хэрэгтэй - таблетыг мушгих хэрэгтэй. Мэдрэмж байхгүй, зөвхөн хардкор.
Хөгжүүлэгчийн хувьд хоёр гол бөгөөд тодорхой бэрхшээлийг онцолж үзье.
Асуудал 1: Хязгааргүй байдал
Unity объектын координатыг 6 аравтын орон хүртэлх нарийвчлалтайгаар ердийн 32 битийн хөвөгч байдлаар хадгалж, боловсруулдаг. Асуудал нь бидэнд эцэс төгсгөлгүй тоглоом байгаа бөгөөд хэрвээ бид хангалттай удаан нисэх юм бол бүх төрлийн галзуу алдаанууд ханаар дамжих хүртэл эхлэх болно. Энэ асуудлыг шийдэх хэд хэдэн арга байдаг:
  • Үл тоож байна. Жишээлбэл, Minecraft-д дугуйрсан алдаанууд нь тоглоомыг үржүүлснээр илүү сонирхолтой болгосон.

  • Онгоц гарал үүслээсээ хэт хол байх үед (0;0;0) хүртэл цахилгаан дамжуулах.

  • Лавлах цэгийн өөрчлөлт. Энэ нь онгоц биш, харин түүний эргэн тойрон дахь түвшин юм.
  • Манай тохиолдолд хүлээн зөвшөөрөгдсөн цорын ганц хувилбар бол гурав дахь нь хэрэгжсэн. Хэрэгжилтийн талаар - хэсэг хугацааны дараа.
    Эхнийх нь үл тоомсорлох нь туйлын хүлээн зөвшөөрөгдөхгүй. Бидний тоглоомыг үүрд тоглох боломжтой робот бүтээх нь хэн нэгэн шийдвэрлэх сонирхолтой (мөн маш энгийн) ажил юм. Солонгосын жирийн тоглогчдыг дутуу үнэлж болохгүй - онгоц хурдан, түвшин нь урьдчилан таамаглах аргагүй үүсдэг. Хэрэв та хана давахаас өмнө нисч, нисэх юм бол 5 минутын нислэгийн дараа илүү нарийвчлалтай буудаж эхлэх нь ойлгомжтой.
    Хоёр дахь нь - тоглуулагч болон бүх ертөнцийг телепорталснаар хөдөлгөөнт төхөөрөмжүүдийг өвдөг дээрээ буулгаж, зарим тохиолдолд хагас секундын турш хүргэдэг. Энэ нь маш мэдэгдэхүйц бөгөөд тиймээс хүлээн зөвшөөрөгдөхгүй. Гэхдээ энэ бол эцэс төгсгөлгүй энгийн PC тоглоомуудын хувьд төгс хүлээн зөвшөөрөгдөх сонголт юм.

    Асуудал 2: Түвшин үүсгэх

    Төгсгөлгүй гүйгчийг бий болгох хэд хэдэн үндсэн арга байдаг:
  • Санамсаргүй байдлаар тохирох бэлэн түвшний сегментүүдийг ашиглах. Үүнийг жишээ нь Subway Surfers-д хийдэг. Үүнийг хэрэгжүүлэхэд хялбар боловч тоглогч хурдан дасаж, юунд бэлтгэхээ мэддэг бөгөөд энэ нь уйтгартай юм.

  • Түвшин нь саад тотгорыг санамсаргүйгээр байрлуулсан шулуун шугам юм. Joypack Joyride болон Temple Run-д үүнийг ингэж хийдэг. Манай тохиолдолд энэ нь маневруудын тоог ихээхэн хязгаарлах болно.

  • Бүх зүйл санамсаргүй байдлаар үүсдэг. Тоглогчийн хувьд хамгийн хэцүү, урьдчилан таамаглах аргагүй, сонирхолтой сонголт.
  • Мэдээжийн хэрэг, бид хамгийн хэцүү сонголтыг сонгосон. Үүний гол цөм нь тэдгээр дээр санамсаргүй шилжилтийг гүйцэтгэдэг маш нарийн төвөгтэй төлөвийн машин юм. Гэхдээ энэ нийтлэлийн хүрээнд сонирхолтой зүйл бол механизм биш, харин сонгосон эхлэлийн цэгийг харгалзан түвшин, түүний зохион байгуулалтыг бий болгох үйл явц юм.

    Түвшингийн бүтэц

    Бид агуйд нисч байна, энэ нь шал, таазтай - хэд хэдэн блок, энгийн барилгын хэсгүүд. Блокууд нь хоорондоо уялдаатай нэгдэх сегментүүдэд нэгтгэгддэг. Сегментүүд бүхэлдээ онгоцны эргэн тойронд эргэлдэж, хурдны векторын дагуу хөдөлж, нислэгийн хуурмаг байдлыг бий болгодог. Хэрэв сегмент нь камерын харах талбараас гарвал генераторын зааврын дагуу блокоос цэвэрлэж, түвшний хамгийн сүүлийн сегмент рүү залгаж, шинэ блокоор дүүргэнэ. Ийм сегментүүдийн нийлбэр нь түвшин юм.
    Туршлагатай Unity хөгжүүлэгчид ажлын хэмжээ болон боломжит бүх бэрхшээлийг тооцоолж үзсэний үндсэн дээр цөхрөнгөө барж чадна. Гэхдээ үгээр хэлбэл бүх зүйл энгийн, гэхдээ надад хөгжлийн туршлага байгаагүй ...

    Эв нэгдэл дэх физикийн үндсэн хуулиуд

    Баримт бичгийг боловсруулж, туршиж, уншсан нэг сарын хугацаанд би Unity-д физикийн гурван үндсэн хуулийг тодорхойлсон. Тэдгээрийг зөрчиж болно, гэхдээ зөрчлийн үнэ нь бүтээмж юм. Хөдөлгүүр нь алдааны талаар танд сануулахгүй бөгөөд профайлчингүйгээр та тэдгээрийн талаар хэзээ ч мэдэхгүй байж магадгүй юм. Эдгээр хуулийг дагаж мөрдөхгүй байх нь таны тоглоомыг удаашруулж болзошгүй юм араваарнэг удаа. Миний ойлгож байгаагаар аливаа хуулийг зөрчих нь физикийн хөдөлгүүр нь зөрчилтэй мөргөлдөөнийг буруу гэж тэмдэглэж, объект дээр дахин үүсгэж, дараа нь физикийг дахин тооцоолоход хүргэдэг.
    1. Коллайдерууд хөдөлж, эргэх, асаах/унтраах, хэмжээ өөрчлөгдөхгүй байх ёстой.
    Объект дээр мөргөлдүүлэгч нэмсний дараа түүнд үзүүлэх нөлөөлөл эсвэл түүнд агуулагдах объектуудыг мартаж болно. Энгийн коллайдер бол зөвхөн хөдөлгөөнгүй объект юм. Жишээлбэл, мод нь нэг мөргөлдүүлэгчтэй байж болно. Хэрэв мод тоглогч дээр унаж чадвал мод нь гүйцэтгэлийн хамт унах болно. Хэрэв энэ мод нь мөргөлдөөгчгүй боловч хөдөлж чаддаг ид шидийн шим тэжээлийн үүлнээс ургадаг бол энэ нь гүйцэтгэлийн уналт дагалддаг.
    2. Хэрэв объект хөдөлж эсвэл эргэлдэж байвал энэ нь хатуу биетэй байх ёстой i.e. Rigidbody бүрэлдэхүүн хэсэгтэй.
    Энэ тухай баримт бичигт бичсэн байгаа, тийм ээ. Тоглоом хийж эхлэхийн тулд анхааралтай унших шаардлагагүй, учир нь Unity нь маш энгийн бөгөөд ойлгомжтой байдаг.
    Хатуу бие нь физикийн хөдөлгүүрийн объекттой харилцах харилцааг өөрчилдөг. Гадны хүчнүүд үүн дээр ажиллаж эхэлдэг, энэ нь шугаман болон өнцгийн хурдтай байж болно, хамгийн чухал нь хатуу бие нь физикийн бүрэн дахин тооцоололгүйгээр физикийн хөдөлгүүрийн тусламжтайгаар хөдөлж, эргэлддэг.
    Хоёр төрлийн хатуу бодис байдаг - ердийн ба кинематик. Энгийн бие бие биетэйгээ болон энгийн мөргөлдүүлэгчтэй харилцан үйлчилдэг - нэг бие нөгөөгөөр дамжин өнгөрөх боломжгүй. Кинематик биетүүд нь симуляцийн хялбаршуулсан дүрмийг дагаж мөрддөг - тэдгээр нь гадны ямар ч хүч, түүний дотор таталцлын нөлөөнд автдаггүй. Тэд ямар ч зүйлийг даван туулах эрх чөлөөтэй.
    Хэрэв физик хөдөлгүүрийн хяналтан дор объектыг өгөх нь харамсалтай биш бол энгийн хатуу биеийг ашигла. Жишээлбэл, хэрэв та чулууг хаднаас сайхан өнхрүүлэх шаардлагатай бол. Хэрэв таны скрипт эсвэл аниматорууд объектыг шууд удирддаг бол кинематик биетүүдийг ашигла, ингэснээр та хөдөлгүүр болон санамсаргүй объектын мөргөлдөөнийг байнга шийдвэрлэх шаардлагагүй болно. Жишээлбэл, танд хөдөлгөөнт дүр эсвэл ямар нэгэн зүйлд хүрэх үед дэлбэрдэг чиглүүлэгч пуужин байгаа бол.
    3. Хэрэв объект нь хатуу биет бол хөшүүн биетийн аргуудаар хөдөлж, эргүүлэх ёстой.
    Объект дээр мөргөлдүүлэгч нэмсний дараа шууд Transform " гэж дуудхаа март. Одооноос мөн үүрд Transform бол таны дайсан бөгөөд гүйцэтгэлийн алуурчин болно. Transform.position = ... эсвэл transform.eulerAngles = ... гэж бичихээсээ өмнө, "Би одоо юу хийж байгаагаа маш сайн ойлгож байна, энэ шугамаас үүсэх тоормосонд сэтгэл хангалуун байна." гэсэн хэллэгийг хэлээрэй. Шаталсан харилцааны талаар бүү мартаарай: хэрэв та хатуу биетүүдийг агуулсан объектыг гэнэт хөдөлгөвөл физик дахин тооцоолно.
    Хатуу биеийн хяналтын гурван түвшин байдаг:
    - Хамгийн дээд, тиймээс байгалийн түвшин нь хүчээр дамждаг. Эдгээр нь AddForce болон AddTorque аргууд юм. Физик хөдөлгүүр нь биеийн массыг харгалзан үзэж, үүссэн хурдыг зөв тооцоолох болно. Биеийн бүх харилцан үйлчлэл энэ түвшинд явагддаг.
    - Дундаж түвшин - хурдны өөрчлөлт. Эдгээр нь хурд ба өнцгийн Хурдны шинж чанарууд юм. Тэдгээрийн үндсэн дээр тэдгээрийн харилцан үйлчлэлийн явцад бие махбодид нөлөөлөх хүчийг тооцоолж, дараагийн мөчид тэдний байрлалыг тооцдог. Хэрвээ хатуу бие нь маш бага хурдтай бол нөөцийг хэмнэхийн тулд "унтдаг".
    - Хамгийн доод түвшин - шууд объектын координат ба түүний орон зай дахь чиг баримжаа. Эдгээр нь MovePosition болон MoveRotation аргууд юм. Физикийн тооцооны дараагийн давталт дээр (энэ нь чухал, учир нь нэг хүрээ доторх дараагийн аргын дуудлага бүр өмнөх дуудлагыг орлуулдаг) тэд объектыг шинэ байрлал руу шилжүүлж, дараа нь өмнөх шигээ амьдардаг. Манай тоглоомонд энэ түвшинг ашигладаг бөгөөд зөвхөн үүнийг ашигладаг, учир нь энэ нь объектыг бүрэн хянах боломжийг олгодог.

    Юу үлдсэн бэ? Объектыг асааж/унтрааж, томруулна уу. Хөдөлгүүрийг төөрөгдүүлэхгүйгээр объектын хэмжээг өөрчлөх арга байдаг эсэхийг би мэдэхгүй. Үгүй байх бүрэн боломжтой. Объектыг унтраах нь өвдөлтгүй бөгөөд түүнийг асаах нь ... тийм ээ, асаалттай объектын ойролцоо физикийн дахин тооцоолол үүсгэдэг. Тиймээс, хэт олон объектыг нэгэн зэрэг оруулахгүй байхыг хичээгээрэй, хэрэглэгч анзаарахгүй байхын тулд энэ үйл явцыг цаг тухайд нь сунгаарай.

    Гүйцэтгэлд нөлөөлдөггүй, харин гүйцэтгэлд нөлөөлдөг хууль байдаг: хатуу бие нь хатуу биетийн нэг хэсэг байж болохгүй. Эцэг эхийн объект давамгайлах тул хүүхэд эцэг эхтэйгээ харьцуулахад хөдөлгөөнгүй зогсох эсвэл урьдчилан таамаглах боломжгүй, буруу зан гаргах болно.

    Unity-ийн физикийн бус өөр нэг онцлогийг дурьдах нь зүйтэй: Instantiate/Destroy аргуудаар объектуудыг динамикаар үүсгэх, устгах нь ГАЛЗУУ удаан. Уг объектыг бүтээх явцад бүрээсний доор юу болж байгааг төсөөлөхөөс ч айж байна. Хэрэв та ямар нэг зүйлийг динамикаар үүсгэж, устгах шаардлагатай бол тоглоомыг ачаалах үед үйлдвэрүүдийг ашиглаж, шаардлагатай объектуудаар дүүргэ. Instantiate-г хамгийн сүүлчийн арга гэж нэрлэх нь зүйтэй - хэрэв үйлдвэр гэнэт үнэгүй объектууд дуусч, устгахыг үүрд мартвал - бүтээсэн бүх зүйлийг дахин ашиглах ёстой.

    Хууль тогтоомжийг практикт хэрэглэх

    (энэ хэсэг нь тоглоом, түүний онцлогийг бий болгоход чиглэсэн үндэслэлийг агуулдаг)

    Түвшинг эргүүлж, хөдөлгөх хэрэгтэй.
    Түвшин буюу онгоцны эргэлтийн тэнхлэгийг координатын эхэнд байрлуулснаар амьдралаа үүрд хялбар болгоцгооё. Одоо бид цэгийн координатын векторын уртыг тооцоолох замаар цэгээс түүнд хүрэх зайг тооцоолж болно. Өчүүхэн боловч сайхан.
    Хүүхдүүд нь эцэг эхийн нэг хэсэг учраас Unity дахь объектын шатлалаар дамжуулан объектуудын хамтын хөдөлгөөнийг хялбархан хэрэгжүүлдэг. Жишээлбэл, тайлбарласан түвшний бүтцийг дараах байдлаар логик байдлаар хэрэгжүүлдэг.
    - Эргэлтийн тэнхлэг
    - - Түвшин
    - - - 1-р хэсэг
    - - - - Блок 1 (Клайдер)
    - - - - ...
    - - - - Н блок
    - - - 2-р хэсэг ...
    - - - Хэсэг 3 ...
    - - - Хэсэг 4 ...
    (Та түвшний объектгүйгээр ч хийж болно)

    Тэнхлэг дээрх скрипт нь гироскопоос өгөгдлийг хүлээн авч, түүнд тохирох өнцгийг тогтоодог ... Мөн энэ нь нэн даруй олон дүрмийг зөрчиж байна, учир нь эргэлт нь шатлалаар дамжин коллайдер руу шилжих бөгөөд энэ нь физикийн хөдөлгүүрийг галзууруулах болно. Та тэнхлэгийг хатуу биетэй болгож, тохирох аргаар эргүүлэх хэрэгтэй болно. Харин түвшний хөдөлгөөний талаар юу хэлэх вэ? Мэдээжийн хэрэг, эргэлтийн тэнхлэг ба түвшний объект хөдлөхгүй, сегмент бүрийг тус тусад нь шилжүүлэх ёстой, эс тэгвээс бид хязгааргүй байдлын асуудалтай тулгарна. Энэ нь сегментүүд нь хатуу биетэй байх ёстой гэсэн үг юм. Гэхдээ бид шатлалын хувьд илүү өндөр хатуу биетэй болсон бөгөөд хатуу бие нь хатуу биетийн нэг хэсэг байж чадахгүй. Логик, гоёмсог шатлал нь тохирохгүй, бүх зүйлийг гараар хийх шаардлагатай болно - эргэлтийн тэнхлэгт объект ашиглахгүйгээр эргүүлэх, орчуулах. Тоглоомын өвөрмөц онцлогтой бол үүнд бэлэн байгаарай.

    Хэрэв та сегментүүдийг шууд шилжүүлэх шаардлагатай бол тэдгээрийг эргүүлэх хэрэгтэй болно. Хамгийн гол бэрхшээл нь Unity физикийн хөдөлгүүрт "объектыг дурын цэгийн эргэн тойронд эргүүлэх" арга байхгүй (Transform-д байдаг, гэхдээ битгий уруу татаарай). Зөвхөн "түүний төвийг тойрон эргэдэг" л байдаг. Энэ нь логик юм, учир нь дурын тэнхлэгийг тойрон эргэх нь нэгэн зэрэг эргэлт ба хөдөлгөөн бөгөөд эдгээр нь хоёр өөр үйлдэл юм. Гэхдээ үүнийг дуурайж болно. Эхлээд бид сегментийг өөрийн тэнхлэгийн эргэн тойронд эргүүлж, дараа нь "өөрийн тэнхлэг" -ийн координатыг онгоцны эргэн тойронд эргүүлнэ. Бидний гарал үүслийн хувьд онгоц байгаа тул сургуулийн геометрийг санаж, Википедиа руу орох шаардлагагүй, Unity аль хэдийн бүх зүйлтэй. Эргэлтийн өнцгийг дөрөвний нэг болгон хувиргаж, цэгийн координатаар үржүүлэхэд хангалттай. Дашрамд хэлэхэд, би энэ тухай нийтлэл бичиж байх үед олж мэдсэн бөгөөд үүнээс өмнө эргэлтийн матрицыг ашиглаж байсан.

    Онгоцыг хана руу түлхэж, ална гэж найдаж байгаа дайснууд бидэнд бий. Онгоцыг хананаас түлхэж, амьд үлдэхэд тусалдаг бамбай байдаг. Үүнийг өчүүхэн байдлаар хэрэгжүүлдэг - офсет вектор байдаг бөгөөд үүнийг сегмент бүрийн координатад хүрээ болгон нэмж, дараа нь дахин тохируулдаг. Онгоцыг өшиглөхийг хүссэн хэн бүхэн тусгай аргаар өөрийн цохилтын векторыг орхиж болно, энэ нь шилжих вектор дээр нэмэгдэх болно.

    Эцсийн эцэст, сегментийн бодит координатууд, хүрээ тус бүрийг түвшний хөдөлгөөний удирдлагын төв дараах байдлаар тооцоолно.
    Vector3 байрлал = segment.CachedRigidbody.position; Vector3 deltaPos = Time.deltaTime * Vector3.left * тохиргоо. Хурд; segment.truePosition = Quaternion.Euler(0, 0, deltaAngle) * (байрлал + deltaPos + хөдөлгөөнOffset);
    Сэргээх явцад сегментүүдийг яг таг залгахад шаардлагатай бүх тооцоо, суга таяг хийсний дараа segment.truePosition-г сегментийн хатуу биеийн MovePosition арга руу илгээнэ.

    дүгнэлт

    Энэ бүхэн хэр хурдан ажилладаг вэ? Хуучин тэргүүлэх хөлөг онгоцууд болох Nexus 5 болон LG G2 дээр тоглоом нь 60 FPS хурдтайгаар нисдэг бөгөөд сегмент үүсгэх явцад шинэ мөргөлдөөнүүдийг оруулах үед бараг мэдэгдэхүйц бууралт (энэ нь зайлшгүй бөгөөд ямар ч байдлаар зайлсхийх боломжгүй) бөгөөд өтийг зайнаас түлхэж өгдөг. газар (та үүнийг тойрч гарахын тулд ямар нэгэн там овоолж болно, гэхдээ одоо гурав дахь хуулийг санаатайгаар зөрчиж байна). 40 тогтвортой FPS нь бидний тааралдсан гироскоптой ямар ч төхөөрөмжийг өгдөг. Бүх хууль тогтоомжийг мэдээгүй, анхааралдаа авалгүйгээр гүйцэтгэл нь зөөлөн хэлэхэд хангалтгүй, утас хэт халсан. Тиймээс би 2D физикт зориулсан өөрийн энгийн тусгай хөдөлгүүр бичихийг бодсон. Аз болоход, Unity дахь физик нь бүх асуудлыг тойрч гарахад хангалттай уян хатан болсон. өвөрмөц тоглоом, энэ нь ердөө хоёр долоо хоног туршилт хийхэд хангалттай байсан.

    Одоо Unity физикийн хөдөлгүүрийн бүх гол бэрхшээлийг мэдэж байгаа тул та ядуу гурван оюутны хүсэл мөрөөдөл, амьдрал, хүн төрөлхтөнд итгэх итгэлийг устгаж, бидний тоглоомыг хурдан хувилах боломжтой. Энэхүү нийтлэл нь танд ирээдүйд маш их цаг хугацаа хэмнэж, таны төслүүдэд бүтээмжтэй физикийн хуулиудыг тийм ч тодорхой бус зөрчлийг олоход тусална гэж найдаж байна.

    Та энгийн бөгөөд ойлгомжтой хэрэгсэл ашиглаж байсан ч баримт бичгийг уншиж, туршилт хийж болно.



    Төслийг дэмжээрэй - холбоосыг хуваалцаарай, баярлалаа!
    Мөн уншина уу
    тахиа зодооны тоглоомын дүрэм тахиа зодооны тоглоомын дүрэм Minecraft 1.7-д зориулсан 10 цагны жор.  Minecraft дээр гар урлалын зүйл хийх жор.  Minecraft дахь зэвсэг Minecraft 1.7-д зориулсан 10 цагны жор. Minecraft дээр гар урлалын зүйл хийх жор. Minecraft дахь зэвсэг Шиллинг ба стерлинг - үгсийн гарал үүсэл Шиллинг ба стерлинг - үгсийн гарал үүсэл