{"id":339,"date":"2020-11-21T11:52:48","date_gmt":"2020-11-21T03:52:48","guid":{"rendered":"http:\/\/admin.lastdream.net\/?p=339"},"modified":"2020-11-21T11:52:48","modified_gmt":"2020-11-21T03:52:48","slug":"unity-live2ddejieruheshiyongzhuanzai","status":"publish","type":"post","link":"https:\/\/admin.vsingers.com\/index.php\/2020\/11\/21\/unity-live2ddejieruheshiyongzhuanzai\/","title":{"rendered":"Unity Live2D\u7684\u63a5\u5165\u548c\u4f7f\u7528\uff08\u8f6c\u8f7d\uff09"},"content":{"rendered":"<p>https:\/\/blog.csdn.net\/weixin_38813436\/article\/details\/106472110<\/p>\n<p>\u9884\u5236\u4ef6\u539f\u6765\u81ea\u52a8\u751f\u6210\u7684\u554a\u3002\u3002<\/p>\n<p>&nbsp;<\/p>\n<h2>\u4e0b\u8f7d\u5730\u5740<\/h2>\n<p><a href=\"https:\/\/www.live2d.com\/download\/cubism-sdk\/download-unity\/\">Live2D\u4e0b\u8f7d\u5730\u5740<\/a><\/p>\n<h2><a name=\"t1\"><\/a><a name=\"t1\"><\/a><a id=\"Live2D_2\"><\/a>Live2D\u7684\u4f7f\u7528<\/h2>\n<p>Live2D\u5bfc\u5165Unity\u540e\u6587\u4ef6\u7ed3\u6784\u5982\u4e0b\uff0c\u5e76\u4e14\u5b98\u65b9\u4e5f\u63d0\u4f9b\u4e86\u591a\u4e2a\u6f14\u793a\u573a\u666f\u4ee5\u4f9b\u5927\u5bb6\u5b66\u4e60\u4f7f\u7528\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-349\" src=\"http:\/\/admin.lastdream.net\/wp-content\/uploads\/2020\/11\/20200601144304973-1.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" width=\"376\" height=\"334\" \/><br \/>\n<strong>\u57fa\u672c\u529f\u80fd\u548c\u4f7f\u7528<\/strong>\u3002<br \/>\n\u5bfc\u5165\u524d\u7684Live2D\u6587\u4ef6\u7ed3\u6784\u5982\u4e0b\uff1a<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-350\" src=\"http:\/\/admin.lastdream.net\/wp-content\/uploads\/2020\/11\/20200601145719716-1.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" width=\"268\" height=\"94\" \/><br \/>\n\u5206\u522b\u4e3a\u8868\u60c5\u7684Json\u914d\u7f6e\u6587\u4ef6\uff0c\u52a8\u4f5c\u7684Json\u914d\u7f6e\u6587\u4ef6\uff0c\u8d34\u56fe\u4ee5\u53ca\u7269\u7406Json\u914d\u7f6e\u6587\u4ef6\u7b49\u3002<br \/>\n\u5c06\u6b64\u5bfc\u5165Unity\u540eLive2D\u4f1a\u81ea\u52a8\u5904\u7406\u914d\u7f6e\u6587\u4ef6\uff0c\u5e76\u5728Runtime\u6587\u4ef6\u5939\u4e0b\u751f\u6210Liv2D\u7684\u9884\u5236\u4f53\uff0cexpressionList\u8868\u60c5\u5217\u8868\u548cfadeMotionList\u52a8\u4f5c\u5217\u8868\uff0c\u5217\u8868\u7684\u5f15\u7528\u5173\u7cfbLive2D\u5df2\u81ea\u52a8\u5904\u7406\u3002<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-351\" src=\"http:\/\/admin.lastdream.net\/wp-content\/uploads\/2020\/11\/20200601150845318-1.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" width=\"338\" height=\"175\" \/><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-352\" src=\"http:\/\/admin.lastdream.net\/wp-content\/uploads\/2020\/11\/20200601150908732-1.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" width=\"452\" height=\"460\" \/><br \/>\n<strong>Live2D\u9884\u5236\u4f53\u6240\u6302\u811a\u672c<\/strong>\uff1a<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-353\" src=\"http:\/\/admin.lastdream.net\/wp-content\/uploads\/2020\/11\/20200601152939925-1.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" width=\"478\" height=\"887\" \/><br \/>\n<strong>\u53ef\u9009\u529f\u80fd\u811a\u672c<\/strong>\uff1a<br \/>\nLookController\u4e0eLookTarget\u914d\u5408\u4f7f\u7528\uff0c\u63a7\u5236Live2D\u7684\u9f20\u6807\u8ffd\u8e2a\u6548\u679c\u3002<br \/>\nMouth\uff0cEyeBlink\u63a7\u5236Live2D\u81ea\u52a8\u7728\u773c\u529f\u80fd\u548c\u5634\u5df4\u5f20\u95ed\u3002<br \/>\nExpression\u8868\u60c5\u7ba1\u7406\u3002<br \/>\nFade \u52a8\u4f5c\u6de1\u5165\u6de1\u51fa\u7ba1\u7406\u3002<br \/>\n\u540c\u65f6\u81ea\u52a8\u7728\u773c\u8fd8\u6709\u9f20\u6807\u8ffd\u8e2a\u7b49\u529f\u80fd\uff0c\u9700\u8981\u5728\u76f8\u5e94\u53ef\u52a8\u90e8\u4f4d\u6dfb\u52a0\u76f8\u5e94\u529f\u80fd\u811a\u672c\u3002<br \/>\n\u5982\u81ea\u52a8\u7728\u773c\uff1a<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-354\" src=\"http:\/\/admin.lastdream.net\/wp-content\/uploads\/2020\/11\/20200601154024624-1.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" width=\"474\" height=\"274\" \/><br \/>\n\u5634\u5df4\uff1a<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-355\" src=\"http:\/\/admin.lastdream.net\/wp-content\/uploads\/2020\/11\/20200601153831465-1.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" width=\"491\" height=\"271\" \/><br \/>\n\u9f20\u6807\u8ffd\u8e2a\uff1a<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-356\" src=\"http:\/\/admin.lastdream.net\/wp-content\/uploads\/2020\/11\/20200601154044668-1.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" width=\"486\" height=\"294\" \/><br \/>\n\u8fd9\u4e9b\u90fd\u662fLive2D\u63d0\u4f9b\u7684\u57fa\u672c\u529f\u80fd\uff0c\u53ea\u9700\u8981\u6302\u8f7d\u76f8\u5e94\u811a\u672c\u4fbf\u53ef\u5b9e\u73b0\u529f\u80fd\u3002<\/p>\n<h2><a name=\"t2\"><\/a><a name=\"t2\"><\/a><a id=\"_27\"><\/a>\u52a8\u4f5c\u548c\u8868\u60c5\u7684\u64ad\u653e<\/h2>\n<p><strong>\u793a\u4f8b\u811a\u672c\uff1a<\/strong><\/p>\n<pre class=\"prettyprint\"><code class=\"prism language-csharp has-numbering\"><span class=\"token keyword\">using<\/span> Live2D<span class=\"token punctuation\">.<\/span>Cubism<span class=\"token punctuation\">.<\/span>Core<span class=\"token punctuation\">;<\/span>\n<span class=\"token keyword\">using<\/span> Live2D<span class=\"token punctuation\">.<\/span>Cubism<span class=\"token punctuation\">.<\/span>Framework<span class=\"token punctuation\">;<\/span>\n<span class=\"token keyword\">using<\/span> Live2D<span class=\"token punctuation\">.<\/span>Cubism<span class=\"token punctuation\">.<\/span>Framework<span class=\"token punctuation\">.<\/span>Expression<span class=\"token punctuation\">;<\/span>\n<span class=\"token keyword\">using<\/span> Live2D<span class=\"token punctuation\">.<\/span>Cubism<span class=\"token punctuation\">.<\/span>Framework<span class=\"token punctuation\">.<\/span>Motion<span class=\"token punctuation\">;<\/span>\n<span class=\"token keyword\">using<\/span> Live2D<span class=\"token punctuation\">.<\/span>Cubism<span class=\"token punctuation\">.<\/span>Framework<span class=\"token punctuation\">.<\/span>Raycasting<span class=\"token punctuation\">;<\/span>\n<span class=\"token keyword\">using<\/span> System<span class=\"token punctuation\">;<\/span>\n<span class=\"token keyword\">using<\/span> System<span class=\"token punctuation\">.<\/span>Collections<span class=\"token punctuation\">.<\/span>Generic<span class=\"token punctuation\">;<\/span>\n<span class=\"token keyword\">using<\/span> UnityEngine<span class=\"token punctuation\">;<\/span>\n\n<span class=\"token keyword\">namespace<\/span> Live2D<span class=\"token punctuation\">.<\/span>Cubism<span class=\"token punctuation\">.<\/span>Samples<span class=\"token punctuation\">.<\/span>OriginalWorkflow<span class=\"token punctuation\">.<\/span>Demo\n<span class=\"token punctuation\">{<\/span>\n    <span class=\"token punctuation\">[<\/span><span class=\"token class-name\">RequireComponent<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">typeof<\/span><span class=\"token punctuation\">(<\/span>CubismMotionController<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">]<\/span>\n    <span class=\"token punctuation\">[<\/span><span class=\"token class-name\">RequireComponent<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">typeof<\/span><span class=\"token punctuation\">(<\/span>CubismRaycaster<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">]<\/span>\n    <span class=\"token keyword\">public<\/span> <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">CubismSampleController<\/span> <span class=\"token punctuation\">:<\/span> <span class=\"token class-name\">MonoBehaviour<\/span>\n    <span class=\"token punctuation\">{<\/span>\n        <span class=\"token comment\">\/\/\/ &lt;summary&gt;<\/span>\n        <span class=\"token comment\">\/\/\/ MotionController to be operated.<\/span>\n        <span class=\"token comment\">\/\/\/ &lt;\/summary&gt;<\/span>\n        <span class=\"token keyword\">private<\/span> <span class=\"token class-name\">CubismMotionController<\/span> _motionController<span class=\"token punctuation\">;<\/span>\n\n        <span class=\"token comment\">\/\/\/ &lt;summary&gt;<\/span>\n        <span class=\"token comment\">\/\/\/ ExpressionController to be operated.<\/span>\n        <span class=\"token comment\">\/\/\/ &lt;\/summary&gt;<\/span>\n        <span class=\"token keyword\">private<\/span> <span class=\"token class-name\">CubismExpressionController<\/span> _expressionController<span class=\"token punctuation\">;<\/span>\n\n        <span class=\"token comment\">\/\/\/ &lt;summary&gt;<\/span>\n        <span class=\"token comment\">\/\/\/ Operation animation clip from the inspector.<\/span>\n        <span class=\"token comment\">\/\/\/ &lt;\/summary&gt;<\/span>\n        <span class=\"token punctuation\">[<\/span><span class=\"token class-name\">SerializeField<\/span><span class=\"token punctuation\">]<\/span>\n        <span class=\"token keyword\">private<\/span> <span class=\"token class-name\">AnimationClip<\/span> _bodyAnimation<span class=\"token punctuation\">;<\/span>\n\n        <span class=\"token comment\">\/\/\/ &lt;summary&gt;<\/span>\n        <span class=\"token comment\">\/\/\/ Array of motion set in tapbody.<\/span>\n        <span class=\"token comment\">\/\/\/ &lt;\/summary&gt;<\/span>\n        <span class=\"token punctuation\">[<\/span><span class=\"token class-name\">SerializeField<\/span><span class=\"token punctuation\">]<\/span>\n        <span class=\"token keyword\">private<\/span> AnimationClip<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span> _tapBodyMotions<span class=\"token punctuation\">;<\/span>\n\n        <span class=\"token comment\">\/\/\/ &lt;summary&gt;<\/span>\n        <span class=\"token comment\">\/\/\/ Motion set in roop motion.<\/span>\n        <span class=\"token comment\">\/\/\/ &lt;\/summary&gt;<\/span>\n        <span class=\"token keyword\">private<\/span> <span class=\"token class-name\">AnimationClip<\/span> _roopMotion<span class=\"token punctuation\">;<\/span>\n\n        <span class=\"token comment\">\/\/\/ &lt;summary&gt;<\/span>\n        <span class=\"token comment\">\/\/\/ List of Drawables info.<\/span>\n        <span class=\"token comment\">\/\/\/ &lt;\/summary&gt;<\/span>\n        <span class=\"token keyword\">private<\/span> List<span class=\"token operator\">&lt;<\/span>HitDrawableInfomation<span class=\"token operator\">&gt;<\/span> _hasHitDrawables<span class=\"token punctuation\">;<\/span>\n\n        <span class=\"token comment\">\/\/\/ &lt;summary&gt;<\/span>\n        <span class=\"token comment\">\/\/\/ Component that performs ray judgment on Drawables of model.<\/span>\n        <span class=\"token comment\">\/\/\/ &lt;\/summary&gt;<\/span>\n        <span class=\"token keyword\">private<\/span> <span class=\"token class-name\">CubismRaycaster<\/span> _raycaster<span class=\"token punctuation\">;<\/span>\n\n        <span class=\"token comment\">\/\/\/ &lt;summary&gt;<\/span>\n        <span class=\"token comment\">\/\/\/ Raycast Hit Results.<\/span>\n        <span class=\"token comment\">\/\/\/ &lt;\/summary&gt;<\/span>\n        <span class=\"token keyword\">private<\/span> CubismRaycastHit<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span> _raycastResults<span class=\"token punctuation\">;<\/span>\n\n        <span class=\"token comment\">\/\/\/ &lt;summary&gt;<\/span>\n        <span class=\"token comment\">\/\/\/ Enumeration type for hit area discrimination.<\/span>\n        <span class=\"token comment\">\/\/\/ &lt;\/summary&gt;<\/span>\n        <span class=\"token keyword\">private<\/span> <span class=\"token keyword\">enum<\/span> HitArea\n        <span class=\"token punctuation\">{<\/span>\n            Head<span class=\"token punctuation\">,<\/span>\n            Body\n        <span class=\"token punctuation\">}<\/span>\n\n        <span class=\"token comment\">\/\/\/ &lt;summary&gt;<\/span>\n        <span class=\"token comment\">\/\/\/ Structure that stores Drawable information for which hit area is specified.<\/span>\n        <span class=\"token comment\">\/\/\/ &lt;\/summary&gt;<\/span>\n        <span class=\"token keyword\">private<\/span> <span class=\"token keyword\">struct<\/span> HitDrawableInfomation\n        <span class=\"token punctuation\">{<\/span>\n            <span class=\"token comment\">\/\/\/ &lt;summary&gt;<\/span>\n            <span class=\"token comment\">\/\/\/ Drawable with component set.<\/span>\n            <span class=\"token comment\">\/\/\/ &lt;\/summary&gt;<\/span>\n            <span class=\"token keyword\">public<\/span> <span class=\"token class-name\">CubismDrawable<\/span> drawable<span class=\"token punctuation\">;<\/span>\n\n            <span class=\"token comment\">\/\/\/ &lt;summary&gt;<\/span>\n            <span class=\"token comment\">\/\/\/ HitArea.<\/span>\n            <span class=\"token comment\">\/\/\/ &lt;\/summary&gt;<\/span>\n            <span class=\"token keyword\">public<\/span> <span class=\"token class-name\">HitArea<\/span> hitArea<span class=\"token punctuation\">;<\/span>\n        <span class=\"token punctuation\">}<\/span>\n\n\n        <span class=\"token comment\">\/\/\/ &lt;summary&gt;<\/span>\n        <span class=\"token comment\">\/\/\/ Load model.<\/span>\n        <span class=\"token comment\">\/\/\/ &lt;\/summary&gt;<\/span>\n        <span class=\"token keyword\">private<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">Start<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>\n        <span class=\"token punctuation\">{<\/span>\n            <span class=\"token keyword\">var<\/span> model <span class=\"token operator\">=<\/span> <span class=\"token keyword\">this<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">FindCubismModel<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n\n            <span class=\"token comment\">\/\/ Get components.<\/span>\n            _motionController <span class=\"token operator\">=<\/span> model<span class=\"token punctuation\">.<\/span><span class=\"token generic-method\"><span class=\"token function\">GetComponent<\/span><span class=\"token punctuation\">&lt;<\/span><span class=\"token class-name\">CubismMotionController<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n            _expressionController <span class=\"token operator\">=<\/span> model<span class=\"token punctuation\">.<\/span><span class=\"token generic-method\"><span class=\"token function\">GetComponent<\/span><span class=\"token punctuation\">&lt;<\/span><span class=\"token class-name\">CubismExpressionController<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n            _raycaster <span class=\"token operator\">=<\/span> model<span class=\"token punctuation\">.<\/span><span class=\"token generic-method\"><span class=\"token function\">GetComponent<\/span><span class=\"token punctuation\">&lt;<\/span><span class=\"token class-name\">CubismRaycaster<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n\n\n            <span class=\"token comment\">\/\/ Set behavior at the end of animation.<\/span>\n            _motionController<span class=\"token punctuation\">.<\/span>AnimationEndHandler <span class=\"token operator\">=<\/span> AnimationEnded<span class=\"token punctuation\">;<\/span>\n\n\n            <span class=\"token comment\">\/\/ Get up to 4 results of collision detection.<\/span>\n            _raycastResults <span class=\"token operator\">=<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">CubismRaycastHit<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">4<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span>\n\n\n            <span class=\"token comment\">\/\/ Cache the drawable in which the component is set.<\/span>\n            <span class=\"token punctuation\">{<\/span>\n                _hasHitDrawables <span class=\"token operator\">=<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token generic-method\"><span class=\"token function\">List<\/span><span class=\"token punctuation\">&lt;<\/span><span class=\"token class-name\">HitDrawableInfomation<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n\n                <span class=\"token keyword\">var<\/span> hitAreas <span class=\"token operator\">=<\/span> Enum<span class=\"token punctuation\">.<\/span><span class=\"token function\">GetValues<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">typeof<\/span><span class=\"token punctuation\">(<\/span>HitArea<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n                <span class=\"token keyword\">var<\/span> drawables <span class=\"token operator\">=<\/span> model<span class=\"token punctuation\">.<\/span>Drawables<span class=\"token punctuation\">;<\/span>\n\n\n                <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">var<\/span> i <span class=\"token operator\">=<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> hitAreas<span class=\"token punctuation\">.<\/span>Length<span class=\"token punctuation\">;<\/span> i<span class=\"token operator\">++<\/span><span class=\"token punctuation\">)<\/span>\n                <span class=\"token punctuation\">{<\/span>\n                    <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">var<\/span> j <span class=\"token operator\">=<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> j <span class=\"token operator\">&lt;<\/span> drawables<span class=\"token punctuation\">.<\/span>Length<span class=\"token punctuation\">;<\/span> j<span class=\"token operator\">++<\/span><span class=\"token punctuation\">)<\/span>\n                    <span class=\"token punctuation\">{<\/span>\n                        <span class=\"token keyword\">var<\/span> cubismHitDrawable <span class=\"token operator\">=<\/span> drawables<span class=\"token punctuation\">[<\/span>j<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token generic-method\"><span class=\"token function\">GetComponent<\/span><span class=\"token punctuation\">&lt;<\/span><span class=\"token class-name\">CubismHitDrawable<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n\n                        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>cubismHitDrawable<span class=\"token punctuation\">)<\/span>\n                        <span class=\"token punctuation\">{<\/span>\n                            <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>cubismHitDrawable<span class=\"token punctuation\">.<\/span>Name <span class=\"token operator\">==<\/span> hitAreas<span class=\"token punctuation\">.<\/span><span class=\"token function\">GetValue<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">ToString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span>\n                            <span class=\"token punctuation\">{<\/span>\n                                <span class=\"token keyword\">var<\/span> hitDrawable <span class=\"token operator\">=<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">HitDrawableInfomation<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n                                hitDrawable<span class=\"token punctuation\">.<\/span>drawable <span class=\"token operator\">=<\/span> drawables<span class=\"token punctuation\">[<\/span>j<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span>\n                                hitDrawable<span class=\"token punctuation\">.<\/span>hitArea <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">(<\/span>HitArea<span class=\"token punctuation\">)<\/span>i<span class=\"token punctuation\">;<\/span>\n\n                                _hasHitDrawables<span class=\"token punctuation\">.<\/span><span class=\"token function\">Add<\/span><span class=\"token punctuation\">(<\/span>hitDrawable<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n                                <span class=\"token keyword\">break<\/span><span class=\"token punctuation\">;<\/span>\n                            <span class=\"token punctuation\">}<\/span>\n                        <span class=\"token punctuation\">}<\/span>\n                    <span class=\"token punctuation\">}<\/span>\n                <span class=\"token punctuation\">}<\/span>\n            <span class=\"token punctuation\">}<\/span>\n        <span class=\"token punctuation\">}<\/span>\n\n\n        <span class=\"token comment\">\/\/\/ &lt;summary&gt;<\/span>\n        <span class=\"token comment\">\/\/\/ Update.<\/span>\n        <span class=\"token comment\">\/\/\/ &lt;\/summary&gt;<\/span>\n        <span class=\"token keyword\">private<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">Update<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>\n        <span class=\"token punctuation\">{<\/span>\n            <span class=\"token comment\">\/\/ Play if animation is specified.<\/span>\n            <span class=\"token function\">SpecifiedAnimationCheck<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n\n\n            <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>Input<span class=\"token punctuation\">.<\/span><span class=\"token function\">GetMouseButtonDown<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span>\n            <span class=\"token punctuation\">{<\/span>\n                <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span>\n            <span class=\"token punctuation\">}<\/span>\n\n\n            <span class=\"token comment\">\/\/ Cast ray from pointer position.<\/span>\n            <span class=\"token keyword\">var<\/span> ray <span class=\"token operator\">=<\/span> Camera<span class=\"token punctuation\">.<\/span>main<span class=\"token punctuation\">.<\/span><span class=\"token function\">ScreenPointToRay<\/span><span class=\"token punctuation\">(<\/span>Input<span class=\"token punctuation\">.<\/span>mousePosition<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n            <span class=\"token keyword\">var<\/span> hitCount <span class=\"token operator\">=<\/span> _raycaster<span class=\"token punctuation\">.<\/span><span class=\"token function\">Raycast<\/span><span class=\"token punctuation\">(<\/span>ray<span class=\"token punctuation\">,<\/span> _raycastResults<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n\n\n            <span class=\"token comment\">\/\/ Motion playback according to the hit location.<\/span>\n            <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">var<\/span> i <span class=\"token operator\">=<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> hitCount<span class=\"token punctuation\">;<\/span> i<span class=\"token operator\">++<\/span><span class=\"token punctuation\">)<\/span>\n            <span class=\"token punctuation\">{<\/span>\n                <span class=\"token keyword\">var<\/span> hitDrawable <span class=\"token operator\">=<\/span> _raycastResults<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>Drawable<span class=\"token punctuation\">;<\/span>\n\n                <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">var<\/span> j <span class=\"token operator\">=<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> j <span class=\"token operator\">&lt;<\/span> _hasHitDrawables<span class=\"token punctuation\">.<\/span>Count<span class=\"token punctuation\">;<\/span> j<span class=\"token operator\">++<\/span><span class=\"token punctuation\">)<\/span>\n                <span class=\"token punctuation\">{<\/span>\n                    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>hitDrawable <span class=\"token operator\">==<\/span> _hasHitDrawables<span class=\"token punctuation\">[<\/span>j<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>drawable<span class=\"token punctuation\">)<\/span>\n                    <span class=\"token punctuation\">{<\/span>\n                        <span class=\"token keyword\">var<\/span> hitArea <span class=\"token operator\">=<\/span> _hasHitDrawables<span class=\"token punctuation\">[<\/span>j<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>hitArea<span class=\"token punctuation\">;<\/span>\n\n\n                        <span class=\"token comment\">\/\/ Tap body.<\/span>\n                        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>hitArea <span class=\"token operator\">==<\/span> HitArea<span class=\"token punctuation\">.<\/span>Body<span class=\"token punctuation\">)<\/span>\n                        <span class=\"token punctuation\">{<\/span>\n                            <span class=\"token comment\">\/\/ Decide motion to play at random.<\/span>\n                            <span class=\"token keyword\">var<\/span> motionIndex <span class=\"token operator\">=<\/span> UnityEngine<span class=\"token punctuation\">.<\/span>Random<span class=\"token punctuation\">.<\/span><span class=\"token function\">Range<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> _tapBodyMotions<span class=\"token punctuation\">.<\/span>Length <span class=\"token operator\">-<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n\n                            Debug<span class=\"token punctuation\">.<\/span><span class=\"token function\">Log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"Tap body : Play : \"<\/span> <span class=\"token operator\">+<\/span> _tapBodyMotions<span class=\"token punctuation\">[<\/span>motionIndex<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n\n                            _motionController<span class=\"token punctuation\">.<\/span><span class=\"token function\">PlayAnimation<\/span><span class=\"token punctuation\">(<\/span>_tapBodyMotions<span class=\"token punctuation\">[<\/span>motionIndex<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> isLoop<span class=\"token punctuation\">:<\/span> <span class=\"token keyword\">false<\/span><span class=\"token punctuation\">,<\/span> priority<span class=\"token punctuation\">:<\/span>CubismMotionPriority<span class=\"token punctuation\">.<\/span>PriorityNormal<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n                        <span class=\"token punctuation\">}<\/span>\n                        <span class=\"token comment\">\/\/ Tap head.<\/span>\n                        <span class=\"token keyword\">else<\/span> <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>hitArea <span class=\"token operator\">==<\/span> HitArea<span class=\"token punctuation\">.<\/span>Head<span class=\"token punctuation\">)<\/span>\n                        <span class=\"token punctuation\">{<\/span>\n                            <span class=\"token comment\">\/\/ Decide expression motion to play at random.<\/span>\n                            <span class=\"token keyword\">var<\/span> expressionNum <span class=\"token operator\">=<\/span> _expressionController<span class=\"token punctuation\">.<\/span>ExpressionsList<span class=\"token punctuation\">.<\/span>CubismExpressionObjects<span class=\"token punctuation\">.<\/span>Length<span class=\"token punctuation\">;<\/span>\n                            <span class=\"token keyword\">var<\/span> expressionIndex <span class=\"token operator\">=<\/span> UnityEngine<span class=\"token punctuation\">.<\/span>Random<span class=\"token punctuation\">.<\/span><span class=\"token function\">Range<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> expressionNum <span class=\"token operator\">-<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n\n                            _expressionController<span class=\"token punctuation\">.<\/span>CurrentExpressionIndex <span class=\"token operator\">=<\/span> expressionIndex<span class=\"token punctuation\">;<\/span>\n\n                            Debug<span class=\"token punctuation\">.<\/span><span class=\"token function\">Log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"Tap head : Play : \"<\/span> <span class=\"token operator\">+<\/span> _expressionController<span class=\"token punctuation\">.<\/span>ExpressionsList<span class=\"token punctuation\">.<\/span>CubismExpressionObjects<span class=\"token punctuation\">[<\/span>expressionIndex<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n                        <span class=\"token punctuation\">}<\/span>\n\n                        <span class=\"token keyword\">break<\/span><span class=\"token punctuation\">;<\/span>\n                    <span class=\"token punctuation\">}<\/span>\n                <span class=\"token punctuation\">}<\/span>\n            <span class=\"token punctuation\">}<\/span>\n        <span class=\"token punctuation\">}<\/span>\n\n\n        <span class=\"token comment\">\/\/\/ &lt;summary&gt;<\/span>\n        <span class=\"token comment\">\/\/\/ Check the specified animation and play it.<\/span>\n        <span class=\"token comment\">\/\/\/ &lt;\/summary&gt;<\/span>\n        <span class=\"token keyword\">private<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">SpecifiedAnimationCheck<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>\n        <span class=\"token punctuation\">{<\/span>\n            <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>_bodyAnimation <span class=\"token operator\">!=<\/span> _roopMotion<span class=\"token punctuation\">)<\/span>\n            <span class=\"token punctuation\">{<\/span>\n                _roopMotion <span class=\"token operator\">=<\/span> _bodyAnimation<span class=\"token punctuation\">;<\/span>\n\n                Debug<span class=\"token punctuation\">.<\/span><span class=\"token function\">Log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"Body animation : Play : \"<\/span> <span class=\"token operator\">+<\/span> _roopMotion<span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n\n                _motionController<span class=\"token punctuation\">.<\/span><span class=\"token function\">PlayAnimation<\/span><span class=\"token punctuation\">(<\/span>_roopMotion<span class=\"token punctuation\">,<\/span> priority<span class=\"token punctuation\">:<\/span>CubismMotionPriority<span class=\"token punctuation\">.<\/span>PriorityIdle<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n            <span class=\"token punctuation\">}<\/span>\n        <span class=\"token punctuation\">}<\/span>\n\n\n        <span class=\"token comment\">\/\/\/ &lt;summary&gt;<\/span>\n        <span class=\"token comment\">\/\/\/ Called at the end of the animation.<\/span>\n        <span class=\"token comment\">\/\/\/ &lt;\/summary&gt;<\/span>\n        <span class=\"token comment\">\/\/\/ &lt;param name=\"instanceId\"&gt;&lt;\/param&gt;<\/span>\n        <span class=\"token keyword\">private<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">AnimationEnded<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">float<\/span> instanceId<span class=\"token punctuation\">)<\/span>\n        <span class=\"token punctuation\">{<\/span>\n            <span class=\"token comment\">\/\/ Play roop motion.<\/span>\n            _motionController<span class=\"token punctuation\">.<\/span><span class=\"token function\">PlayAnimation<\/span><span class=\"token punctuation\">(<\/span>_roopMotion<span class=\"token punctuation\">,<\/span> priority<span class=\"token punctuation\">:<\/span>CubismMotionPriority<span class=\"token punctuation\">.<\/span>PriorityIdle<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n\n            Debug<span class=\"token punctuation\">.<\/span><span class=\"token function\">Log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"Body animation : Play : \"<\/span> <span class=\"token operator\">+<\/span> _roopMotion<span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n        <span class=\"token punctuation\">}<\/span>\n    <span class=\"token punctuation\">}<\/span>\n<span class=\"token punctuation\">}<\/span>\n<\/code><\/pre>\n<p>\u6ce8\u610f\uff0c\u53ef\u4ea4\u4e92\u90e8\u4f4d\u8981\u6302\u8f7d\u76f8\u5e94\u529f\u80fd\u811a\u672c\uff0c\u70b9\u51fb\u624d\u4f1a\u751f\u6548\u3002\u5982\u8981\u70b9\u51fb\u8eab\u4f53\u90e8\u4f4d\uff0c\u53ef\u5728\u9884\u5236\u4f53\u7684Drawables\u4e0b\u5c06\u76f8\u5173\u533a\u57df\u6302\u8f7d<strong>CubismHitDrawable<\/strong>\u4e0e<strong>CubismRaycastable<\/strong>\u811a\u672c\u3002\u5982\uff1a<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-357\" src=\"http:\/\/admin.lastdream.net\/wp-content\/uploads\/2020\/11\/20200601154910129-1.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" width=\"502\" height=\"223\" \/><br \/>\n\u5982\u6b64\uff0c\u5c04\u7ebf\u68c0\u6d4b\u5230\u70b9\u51fb\u7684\u76f8\u5e94\u533a\u57df\uff0c\u4fbf\u53ef\u64ad\u653e\u76f8\u5e94\u7684\u52a8\u4f5c\u6216\u8005\u8868\u60c5\u4e86\u3002<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>https:\/\/blog.csdn.net\/weixin_38813436\/article\/details\/1 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":357,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19],"tags":[],"class_list":["post-339","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-u3d"],"_links":{"self":[{"href":"https:\/\/admin.vsingers.com\/index.php\/wp-json\/wp\/v2\/posts\/339","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/admin.vsingers.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/admin.vsingers.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/admin.vsingers.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/admin.vsingers.com\/index.php\/wp-json\/wp\/v2\/comments?post=339"}],"version-history":[{"count":0,"href":"https:\/\/admin.vsingers.com\/index.php\/wp-json\/wp\/v2\/posts\/339\/revisions"}],"wp:attachment":[{"href":"https:\/\/admin.vsingers.com\/index.php\/wp-json\/wp\/v2\/media?parent=339"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/admin.vsingers.com\/index.php\/wp-json\/wp\/v2\/categories?post=339"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/admin.vsingers.com\/index.php\/wp-json\/wp\/v2\/tags?post=339"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}