рдПрдХрддрд╛ рдкрд░ рдореЗрд╖реЛрдВ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рд╣реЗрд░рдлреЗрд░

рдЫрд╡рд┐

рдЦреЗрд▓ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдордВрдЪ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХрддрд╛ рдХреЗ рдлрд╛рдпрджреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЗрд╕рдХрд╛ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА 3 рдбреА рдЗрдВрдЬрди рд╣реИред рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рдЖрдк 3D рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдФрд░ рдореЗрд╢ рд╣реЗрд░рдлреЗрд░ рдХреА рджреБрдирд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗрдВрдЧреЗред

рдЖрднрд╛рд╕реА рдФрд░ рд╕рдВрд╡рд░реНрдзрд┐рдд рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ (рд╡реАрдЖрд░ / рдПрдЖрд░) рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдХрд╛рд░рдг, рдЕрдзрд┐рдХрд╛рдВрд╢ рдбреЗрд╡рд▓рдкрд░реНрд╕ 3 рдбреА-рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреА рдЬрдЯрд┐рд▓ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЛ рдЙрдирдХреЗ рд▓рд┐рдП рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рд╣реЛрдиреЗ рджреЗрдВред рдЪрд┐рдВрддрд╛ рдордд рдХрд░реЛ, рдХреЛрдИ рдЬрдЯрд┐рд▓ 3 рдбреА рдЧрдгрд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ - рдХреЗрд╡рд▓ рджрд┐рд▓, рдЪрд┐рддреНрд░, рддреАрд░ рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реА рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ!

рдиреЛрдЯ: рдпрд╣ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдПрдХрддрд╛ рдЖрдИрдбреАрдИ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ рдФрд░ C # рдореЗрдВ рдХреБрдЫ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЕрдиреБрднрд╡ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрд╕рд╛ рдЬреНрдЮрд╛рди рдирд╣реАрдВ рд╣реИ, рддреЛ рдкрд╣рд▓реЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдЗрдВрдЯреНрд░реЛрдбрдХреНрд╢рди рдЯреВ рдпреВрдирд┐рдЯреА рдпреВрдЖрдИ рдФрд░ рдЗрдВрдЯреНрд░реЛрдбрдХреНрд╢рди рдЯреВ рдпреВрдирд┐рдЯреА рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░реЗрдВред

рдЖрдкрдХреЛ 2017.3.1 рд╕реЗ рдХрдо рдирд╣реАрдВ рдПрдХрддрд╛ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдПрдХрддрд╛ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдпрд╣ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдПрдХ рдХрд╕реНрдЯрдо рд╕рдВрдкрд╛рджрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдк рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдПрдХрддрд╛ рд╕рдВрдкрд╛рджрдХ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ред

рдХрд╛рдо рдкрд░ рд▓рдЧрдирд╛


рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, 3 рдбреА-рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рдореВрд▓ рд╢рдмреНрджреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдВ, рдЬреЛ рдЖрдкрдХреЛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

3 рдбреА рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреА рдмреБрдирд┐рдпрд╛рджреА рддрдХрдиреАрдХреА рд╢рд░реНрддреЗрдВ:

  • рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ : рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ 3 рдбреА рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдПрдХ рдмрд┐рдВрджреБ рд╣реИред
  • рдореЗрд╖ : рдореЙрдбрд▓ рдХреЗ рд╕рднреА рдХреЛрдиреЗ, рдХрд┐рдирд╛рд░реЗ, рддреНрд░рд┐рдХреЛрдг, рдорд╛рдирджрдВрдб рдФрд░ рдпреВрд╡реА рдбреЗрдЯрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
  • рдореЗрд╢ рдлрд┐рд▓реНрдЯрд░ : рд╕реНрдЯреЛрд░ рдореЙрдбрд▓ рдореЗрд╢ рдбреЗрдЯрд╛ред
  • рдореЗрд╖ рд░реЗрдВрдбрд░рд░ : рджреГрд╢реНрдп рдореЗрдВ рдореЗрд╖ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред
  • рдорд╛рдирджрдВрдб : рдПрдХ рд╢реАрд░реНрд╖ рдпрд╛ рд╕рддрд╣ рдХреЗ рд╡реЗрдХреНрдЯрд░ред рдпрд╣ рдЬрд╛рд╡рдХ рдХреА рд╕рддрд╣ рдХреЗ рд▓рд┐рдП рд▓рдВрдмрд╡рдд рдирд┐рд░реНрджреЗрд╢рд┐рдд рд╣реИред
  • рд▓рд╛рдЗрдиреНрд╕ / рдХрд┐рдирд╛рд░рд╛ : рдЕрджреГрд╢реНрдп рд░реЗрдЦрд╛рдПрдБ рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ рдХреЛрдиреЗ рдЬреЛрдбрд╝рддреА рд╣реИрдВред
  • рддреНрд░рд┐рдХреЛрдг : рддреАрди рдЪреЛрдЯрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ред
  • рдпреВрд╡реА рдорд╛рдирдЪрд┐рддреНрд░ : рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рд╕рдВрд▓рдЧреНрди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдирд╛рд╡рдЯ рдФрд░ рд░рдВрдЧ рдмрдирд╛рддрд╛ рд╣реИред

рдПрдХ 3D рд╡рд╕реНрддреБ рдХреА рд╢рд╛рд░реАрд░рд┐рдХ рд░рдЪрдирд╛ рдЗрд╕рдХреА рдЬрд╛рд▓реА рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рдЗрд╕ рдЬрд╛рд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЗрд╕рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЗрди рд░реЗрдЦрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реА рдЕрджреГрд╢реНрдп рд░реЗрдЦрд╛рдПрдБ рддреНрд░рд┐рднреБрдЬ рдмрдирд╛рддреА рд╣реИрдВ рдЬреЛ рд╡рд╕реНрддреБ рдХреЗ рдореВрд▓ рдЖрдХрд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИрдВред


рдлрд┐рд░ рдорд╛рдирджрдВрдбреЛрдВ рдФрд░ рдпреВрд╡реА рдбреЗрдЯрд╛ рдиреЗ рдЫрд╛рдпрд╛рдВрдХрди, рд░рдВрдЧ рдФрд░ рдмрдирд╛рд╡рдЯ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ред рдореЗрд╖ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдЬрд╛рд▓ рдлрд┐рд▓реНрдЯрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдореЗрд╖ рд░реЗрдВрдбрд░рд░ рдЗрд╕ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рджреГрд╢реНрдп рдореЗрдВ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИред

рдпрд╣реА рд╣реИ, рдПрдХ 3D рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЫрджреНрдордХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

  • "MyMesh" рдирд╛рдордХ рдПрдХ рдирдпрд╛ рдЬрд╛рд▓ рдмрдирд╛рдПрдВред
  • MyMesh рдХреЗ рдХреЛрдиреЗ рдФрд░ рддреНрд░рд┐рдХреЛрдг рдХреЗ рдЧреБрдгреЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рдЬреЛрдбрд╝реЗрдВред
  • "MyMeshFilter" рдирд╛рдордХ рдПрдХ рдирдпрд╛ рдореЗрд╖ рдлрд╝рд┐рд▓реНрдЯрд░ рдмрдирд╛рдПрдВред
  • рдореЗрд╖ рд╕рдВрдкрддреНрддрд┐ myMesh рдХреЗ рд▓рд┐рдП MyMeshFilter рд╕реЗрдЯ рдХрд░реЗрдВред

рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдореВрд▓ рдмрд╛рддреЗрдВ рдХрд░рдиреЗ рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ, рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдирдЬрд╝рд┐рдк рдХрд░реЗрдВ рдФрд░ рдпреВрдирд┐рдЯреА рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╡рд░реНрдХрдкреАрд╕ рдХреЛ рдЪрд▓рд╛рдПрдВред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдлрд╝реЛрд▓реНрдбрд░ рд╕рдВрд░рдЪрдирд╛ рджреЗрдЦреЗрдВ:


рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг:

  • рдкреНрд░реАрдлрд╝реИрдмреНрд╕ : рдЗрд╕рдореЗрдВ рд╕реНрдлреАрдпрд░ рдкреНрд░реАрдлрд╝реИрдм рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди 3 рдбреА рдореЗрд╖ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
  • рджреГрд╢реНрдп : рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рддреАрди рджреГрд╢реНрдп рд╣реИрдВред
  • рд╕рдВрдкрд╛рджрдХ : рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣рдореЗрдВ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рд╕реБрдкрд░-рдлреАрдЪрд░реНрд╕ рджреЗрддреА рд╣реИрдВ рдЬреЛ рд╣рдо рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
  • рд▓рд┐рдкрд┐рдпреЛрдВ : рдпрд╣рд╛рдВ рд░рди-рдЯрд╛рдЗрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИрдВ рдЬреЛ рдЧреЗрдордСрдмрдЬреЗрдХреНрдЯ рд╕реЗ рдЬреБрдбрд╝реА рд╣реИрдВ рдФрд░ рдЬрдм рдЖрдк рдкреНрд▓реЗ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред
  • рд╕рд╛рдордЧреНрд░реА : рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рд▓реА рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рд╣реИред

рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдПрдХ 3 рдбреА рдореЗрд╖ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рд╕рдВрдкрд╛рджрдХ рдмрдирд╛рдПрдВрдЧреЗред

рдХрд╕реНрдЯрдо рд╕рдВрдкрд╛рджрдХ рдХреЗ рд╕рд╛рде рдореЗрд╖ рдмрджрд▓реЗрдВ


рдкрд░реНрджреЗ рдХреЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд 01 рдореЗрд╖ рдЕрдзреНрдпрдпрди рдбреЗрдореЛ рдЦреЛрд▓реЗрдВред рджреГрд╢реНрдп рд╡рд┐рдВрдбреЛ рдореЗрдВ, рдЖрдкрдХреЛ рдПрдХ 3D рдШрди рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:


рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдореЗрд╖ рдореЗрдВ рдЖрдПрдВ, рдХрд╕реНрдЯрдо рд╕рдВрдкрд╛рджрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдПрдХ рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВред

рдПрдХ рд╕рдВрдкрд╛рджрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рд╕рдВрдкрд╛рджрди


рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд┐рдВрдбреЛ рдореЗрдВ рд╕рдВрдкрд╛рджрдХ рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рд╕рдВрдкрд╛рджрдХ (рд╕рдВрдкрд╛рджрдХ) рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдмрд┐рд▓реНрдб рдореЛрдб рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред


MeshInspector.cs рдЦреЛрд▓реЗрдВ рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб рджреЗрдЦреЗрдВред рд╕рднреА рд╕рдВрдкрд╛рджрдХ рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ Editor рд╡рд░реНрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдХреА CustomEditor рд╡рд┐рд╢реЗрд╖рддрд╛ Editor рд╡рд░реНрдЧ рдХреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБ рд╣реИред OnSceneGUI() рдПрдХ рдШрдЯрдирд╛ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рджреГрд╢реНрдп рд╡рд┐рдВрдбреЛ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ; OnInspectorGUI() рдЖрдкрдХреЛ рдирд┐рд░реАрдХреНрд╖рдХ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд GUI рддрддреНрд╡ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

MeshInspector.cs рдореЗрдВ, MeshInspector рд╡рд░реНрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ MeshInspector рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:

 [CustomEditor(typeof(MeshStudy))] 

рдХреЛрдб рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг: CustomEditor рд╡рд┐рд╢реЗрд╖рддрд╛ рдПрдХрддрд╛ рдХреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдХрд╕реНрдЯрдо рд╕рдВрдкрд╛рджрдХ рд╡рд░реНрдЧ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

OnSceneGUI() рд╕реЗ рдкрд╣рд▓реЗ EditMesh() рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:

 mesh = target as MeshStudy; Debug.Log("Custom editor is running"); 

рдХреЛрдб рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг: Editor рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рдорд╛рдирдХ target рдЪрд░ рд╣реИред рдпрд╣рд╛рдБ, target MeshStudy рд░реВрдкрд╛рдВрддрд░рдг рд╣реИред рдЕрдм рдХрд╕реНрдЯрдо рдПрдбрд┐рдЯрд░ рджреГрд╢реНрдп рд╡рд┐рдВрдбреЛ рдореЗрдВ рд╕рднреА GameObjects рдФрд░ рдЙрдирд╕реЗ рдЬреБрдбрд╝реА MeshStudy.cs рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдЧрд╛ред рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЖрдк рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд╕реНрдЯрдо рд╕рдВрдкрд╛рджрдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИред

рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдПрдХрддрд╛ рдкрд░ рд▓реМрдЯреЗрдВред рд▓рд┐рдкрд┐рдпреЛрдВ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рдУ рдФрд░ рдЗрд╕реЗ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Hierarchy рдореЗрдВ GameObject Cube рдкрд░ MeshStudy.cs рдХреЛ рдЦреАрдВрдЪреЗрдВред


рдЕрдм рд╕рдВрджреЗрд╢ "рдХрд╕реНрдЯрдо рд╕рдВрдкрд╛рджрдХ рдЪрд▓ рд░рд╣рд╛ рд╣реИ" рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдордиреЗ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд┐рдпрд╛ рд╣реИ! рдЖрдк рдбрд┐рдмрдЧ рд╕рдВрджреЗрд╢ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рд╣рдореЗрдВ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкрд░реЗрд╢рд╛рди рди рдХрд░реЗред

рдХреНрд▓реЛрдирд┐рдВрдЧ рдФрд░ рдореЗрд╖ рдбрдВрдкрд┐рдВрдЧ


рдХрд╕реНрдЯрдо рдПрдбрд┐рдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдбрд┐рдЯ рдореЛрдб рдореЗрдВ 3 рдбреА рдореЗрд╖ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдпреВрдирд┐рдЯреА рдореЗрд╖ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВред рдРрд╕рд╛ рд╣реЛрдиреЗ рдкрд░ рдЖрдкрдХреЛ рдПрдХрддрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдореВрд▓ рд░реВрдк рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдЬрд╛рд▓ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХреНрд▓реЛрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, MeshFilter.sharedmesh рд╕рдВрдкрддреНрддрд┐ рд╕реЗ рдЬрд╛рд▓ рдХреА рдПрдХ рдкреНрд░рддрд┐ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЬрд╛рд▓ рдлрд╝рд┐рд▓реНрдЯрд░ рдкрд░ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЛрдб рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ MeshStudy.cs рдкрд░ рдбрдмрд▓-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ MonoBehaviour рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ Start() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдВрдкрд╛рджрди рдореЛрдб рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

MeshStudy.cs рдореЗрдВ, MeshStudy рдХреНрд▓рд╛рд╕ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ MeshStudy рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:

 [ExecuteInEditMode] 

рдХреЛрдб рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛: рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, Start() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреНрд▓реЗ рдореЛрдб рдФрд░ рдПрдбрд┐рдЯ рдореЛрдб рджреЛрдиреЛрдВ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрдм рд╣рдо рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдореЗрд╖ рд╡рд╕реНрддреБ рдХреЛ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХреНрд▓реЛрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

InitMesh() рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:

 oMeshFilter = GetComponent<MeshFilter>(); oMesh = oMeshFilter.sharedMesh; //1 cMesh = new Mesh(); //2 cMesh.name = "clone"; cMesh.vertices = oMesh.vertices; cMesh.triangles = oMesh.triangles; cMesh.normals = oMesh.normals; cMesh.uv = oMesh.uv; oMeshFilter.mesh = cMesh; //3 vertices = cMesh.vertices; //4 triangles = cMesh.triangles; isCloned = true; Debug.Log("Init & Cloned"); 

рдХреЛрдб рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:

  1. MeshFilter рдШрдЯрдХ рд╕реЗ рдореВрд▓ oMesh рдореЗрд╖ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
  2. рдПрдХ рдирдП рдЬрд╛рд▓ cMesh рд▓рд┐рдП рдХреЙрдкреА рдХрд░реЗрдВред
  3. рдлрд┐рд░ рд╕реЗ рдХреЙрдкреА рдХрд┐рдП рдЧрдП рдЬрд╛рд▓реАрджрд╛рд░ рдЬрд╛рд▓реА рдлрд┐рд▓реНрдЯрд░ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рддрд╛ рд╣реИред
  4. рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдЕрджреНрдпрддрди рдХрд░рддрд╛ рд╣реИред

рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдПрдХрддрд╛ рдкрд░ рд▓реМрдЯреЗрдВред рд╕рдВрджреЗрд╢ "Init & Cloned" рдбрд┐рдмрдЧ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ GameObject Cube рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдореЗрдВ рдЗрд╕рдХреЗ рдЧреБрдгреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред рдореЗрд╖ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдПрдХ рдореЗрд╖ рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рдХреНрд▓реЛрди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдордиреЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдореЗрд╖ рдХреЛ рдХреНрд▓реЛрди рдХрд░ рджрд┐рдпрд╛ рд╣реИред


рд╕рдВрдкрд╛рджрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ, MeshInspector.cs рдкрд░ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░реЗрдВред OnInspectorGUI() , рдХреЛрдб рдХреА рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рдХреЗ рдмрд╛рдж, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:

 if (GUILayout.Button("Reset")) //1 { mesh.Reset(); //2 } 

рдХреЛрдб рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:

  1. рдпрд╣ рдХреЛрдб рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдореЗрдВ рдПрдХ рд░реАрд╕реЗрдЯ рдмрдЯрди рдЦреАрдВрдЪрддрд╛ рд╣реИред
  2. рдЬрдм рджрдмрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдореЗрд╢рд╕реНрдЯреНрдпреВрдбреА.рдХреЗ рдореЗрдВ Reset() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ ред

рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╣реЗрдЬреЗрдВ, MeshStudy.cs рдЦреЛрд▓реЗрдВ рдФрд░ рдирд┐рдореНрди рдХреЛрдб рдХреЛ Reset() рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

 if (cMesh != null && oMesh != null) //1 { cMesh.vertices = oMesh.vertices; //2 cMesh.triangles = oMesh.triangles; cMesh.normals = oMesh.normals; cMesh.uv = oMesh.uv; oMeshFilter.mesh = cMesh; //3 vertices = cMesh.vertices; //4 triangles = cMesh.triangles; } 

рдХреЛрдб рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:

  1. рд╕реНрд░реЛрдд рдФрд░ рдХреНрд▓реЛрди рдЬрд╛рд▓ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХрд╛ рд╕рддреНрдпрд╛рдкрдиред
  2. рдореВрд▓ рдЬрд╛рд▓ рдореЗрдВ cMesh рд░реАрд╕реЗрдЯ рдХрд░реЗрдВред
  3. cMesh oMeshFilter рдХреЛ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯред
  4. рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдирд╛ред

рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдПрдХрддрд╛ рдкрд░ рд▓реМрдЯреЗрдВред рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдореЗрдВ, рдШрди рдЬрд╛рд▓ рдХреЛ рд╡рд┐рдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрд╕реНрдЯ рдПрдбрд┐рдЯ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ ред рдЗрд╕рдХреЗ рдмрд╛рдж, рд░реАрд╕реЗрдЯ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ; рдХреНрдпреВрдм рдХреЛ рдЕрдкрдиреЗ рдореВрд▓ рд░реВрдк рдореЗрдВ рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рд┐рдПред


рдПрдХрддрд╛ рдореЗрдВ рдХреЛрдиреЗ рдФрд░ рддреНрд░рд┐рдХреЛрдг рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛


рдПрдХ рдЬрд╛рд▓реА рдореЗрдВ рдХрд┐рдирд╛рд░реЛрдВ рд╕реЗ рдЬреБрдбрд╝реЗ рдХреЛрдиреЗ рд╣реЛрддреЗ рд╣реИрдВред рддреНрд░рд┐рдХреЛрдг рд╡рд╕реНрддреБ рдХреЗ рдореВрд▓ рдЖрдХрд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдореЗрд╖ рд╡рд░реНрдЧ:

  • Vector3 рдХреЛ Vector3 рдорд╛рдиреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рддреНрд░рд┐рдХреЛрдгреЛрдВ рдХреЛ рд╡рд░реНрдЯреЗрдХреНрд╕ рд╕рд░рдгреА рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрд░реНрдерд╛рддреН, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХреНрд╡рд╛рдб рдЬрд╛рд▓ рдореЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдЪрд╛рд░ рдХреЛрдиреЗ рдФрд░ рджреЛ рддреНрд░рд┐рдХреЛрдг рд╣реЛрддреЗ рд╣реИрдВ, рдореЗрд╖ рдбреЗрдЯрд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:


рд╡рд░реНрдЯреЗрдХреНрд╕ рдореИрдкрд┐рдВрдЧ


рдпрд╣рд╛рдВ рд╣рдо рдХреНрдпреВрдм рдХреЗ рдХреЛрдиреЗ рдХреЛ рдиреАрд▓реЗ рдбреЙрдЯреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

MeshInspector.cs рдореЗрдВ рд╣рдо EditMesh() рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ EditMesh() рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВрдЧреЗ:

 handleTransform = mesh.transform; //1 handleRotation = Tools.pivotRotation == PivotRotation.Local ? handleTransform.rotation : Quaternion.identity; //2 for (int i = 0; i < mesh.vertices.Length; i++) //3 { ShowPoint(i); } 

рдХреЛрдб рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:

  1. handleTransform mesh рд╕реЗ рд░реВрдкрд╛рдВрддрд░рдг рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
  2. handleRotation рдХреЛ рд╡рд░реНрддрдорд╛рди рдЬреЛрдбрд╝ рдХрд╛ рд░реЛрдЯреЗрд╢рди рдореЛрдб рдорд┐рд▓рддрд╛ рд╣реИред
  3. рдЬрд╛рд▓ рдХреЗ рдХреЛрдиреЗ рдХреЛ ShowPoint() рдФрд░ ShowPoint() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд┐рдВрджреБрдУрдВ рдХреЛ ShowPoint() ред

ShowPoint() рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, //draw dot рдХрдореЗрдВрдЯ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:

 Vector3 point = handleTransform.TransformPoint(mesh.vertices[index]); 

рдХреЛрдб рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг: рдпрд╣ рд░реЗрдЦрд╛ рд╡рд░реНрдЯреЗрдХреНрд╕ рдХреА рд╕реНрдерд╛рдиреАрдп рд╕реНрдерд┐рддрд┐ рдХреЛ рд╡рд┐рд╢реНрд╡ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдПрдХ рд╕рдордиреНрд╡рдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреА рд╣реИред

рдЙрд╕реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, if рдмреНрд▓реЙрдХ рдореЗрдВ, рдХреЛрдб рдХреА рд▓рд╛рдЗрди рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдмрд╕ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдирд┐рдореНрди рдЬреЛрдбрд╝реЗрдВ:

 Handles.color = Color.blue; point = Handles.FreeMoveHandle(point, handleRotation, mesh.handleSize, Vector3.zero, Handles.DotHandleCap); 

рдХреЛрдб рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:

  1. Handles рд╣реЗрд▓реНрдкрд░ рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдмрд┐рдВрджреБ рдХрд╛ рд░рдВрдЧ, рдЖрдХрд╛рд░ рдФрд░ рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
  2. Handles.FreeMoveHandle() рдПрдХ рдЕрд╕реАрдорд┐рдд рдЧрддрд┐ рдореИрдирд┐рдкреНрдпреБрд▓реЗрдЯрд░ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк рдСрдкрд░реЗрд╢рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред

рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдПрдХрддрд╛ рдкрд░ рд▓реМрдЯреЗрдВред рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдореЗрдВ рдШрди рд╕рдВрдкрддреНрддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдореВрд╡ рд╡рд░реНрдЯреЗрдХреНрд╕ рдкреЙрдЗрдВрдЯ рд╡рд┐рдХрд▓реНрдк рд╕рдХреНрд╖рдо рд╣реИред рдЕрдм рдЖрдкрдХреЛ рдпрд╣ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕реНрдХреНрд░реАрди рдкрд░ рдЬрд╛рд▓реА рдХрдИ рдиреАрд▓реЗ рдбреЙрдЯреНрд╕ рд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рд╣реИред рдпрд╣рд╛рдБ рд╡реЗ рд╣реИрдВ - рдШрди рдЬрд╛рд▓ рдХреЗ рд╕рдмрд╕реЗ рдКрдкрд░! рдЕрдиреНрдп 3D рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦреЗрдВред


рдПрдХ рд╣реА рд╢реАрд░реНрд╖ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ


рдЪрд▓реЛ рдЬрд╛рд▓ рдХреЛ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЪрд░рдг рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ - рдПрдХ рдПрдХрд▓ рд╢реАрд░реНрд╖ рдкрд░ рдЬрд╛рдирд╛ред

MeshInspector.cs рдкрд░ рдЬрд╛рдПрдВред ShowPoint() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░, //drag рдЯрд┐рдкреНрдкрдгреА рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдФрд░ if рдмреНрд▓реЙрдХ рдХреЗ рд╕рдорд╛рдкрди рдХреЛрд╖реНрдардХ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:

 if (GUI.changed) //1 { mesh.DoAction(index, handleTransform.InverseTransformPoint(point)); //2 } 

рдХреЛрдб рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:

  1. GUI.changed рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рд╛рде рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдбреНрд░реИрдЧ рдФрд░ рдбреНрд░реЙрдк рдСрдкрд░реЗрд╢рди рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП Handles.FreeMoveHandle() рд╕рд╛рде рдорд┐рд▓рдХрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
  2. mesh.DoAction() рдХрд░рдиреЗ mesh.DoAction() рд╢реАрд░реНрд╖ рдХреЗ рд▓рд┐рдП, mesh.DoAction() рдлрд╝рдВрдХреНрд╢рди рдЕрдкрдиреЗ рдЗрдВрдбреЗрдХреНрд╕ рдФрд░ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рдорд╛рдиреЛрдВ рдХреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рд╡рд░реНрдЯреЗрдХреНрд╕ рдХреЗ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо рдорд╛рди рд╡рд┐рд╢реНрд╡ рд╕реНрдерд╛рди рдореЗрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрдиреНрд╣реЗрдВ InverseTransformPoint() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдиреАрдп рд╕реНрдерд╛рди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ MeshStudy.cs рдкрд░ рдЬрд╛рдПрдВ ред DoAction() , рдХреЛрд╖реНрдардХ рдЦреЛрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:

 PullOneVertex(index, localPos); 

рдлрд┐рд░ PullOneVertex() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:

 vertices[index] = newPos; //1 cMesh.vertices = vertices; //2 cMesh.RecalculateNormals(); //3 

рдХреЛрдб рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:

  1. рд╣рдо рдорд╛рди newPos рд╕рд╛рде рд▓рдХреНрд╖реНрдп рд╢реАрд░реНрд╖ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рддреЗ рд╣реИрдВред
  2. рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рд╢реАрд░реНрд╖ рдорд╛рдиреЛрдВ рдХреЛ cMesh.vertices рд╡рд╛рдкрд╕ cMesh.vertices ред
  3. RecalculateNormals() рдореЗрд╖ рдХреЛ рдкреБрдирд░реНрдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬрд╛рд▓ рдХреЛ рд▓рд╛рд▓ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реЛред

рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдПрдХрддрд╛ рдкрд░ рд▓реМрдЯреЗрдВред рдХреНрдпреВрдм рдкрд░ рдЕрдВрдХ рдЦреАрдВрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ; рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЯреВрдЯреА рд╣реБрдИ рдЬрд╛рд▓реА рджрд┐рдЦрд╛рдИ рджреА?


рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдХреЛрдиреЗ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рд╕рдорд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рдХреЛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рд╢реЗрд╖ рдХреЛрдиреЗ рдЗрд╕рдХреЗ рдкреАрдЫреЗ рд░рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдореЗрд╖ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░реЗрдВрдЧреЗред

рд╕рднреА рд╕рдорд╛рди рдХреЛрдиреЗ рдвреВрдБрдврдирд╛


рдиреЗрддреНрд░рд╣реАрди, рдПрдХ рдШрди рдЬрд╛рд▓ рдореЗрдВ рдЖрда рдХреЛрдиреЗ, рдЫрд╣ рдкрдХреНрд╖ рдФрд░ 12 рддреНрд░рд┐рдХреЛрдг рд╣реЛрддреЗ рд╣реИрдВред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдРрд╕рд╛ рд╣реИред


MeshStudy.cs рдЦреЛрд▓реЗрдВ, Start() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рдордиреЗ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ рдФрд░ рд╡рд░реНрдЯрд┐рд╕ рд╡реЗрд░рд┐рдПрдмрд▓ рдвреВрдВрдвреЗрдВред рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЦреЗрдВрдЧреЗ:

 [HideInInspector] public Vector3[] vertices; 

рдХреЛрдб рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг: [HideInInspector] рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рд╡рд┐рдВрдбреЛ рд╕реЗ рдПрдХ рд╕рд╛рдЭрд╛ рдЪрд░ рдЫреБрдкрд╛рддрд╛ рд╣реИред

рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВ:

 //[HideInInspector] public Vector3[] vertices; 

рдзреНрдпрд╛рди рджреЗрдВ: рд╡рд░реНрдЯреЗрдХреНрд╕ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ 3 рдбреА рдореЗрд╖ рдХреЗ рд╕рд╛рде [HideInInspector] рдорджрдж рдорд┐рд▓рддреА рд╣реИред рдЪреВрдВрдХрд┐ рд╡рд░реНрдЯреЗрдХреНрд╕ рд╕рд░рдгреА рдХрд╛ рдЖрдХрд╛рд░ рд╣рдЬрд╛рд░реЛрдВ рддрддреНрд╡реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд╕реЗ рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдореЗрдВ рд╕рд░рдгреА рдорд╛рди рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдкрд░ рдПрдХрддрд╛ рдХрд╛ рдирд┐рд╖реЗрдз рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдПрдХрддрд╛ рдкрд░ рд▓реМрдЯреЗрдВред рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдХреЗ рдкрд╛рд╕ рдЬрд╛рдУред рдЕрдм, рдореЗрд╖ рдЕрдзреНрдпрдпрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдШрдЯрдХ рдХреЗ рддрд╣рдд, рдХреЛрдиреЗ рдХреА рд╕рдВрдкрддреНрддрд┐ рджрд┐рдЦрд╛рдИ рджреА рд╣реИред рдЗрд╕рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рддреАрд░ рдЖрдЗрдХрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ; рддреЛ рдЖрдк Vector3 рддрддреНрд╡реЛрдВ Vector3 рд╕рд░рдгреА рдХрд╛ Vector3 рд╣реИрдВред


рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рд░рдгреА рдХрд╛ рдЖрдХрд╛рд░ 24 рд╣реИ, рдЕрд░реНрдерд╛рддреН, рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐ рд╡рд╛рд▓реЗ рдХреЛрдиреЗ рд╣реИрдВ! рдЬрд╛рд░реА рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, [HideInInspector] ред

24 рдХреЛрдиреЗ рдХреНрдпреЛрдВ рд╣реИрдВ?
рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдХрдИ рд╕рд┐рджреНрдзрд╛рдВрдд рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрддреНрддрд░ рдпрд╣ рд╣реИ: рдХреНрдпреВрдм рдХреЗ рдЫрд╣ рдкрдХреНрд╖ рд╣реИрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрдХреНрд╖ рдПрдХ рд╡рд┐рдорд╛рди рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рдЪрд╛рд░ рдХреЛрдиреЗ рд╕реЗ рдмрдирд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП, рдЧрдгрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: 6 x 4 = 24 рдХреЛрдиреЗред

рдЖрдк рдЕрдиреНрдп рдЙрддреНрддрд░реЛрдВ рдХреА рдЦреЛрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрднреА рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЬрд╛рдирдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ рдХрд┐ рдХреБрдЫ рдореЗрд╖реЛрдВ рдореЗрдВ рд▓рдВрдмрд╡рдд рд╕реНрдерд┐рддрд┐ рд╣реЛрдЧреАред

MeshStudy.cs рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде DoAction() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рд╕рднреА рдХреЛрдб рдмрджрд▓реЗрдВ:

 PullSimilarVertices(index, localPos); 

рдЖрдЗрдП PullSimilarVertices() рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЬрд╛рдПрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:

 Vector3 targetVertexPos = vertices[index]; //1 List<int> relatedVertices = FindRelatedVertices(targetVertexPos, false); //2 foreach (int i in relatedVertices) //3 { vertices[i] = newPos; } cMesh.vertices = vertices; //4 cMesh.RecalculateNormals(); 

рдХреЛрдб рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:

  1. рд╣рдореЗрдВ рд▓рдХреНрд╖реНрдп рд╢реАрд░реНрд╖ рдХреА рд╕реНрдерд┐рддрд┐ рдорд┐рд▓рддреА рд╣реИ рдЬрд┐рд╕реЗ FindRelatedVertices() рд╡рд┐рдзрд┐ рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
  2. рдпрд╣ рд╡рд┐рдзрд┐ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ (рдЕрдиреБрд▓рдВрдмреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк) рдХреА рд╕реВрдЪреА рд▓реМрдЯрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд▓рдХреНрд╖реНрдп рд╢реАрд░реНрд╖ рдХреЗ рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐ рд╣реЛрддреА рд╣реИред
  3. рд▓реВрдк рдкреВрд░реА рд╕реВрдЪреА рдХрд╛ рдкрддрд╛ newPos рдФрд░ newPos рд▓рд┐рдП newPos рд╕реЗ newPos рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред
  4. cMesh.vertices рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП vertices рд╡рд╛рдкрд╕ cMesh.vertices ред рдлрд┐рд░ рд╣рдо рдирдП рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдореЗрд╖ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП RecalculateNormals() рдХрд╣рддреЗ рд╣реИрдВред

рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдПрдХрддрд╛ рдкрд░ рд▓реМрдЯреЗрдВред рдХрд┐рд╕реА рднреА рдХреЛрдиреЗ рдХреЛ рдЦреАрдВрдЪреЗрдВ; рдЕрдм рдЬрд╛рд▓реА рдХреЛ рдЕрдкрдирд╛ рдЖрдХрд╛рд░ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдврд╣рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред


рдЕрдм рдЬрдм рд╣рдордиреЗ рдореЗрд╢ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рдХрджрдо рдкреВрд░рд╛ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рддреЛ рджреГрд╢реНрдп рдХреЛ рдмрдЪрд╛рдПрдВ рдФрд░ рдЕрдЧрд▓реЗ рднрд╛рдЧ рдкрд░ рдЬрд╛рдПрдВред

рдореЗрд╖ рдХрд╛ рд╣реЗрд░рдлреЗрд░


рдЗрд╕ рдЦрдВрдб рдореЗрдВ, рдЖрдк рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдореЗрд╖реЛрдВ рдХреЗ рд╣реЗрд░рдлреЗрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗрдВрдЧреЗред рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рд╣рдо рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рдореЗрд╖ рд╣реЗрд░рдлреЗрд░ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗ, рдЕрд░реНрдерд╛рддреН рдкрд╣рд▓реЗ рдмрдирд╛рдП рдЧрдП рдореЗрд╖ рд╢реАрд░реНрд╖реЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ред

рдЪрдпрдирд┐рдд рдЕрдиреБрдХреНрд░рдорд┐рдд рдПрдХрддреНрд░рд┐рдд рдХрд░рдирд╛


рдЖрдЗрдП рдЙрди рд▓рдВрдмреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред

рджреГрд╢реНрдп 02 рдЦреЛрд▓реЗрдВ рджреГрд╢реНрдп рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рд╣рд╛рд░реНрдЯ рдореЗрд╖ рдмрдирд╛рдПрдБ ред рджреГрд╢реНрдп рд╡рд┐рдВрдбреЛ рдореЗрдВ, рдЖрдк рдПрдХ рд▓рд╛рд▓ рдХреНрд╖реЗрддреНрд░ рджреЗрдЦреЗрдВрдЧреЗред рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдкрд░ рдЬрд╛рдПрдВ ред рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╣рд╛рд░реНрдЯ рдореЗрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдШрдЯрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред

рдЕрдм рд╣рдореЗрдВ рджреГрд╢реНрдп рд╡рд┐рдВрдбреЛ рдореЗрдВ рдореЗрд╖ рдХреЗ рдХреЛрдиреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕рдВрдкрд╛рджрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рдВрдкрд╛рджрдХ рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ HeartMeshInspector.cs рдкрд░ рдбрдмрд▓-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред

ShowHandle() рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, if рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:

 Handles.color = Color.blue; if (Handles.Button(point, handleRotation, mesh.pickSize, mesh.pickSize, Handles.DotHandleCap)) //1 { mesh.selectedIndices.Add(index); //2 } 

рдХреЛрдб рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:

  1. рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ Handles.Button рд░реВрдк рдореЗрдВ рдореЗрд╖ рдХреЗ рдХреЛрдиреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред Handles.Button ред
  2. рдЬрдм рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЪрдпрдирд┐рдд рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ рджрдмрд╛рдпрд╛, mesh.selectedIndices ред

OnInspectorGUI() , рд╕рдорд╛рдкрди рдмреНрд░реИрдХреЗрдЯ рд╕реЗ рдкрд╣рд▓реЗ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:

 if (GUILayout.Button("Clear Selected Vertices")) { mesh.ClearAllData(); } 

рдХреЛрдб рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛: рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо mesh.ClearAllData() рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдХреЛ рдПрдХ рд░реАрд╕реЗрдЯ рдмрдЯрди рдХреИрд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ mesh.ClearAllData() ред

рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рд▓рд┐рдкрд┐рдпреЛрдВ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ HeartMesh.cs рдЦреЛрд▓реЗрдВред ClearAllData() рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:

 selectedIndices = new List<int>(); targetIndex = 0; targetVertex = Vector3.zero; 

рдХреЛрдб рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг: рдХреЛрдб targetIndex рдФрд░ targetIndex рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рд╛рдл рдХрд░рддрд╛ рд╣реИред рдпрд╣ targetVertex рднреА рд░реАрд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред

рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдПрдХрддрд╛ рдкрд░ рд▓реМрдЯреЗрдВред рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рд╣рд╛рд░реНрдЯрдореЗрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдкрд░ рдЬрд╛рдПрдВ ред рдЗрд╕рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдРрд░реЛ рдЖрдЗрдХрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдЪрдпрдирд┐рдд рдЗрдВрдбрд┐рд╕реЗрд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВред рдпрд╣ рд╣рдореЗрдВ рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рдЗрд╕рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рдЪреЗрдХрдмреЙрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдкрд╛рджрди рдореЛрдб рд╕рдХреНрд╖рдо рдХрд░реЗрдВ ред рдЗрд╕рдХреЗ рдХрд╛рд░рдг, рдЬрд╛рд▓реА рдХреЗ рдХреЛрдиреЗ рдХреЛ рджреГрд╢реНрдп рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЦреАрдВрдЪрд╛ рдЬрд╛рдПрдЧрд╛ред рдЪрдпрдирд┐рдд рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдореЗрдВ рдиреАрд▓реЗ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рд╕рднреА рдорд╛рдиреЛрдВ рдХреЛ рд╕рд╛рдл рдХрд░рддрд╛ рд╣реИ, рдХреНрд▓рд┐рдпрд░ рдЪрдпрдирд┐рдд рд╡рд░реНрдЯрд┐рд╕ рдмрдЯрди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред


рдиреЛрдЯ: рд╕рдВрд╢реЛрдзрд┐рдд рдХрд╕реНрдЯрдо рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдореЗрдВ , рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╢реЛ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо рд╣реИрдВрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо рдореИрдиреНрдпреВрд▓реЗрдЯрд░ рдХреЛ рджрд┐рдЦрд╛рдиреЗ / рдЫрд┐рдкрд╛рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдЕрдиреНрдп рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░ рдореИрдирд┐рдкреБрд▓реЗрдЯрд░ рдирд╣реАрдВ рдкрд╛рддреЗ рд╣реИрдВ рддреЛ рдШрдмрд░рд╛рдПрдБ рдирд╣реАрдВ! рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдЪрд╛рд▓реВ рдХрд░реЗрдВред

рдПрдХ рдЧреЛрд▓реЗ рдХреЛ рджрд┐рд▓ рдореЗрдВ рдмрджрд▓рдирд╛


рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдЬрд╛рд▓реА рдХреЗ рд╕рд┐рд░реЛрдВ рдХреЛ рдмрджрд▓рдирд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рддреАрди рдЪрд░рдгреЛрдВ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ:

  1. рд╡рд░реНрддрдорд╛рди рдореЗрд╖ рдХреЛрдиреЗ (рдПрдиреАрдореЗрд╢рди рд╕реЗ рдкрд╣рд▓реЗ) mVertices рдкрд░ mVertices ред
  2. mVertices рдЧрдгрдирд╛ mVertices рд╣реИрдВ рдФрд░ mVertices рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдХреЛ mVertices ред
  3. рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ рдмрджрд▓рддреЗ рд╕рдордп mVertices рд╕рд╛рде рд╡рд░реНрддрдорд╛рди рдореЗрд╖ рдХреЛрдиреЗ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ рдФрд░ рдПрдХрддрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ mVertices рдЧрдгрдирд╛ рдХрд░реЗрдВред

OpenMesh.cs рдЦреЛрд▓реЗрдВ рдФрд░ Start() рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рдореНрди рдЪрд░:

 public float radiusofeffect = 0.3f; //1 public float pullvalue = 0.3f; //2 public float duration = 1.2f; //3 int currentIndex = 0; //4 bool isAnimate = false; float starttime = 0f; float runtime = 0f; 

рдХреЛрдб рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:

  1. рд▓рдХреНрд╖реНрдп рд╢реАрд░реНрд╖ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХреНрд╖реЗрддреНрд░ рдХреА рддреНрд░рд┐рдЬреНрдпрд╛ред
  2. рдмрд▓ рдЦреАрдВрдЪреЗрдВред
  3. рдПрдиреАрдореЗрд╢рди рдХреА рдЕрд╡рдзрд┐ред
  4. selectedIndices рд╕реВрдЪреА рд╕реВрдЪреА рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕реВрдЪрдХрд╛рдВрдХред

if рдмреНрд▓реЙрдХ рд╕реЗ рдкрд╣рд▓реЗ Init() рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:

 currentIndex = 0; 

рдХреЛрдб рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛: рдЦреЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, currentIndex рдХреЛ 0 рдкрд░ currentIndex рдЬрд╛рддрд╛ рд╣реИ, selectedIndices рд╕реВрдЪреА рд╕реВрдЪреА рдХрд╛ рдкрд╣рд▓рд╛ рд╕реВрдЪрдХрд╛рдВрдХред

рдЙрд╕реА Init() рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, else рдмреНрд▓реЙрдХ рдХреЗ рд╕рдорд╛рдкрди рдмреНрд░реИрдХреЗрдЯ рд╕реЗ рдкрд╣рд▓реЗ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:

 StartDisplacement(); 

рдХреЛрдб рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг: StartDisplacement() рдлрд╝рдВрдХреНрд╢рди рдХреЛ isEditMode рдпрджрд┐ isEditMode рдЧрд▓рдд рд╣реИред

StartDisplacement() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:

 targetVertex = oVertices[selectedIndices[currentIndex]]; //1 starttime = Time.time; //2 isAnimate = true; 

рдХреЛрдб рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:

  1. рдПрдиреАрдореЗрд╢рди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП targetVertex рдЪреБрдиреЗрдВред
  2. рдкреНрд░рд╛рд░рдВрдн рд╕рдордп рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ isAnimate рдХреЗ рдорд╛рди рдХреЛ рд╕рд╣реА рдореЗрдВ рдмрджрд▓реЗрдВред

StartDisplacement() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рдж, StartDisplacement() рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рд╕рд╛рде FixedUpdate() рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВ:

 void FixedUpdate() //1 { if (!isAnimate) //2 { return; } runtime = Time.time - starttime; //3 if (runtime < duration) //4 { Vector3 targetVertexPos = oFilter.transform.InverseTransformPoint(targetVertex); DisplaceVertices(targetVertexPos, pullvalue, radiusofeffect); } else //5 { currentIndex++; if (currentIndex < selectedIndices.Count) //6 { StartDisplacement(); } else //7 { oMesh = GetComponent<MeshFilter>().mesh; isAnimate = false; isMeshReady = true; } } } 

рдХреЛрдб рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:

  1. FixedUpdate() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдПрдлрдкреАрдПрд╕ рд▓реВрдк рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  2. рдпрджрд┐ рдХреЛрдИ isAnimate рдЧрд▓рдд рд╣реИ, рддреЛ рдирд┐рдореНрди рдХреЛрдб рдЫреЛрдбрд╝реЗрдВред
  3. runtime рдПрдирд┐рдореЗрд╢рди рдмрджрд▓реЗрдВред
  4. рдпрджрд┐ runtime duration рднреАрддрд░ рд╣реИ, рддреЛ рд╣рдо targetVertex рдФрд░ targetVertex DisplaceVertices() рдХреЗ рд╡рд┐рд╢реНрд╡ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, pullvalue рдФрд░ radiusofeffect рд╕рд╛рде рд▓рдХреНрд╖реНрдп рд╢реАрд░реНрд╖ рдХреЛ рдХрд╡рд░ рдХрд░рддреЗ рд╣реИрдВред
  5. рдЕрдиреНрдпрдерд╛, рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИред currentIndex рдПрдХ рдЬреЛрдбрд╝реЗрдВред
  6. рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ currentIndex selectedIndices currentIndex ред StartDisplacement() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реВрдЪреА рдореЗрдВ рдЕрдЧрд▓реЗ рд╢реАрд░реНрд╖ рдкрд░ рдЬрд╛рдПрдВред
  7. рдЕрдиреНрдпрдерд╛, рд╕реВрдЪреА рдХреЗ рдЕрдВрдд рдореЗрдВ, oMesh рдбреЗрдЯрд╛ рдХреЛ рд╡рд░реНрддрдорд╛рди рдЬрд╛рд▓ рдореЗрдВ рдмрджрд▓ рджреЗрдВ рдФрд░ рдПрдиреАрдореЗрд╢рди рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рдХреЛ isAnimate ред

DisplaceVertices() рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:

 Vector3 currentVertexPos = Vector3.zero; float sqrRadius = radius * radius; //1 for (int i = 0; i < mVertices.Length; i++) //2 { currentVertexPos = mVertices[i]; float sqrMagnitute = (currentVertexPos - targetVertexPos).sqrMagnitude; //3 if (sqrMagnitute > sqrRadius) { continue; //4 } float distance = Mathf.Sqrt(sqrMagnitute); //5 float falloff = GaussFalloff(distance, radius); Vector3 translate = (currentVertexPos * force) * falloff; //6 translate.z = 0f; Quaternion rotation = Quaternion.Euler(translate); Matrix4x4 m = Matrix4x4.TRS(translate, rotation, Vector3.one); mVertices[i] = m.MultiplyPoint3x4(currentVertexPos); } oMesh.vertices = mVertices; //7 oMesh.RecalculateNormals(); 

рдХреЛрдб рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:

  1. рддреНрд░рд┐рдЬреНрдпрд╛ рдХрд╛ рд╡рд░реНрдЧред
  2. рд╣рдо рдЬрд╛рд▓ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реВрдк рдХрд░рддреЗ рд╣реИрдВред
  3. currentVertexPos рдФрд░ sqrMagnitude рдмреАрдЪ currentVertexPos sqrMagnitude ред
  4. рдпрджрд┐ sqrMagnitude рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рдЕрдЧрд▓реЗ рд╢реАрд░реНрд╖ рдкрд░ рдЬрд╛рдПрдВред
  5. рдЕрдиреНрдпрдерд╛, falloff рдорд╛рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ рдЬрд╛рд░реА рд░рдЦреЗрдВ, рдЬреЛ рдЧреБрдВрдЬрд╛рдЗрд╢ рдХреЗ рдХреЗрдВрджреНрд░ рдмрд┐рдВрджреБ рд╕реЗ рд╡рд░реНрддрдорд╛рди рд╢реАрд░реНрд╖ рдХреА distance рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
  6. рдирдИ Vector3 рд╕реНрдерд┐рддрд┐ Vector3 рдФрд░ рд╡рд░реНрддрдорд╛рди рд╢реАрд░реНрд╖ рдкрд░ рдЗрд╕рдХреЗ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВред
  7. рдЬрдм рдЖрдк рд▓реВрдк рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо mVertices рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд mVertices рдорд╛рдиреЛрдВ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдПрдХрддрд╛ рдХреЛ mVertices рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддреЗ рд╣реИрдВред

рдлрд╝реЙрд▓рдСрдлрд╝ рдЯреЗрдХреНрдиреЛрд▓реЙрдЬреА рдХрд╛ рд╕реНрд░реЛрдд
рдореВрд▓ рдлреЙрд░реНрдореВрд▓рд╛ рдкреНрд░реЛрд╕реАрдбреНрдпреВрд░рд▓ рдПрдЧреНрдЬрд╛рдо рдПрд╕реЗрдЯ рдкреИрдХреЗрдЬ рдлрд╛рдЗрд▓ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдпреВрдирд┐рдЯреА рдПрд╕реЗрдЯ рд╕реНрдЯреЛрд░ рд╕реЗ рдореБрдлреНрдд рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдПрдХрддрд╛ рдкрд░ рд▓реМрдЯреЗрдВред рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рд╣рд╛рд░реНрдЯрдореЗрд╢ рдШрдЯрдХ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдЪрдпрдирд┐рдд рд╕реВрдЪрдХ рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдХреБрдЫ рдХреЛрдиреЗ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдЕрдХреНрд╖рдо рдореЛрдб рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП Play рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред


рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЗрдбрд┐рдпрд╕реЛрдлреЗрдХреНрдЯ , рдкреБрд▓рд╡рд▓реНрдпреВ рдФрд░ рдЕрд╡рдзрд┐ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВред рдЬрдм рдЖрдк рддреИрдпрд╛рд░ рд╣реЛрдВ, рддреЛ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдмрджрд▓реЗрдВред


Play рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдХреНрд╖реЗрддреНрд░ рджрд┐рд▓ рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ?


рдмрдзрд╛рдИ! рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рднрд╡рд┐рд╖реНрдп рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░реАрдлрд╝реИрдм рдХреЗ рд░реВрдк рдореЗрдВ рдореЗрд╖ рдХреЛ рдмрдЪрд╛рдПрдВрдЧреЗред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдореЗрд╖ рдХреЛ рд╕рд╣реЗрдЬрдирд╛


рдкреНрд▓реЗ рдореЛрдб рдореЗрдВ рдПрдХ рджрд┐рд▓ рдХреЗ рдЖрдХрд╛рд░ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдЬрд╛рд▓ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдкреНрд░реАрдлреИрдм рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдмрдЪреНрдЪрд╛ рдПрдХ 3 рдбреА рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрдЧрд╛, рдФрд░ рдлрд┐рд░ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреА рдореЗрд╖ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдПрдХ рдирдП рдХреЗ рд╕рд╛рде рдмрджрд▓ рджреЗрдЧрд╛ред

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд┐рдВрдбреЛ рдореЗрдВ, Prefabs рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ CustomHeart рдЦреЛрдЬреЗрдВред рдЕрдкрдиреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдФрд░ рдмрд╛рд▓ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрд░ рдЖрдЗрдХрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЕрдм рдЖрдкрдХреЛ рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рд╡рд┐рдВрдбреЛ рдореЗрдВ рдПрдХ рдХреНрд╖реЗрддреНрд░ рд╡рд╕реНрддреБ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред рдпрд╣ рдкреНрд░реАрдлрд╝реИрдм рд╣реИ рдЬреЛ рдирдП рдЬрд╛рд▓ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛ред


OpenMeshInspector.cs рдЦреЛрд▓реЗрдВред рдмрдВрдж рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмреНрд░реИрдХреЗрдЯ рд╕реЗ рдкрд╣рд▓реЗ OnInspectorGUI() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:

 if (!mesh.isEditMode && mesh.isMeshReady) { string path = "Assets/Prefabs/CustomHeart.prefab"; //1 if (GUILayout.Button("Save Mesh")) { mesh.isMeshReady = false; Object pfObj = AssetDatabase.LoadAssetAtPath(path, typeof(GameObject)); //2 Object pfRef = AssetDatabase.LoadAssetAtPath (path, typeof(GameObject)); GameObject gameObj = (GameObject)PrefabUtility.InstantiatePrefab(pfObj); Mesh pfMesh = (Mesh)AssetDatabase.LoadAssetAtPath(path, typeof(Mesh)); //3 if (!pfMesh) { pfMesh = new Mesh(); } else { pfMesh.Clear(); } pfMesh = mesh.SaveMesh(); //4 AssetDatabase.AddObjectToAsset(pfMesh, path); gameObj.GetComponentInChildren<MeshFilter>().mesh = pfMesh; //5 PrefabUtility.ReplacePrefab(gameObj, pfRef, ReplacePrefabOptions.Default); //6 Object.DestroyImmediate(gameObj); //7 } } 

рдХреЛрдб рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:

  1. CustomHeart prefab рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП path рдХреЛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред
  2. CustomHeart prefab рд╕реЗ рджреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ, рдПрдХ рдЧреЗрдордСрдмрдЬреЗрдХреНрдЯ ( pfObj ) рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рджреВрд╕рд░рд╛ рд▓рд┐рдВрдХ ( pfRef ) рдХреЗ рд░реВрдк рдореЗрдВред
  3. CustomHeart рд╕реЗ pfMesh рдореЗрд╖ pfMesh рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдирд╣реАрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдирдпрд╛ рдЬрд╛рд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдпрд╣ рдореМрдЬреВрджрд╛ рдбреЗрдЯрд╛ рдХреЛ рд╕рд╛рдл рдХрд░рддрд╛ рд╣реИред
  4. рдирдП рдЬрд╛рд▓ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде pfMesh рдХреЛ pfMesh рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ CustomHeart рдХреЛ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
  5. gameObj рдореЗрдВ gameObj рдПрдХ рдореЗрд╖ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рднрд░рддрд╛ рд╣реИред
  6. рдкреВрд░реНрд╡-рдореМрдЬреВрджрд╛ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЗ рдорд┐рд▓рд╛рди gameObj рдЧреЗрдордСрдмреНрдЬ рдХреЗ рд╕рд╛рде gameObj рдЬрдЧрд╣ред
  7. рддреБрд░рдиреНрдд рдЦреЗрд▓ рдХреЛ рдирд╖реНрдЯ рдХрд░ рджреЗрддрд╛ рд╣реИред

рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ HeartMesh.cs рдкрд░ рдЬрд╛рдПрдВ ред рд╕рд╛рдорд╛рдиреНрдп SaveMesh() рд╡рд┐рдзрд┐ рдореЗрдВ, nMesh рдЖрд╡реГрддреНрддрд┐ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж nMesh рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:

 nMesh.name = "HeartMesh"; nMesh.vertices = oMesh.vertices; nMesh.triangles = oMesh.triangles; nMesh.normals = oMesh.normals; 

рдХреЛрдб рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг: рджрд┐рд▓ рдХреЗ рдЖрдХрд╛рд░ рдХреА рдЬрд╛рд▓реА рд╕реЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдореЗрд╖ рд╕рдВрдкрддреНрддрд┐ рджреЗрддрд╛ рд╣реИред

рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдПрдХрддрд╛ рдкрд░ рд▓реМрдЯреЗрдВред Play рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдПрдиреАрдореЗрд╢рди рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдореЗрдВ рд╕реЗрд╡ рдореЗрд╢ рдмрдЯрди рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдирдП рдЬрд╛рд▓ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рд░реЛрдХреЗрдВред

Prefabs рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рдПрдВ рдФрд░ CustomHeart prefab рдХреЛ рджреЗрдЦреЗрдВ ред рдЖрдкрдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЕрдм CustomHeart prefab рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдпрд╛ рджрд┐рд▓ рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдореЗрд╖ рд╣реИред


рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо!

рдпрд╣ рд╕рдм рдПрдХ рд╕рд╛рде рд░рдЦрдирд╛


рдкрд┐рдЫрд▓реЗ рджреГрд╢реНрдп рдореЗрдВ, DisplaceVertices() рдлрд╝рдВрдХреНрд╢рди рдиреЗ рдбреНрд░реИрдЧ рдлреЛрд░реНрд╕ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реЙрд▓рдСрдлрд╝ рдлреЙрд░реНрдореВрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ рдЬреЛ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рддреНрд░рд┐рдЬреНрдпрд╛ рдХреЗ рднреАрддрд░ рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред "рдлреЙрд▓ рдСрдл" рдХреА рдмрд╛рдд, рдЬрд┐рд╕ рдкрд░ рдбреНрд░реИрдЧ рдлреЛрд░реНрд╕ рдХрдо рд╣реЛрдирд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдлреЙрд▓рдСрдл рдХреЗ рдкреНрд░рдХрд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ: рд░реИрдЦрд┐рдХ, рдЧрд╛рдКрд╕реА рдпрд╛ рд╕реБрдИред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдЬрд╛рд▓ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред


рдЗрд╕ рдЦрдВрдб рдореЗрдВ, рд╣рдо рдПрдХ рдФрд░ рддрд░реАрдХреЗ рдХреЛ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВрдЧреЗ: рджрд┐рдП рдЧрдП рд╡рдХреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ред рдпрд╣ рдирд┐рдпрдо рд▓реЗрддреЗ рд╣реБрдП рдХрд┐ рдЧрддрд┐ рд╕рдордп (d = (v / t)) рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рджреВрд░реА рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рд╣рдо рд╡реЗрдХреНрдЯрд░ рдХреА рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдордп рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдЗрд╕рдХреА рджреВрд░реА рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░рддреЗ рд╣реБрдПред


рд╡рдХреНрд░ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рдХрд░рдВрдЯ рд╕реАрди рдХреЛ рд╕реЗрд╡ рдХрд░реЗрдВ рдФрд░ 03 рдХреЛ рдлреЛрд░реНрд╕реЗрдЬ рдХреЛ рдлреЛрд▓реНрдб рдХрд░реЗрдВ ред рдЖрдкрдХреЛ CustomHeart prefab рдХрд╛ рдПрдХ рдкрджрд╛рдиреБрдХреНрд░рдо рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдЕрдкрдиреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдФрд░ рдмрд╛рд▓ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рддреАрд░ рдЖрдЗрдХрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред

рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдореЗрдВ рдЗрд╕рдХреЗ рдЧреБрдг рджреЗрдЦреЗрдВредрдЖрдк рд╣рд╛рд░реНрдЯ рдореЗрд╢ рдПрд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдореЗрд╢ рдлрд┐рд▓реНрдЯрд░ рдШрдЯрдХ рджреЗрдЦреЗрдВрдЧреЗ ред рдПрдХ рдШрдЯрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдЪреНрдЪреЗ рдХреЛ рдПрдХ рдХрд╕реНрдЯрдо рд╣рд╛рд░реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВ ред рдЕрдм рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╣рд╛рд░реНрдЯрдореЗрд╢ рд╕реЗ рдХреНрд▓реЛрди рдореЗрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП ред


рдЕрдЧрд▓рд╛, Scripts рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ CustomHeart.cs рдЦреЛрд▓реЗрдВ ред рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдкрд╣рд▓реЗ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:Start()

 public enum CurveType { Curve1, Curve2 } public CurveType curveType; Curve curve; 

рдХреЛрдб рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛: рдпрд╣рд╛рдВ рдирд╛рдо рдХреЗ рддрд╣рдд рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдПрдиреБрдо рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ CurveType, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рд╕реЗ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░

рдЬрд╛рдПрдВ CurveType1()рдФрд░ рдЬреЛрдбрд╝реЗрдВ:

 Vector3[] curvepoints = new Vector3[3]; //1 curvepoints[0] = new Vector3(0, 1, 0); curvepoints[1] = new Vector3(0.5f, 0.5f, 0); curvepoints[2] = new Vector3(1, 0, 0); curve = new Curve(curvepoints[0], curvepoints[1], curvepoints[2], false); //2 

рдХреЛрдб рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:

  1. рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рдХреНрд░ рдореЗрдВ рддреАрди рдмрд┐рдВрджреБ рд╣реЛрддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рд╡рдХреНрд░ рдХреЗ рд▓рд┐рдП рдЕрдВрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВред
  2. рд╣рдо рдорджрдж рдХреЗ рд╕рд╛рде рдкрд╣рд▓рд╛ рд╡рдХреНрд░ рдмрдирд╛рддреЗ рд╣реИрдВ Curve()рдФрд░ рдЗрд╕рдХреЗ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ curveред рдпрджрд┐ рдЖрдк рдкрд┐рдЫрд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЦреАрдВрдЪрд╛ рдЧрдпрд╛ рд╡рдХреНрд░ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

CurveType2()рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдЬреЛрдбрд╝реЗрдВ:

 Vector3[] curvepoints = new Vector3[3]; //1 curvepoints[0] = new Vector3(0, 0, 0); curvepoints[1] = new Vector3(0.5f, 1, 0); curvepoints[2] = new Vector3(1, 0, 0); curve = new Curve(curvepoints[0], curvepoints[1], curvepoints[2], false); //2 

рдХреЛрдб рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:

  1. рджреВрд╕рд░реЗ рд╡рдХреНрд░ рдХреЗ рд▓рд┐рдП рдЕрдВрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВред
  2. рд╣рдо Curve()рдЗрд╕рдХреЗ рд╕рд╛рде рджреВрд╕рд░рд╛ рд╡рдХреНрд░ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ curveред рдпрджрд┐ рдЖрдк рдкрд┐рдЫрд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЦреАрдВрдЪрд╛ рдЧрдпрд╛ рд╡рдХреНрд░ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдмреА StartDisplacement(), рд╕рдорд╛рдкрди рдмреНрд░реИрдХреЗрдЯ рд╕реЗ рдкрд╣рд▓реЗ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:

 if (curveType == CurveType.Curve1) { CurveType1(); } else if (curveType == CurveType.Curve2) { CurveType2(); } 

рдХреЛрдб рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг: рдпрд╣рд╛рдВ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЪреБрдиреЗ рдЧрдП рд╡рд┐рдХрд▓реНрдк рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ curveTypeрдФрд░ рддрджрдиреБрд╕рд╛рд░ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ curveред

B DisplaceVertices(), forрдХреЛрд╖реНрдардХ рдмрдВрдж рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд▓реВрдк рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рдЕрдВрджрд░ , рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:

 float increment = curve.GetPoint(distance).y * force; //1 Vector3 translate = (vert * increment) * Time.deltaTime; //2 Quaternion rotation = Quaternion.Euler(translate); Matrix4x4 m = Matrix4x4.TRS(translate, rotation, Vector3.one); mVertices[i] = m.MultiplyPoint3x4(mVertices[i]); 

рдХреЛрдб рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:

  1. рд╣рдо рджрд┐рдП рдЧрдП рдореЛрдбрд╝ рдкрд░ рд╡рдХреНрд░ рдХреА рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ distanceрдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рдореВрд▓реНрдп yрдХреЛ рдЧреБрдгрд╛ forceрдХрд░рддреЗ рд╣реИрдВ incrementред
  2. Vector3рд╡рд░реНрддрдорд╛рди рд╢реАрд░реНрд╖ рдХреА рдирдИ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдФрд░ рдЙрд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрдкрдиреЗ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдПрдВ ред

рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдПрдХрддрд╛ рдкрд░ рд▓реМрдЯреЗрдВред рдШрдЯрдХ рдХреЗ рдЧреБрдгреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ CustomHeart рдЦреЗрд▓ рд╡рд╕реНрддреБ рдмрд╛рд▓ ред рдЖрдкрдХреЛ рдПрдХ рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рджрд┐рдЦрд╛рдИ рджреЗрдЧреА рдЬрд╣рд╛рдВ рдЖрдк рд╡рдХреНрд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдкреНрд░рдХрд╛рд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рд╕реЗ, рдХреЛрдиреЗ рдХреА рд╕реВрдЪреА рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Add Indices рдпрд╛ Remove Indices рдЪреБрдиреЗрдВ ред


рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдШрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддреГрдд рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдорд╛рди рджрд░реНрдЬ рдХрд░реЗрдВ:


рдХреА рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рд╡рдХреНрд░ рдкреНрд░рдХрд╛рд░ , рдХрд╛ рдЪрдпрди Curve1 , рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд▓реЗрдВ рд╕рдВрдкрд╛рджрд┐рдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдХреЛрдИ рднреА рдФрд░ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдкреНрд▓реЗ ред рдЖрдкрдХреЛ рдкреИрдЯрд░реНрди рдореЗрдВ рдЬрд╛рд▓реА рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЙрдбрд▓ рдХреЛ рд╕рд╛рдЗрдб рд╡реНрдпреВ рдореЗрдВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд░реЛрд▓ рдХрд░реЗрдВ рдФрд░ рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд░реНрд╡реНрд╕ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВред рдпрд╣рд╛рдВ рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЪрдпрдирд┐рдд рдХрд░реНрд╡ рдЯрд╛рдЗрдк рдореЗрд╖ рдСрдлрд╕реЗрдЯ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред



рд╡рд╣ рд╕рдм рд╣реИ!рдЖрдк рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд╕рд╛рдлрд╝ рдХрд░реЗрдВ рдХреЛрдиреЗ , рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрдпрдирд┐рдд рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧред рд▓реЗрдХрд┐рди рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдЕрдиреНрдп рдХрд╛рд░рдХ рд╣реИрдВ рдЬреЛ рдореЗрд╖ рдХреЗ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЕрд░реНрдерд╛рддреН:

  • рддреНрд░рд┐рдЬреНрдпрд╛ рдХрд╛ рдорд╛рдиред
  • рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХреЛрдиреЗ рдХрд╛ рд╡рд┐рддрд░рдгред
  • рдЪрдпрдирд┐рдд рдХреЛрдиреЗ рдХреА рдкреИрдЯрд░реНрди рд╕реНрдерд┐рддрд┐ред
  • рдСрдлрд╝рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдЪреБрдиреА рдЧрдИ рд╡рд┐рдзрд┐ред

рдЖрдЧреЗ рдХрд╣рд╛рдБ рдЬрд╛рдирд╛ рд╣реИ?


рддреИрдпрд╛рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдлрд╛рдЗрд▓реЗрдВ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╣реИрдВ ред

рд╡рд╣рд╛рдВ рд░реБрдХрдирд╛ рдордд! рдпреВрдирд┐рдЯреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рднреВрд▓рднреБрд▓реИрдпрд╛ рдкреАрдврд╝реА рдХреЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдЕрдзрд┐рдХ рдкрд░рд┐рд╖реНрдХреГрдд рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ ред

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рдЖрдирдВрдж рд▓рд┐рдпрд╛ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЙрдкрдпреЛрдЧреА рдкрд╛рдпрд╛ред рдПрдХ рд╡рд┐рд╢реЗрд╖ рдзрдиреНрдпрд╡рд╛рдж рдореИрдВ рд╡реНрдпрдХреНрдд рдЬреИрд╕реНрдкрд░ рдлрд╝реНрд▓рд┐рдХ рдХреА рдмрд┐рд▓реНрд▓реА рдХреЗ рд╕рдорд╛рди рдХреЛрдбрд┐рдВрдЧ рдЙрдирдХреА рдЙрддреНрдХреГрд╖реНрдЯ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдорджрдж рдХреА рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрдореЛ рдЗрдХрдЯреНрдард╛ред

Source: https://habr.com/ru/post/hi428796/


All Articles