{ "version": "https://jsonfeed.org/version/1", "title": "UNITY", "description": "", "home_page_url": "go/unity", "feed_url": "feed/unity.json", "icon": "https://cdn.v2ex.com/navatar/428f/ca9b/463_large.png?m=1442837324", "favicon": "https://cdn.v2ex.com/navatar/428f/ca9b/463_normal.png?m=1442837324", "items": [ { "author": { "url": "member/JoeJoeJoe", "name": "JoeJoeJoe", "avatar": "https://cdn.v2ex.com/avatar/7f7f/3bb4/531733_large.png?m=1776992326" }, "url": "t/1195928", "date_modified": "2026-03-06T02:47:48+00:00", "content_html": "

\u5f53\u65f6\u53bb\u5b98\u7f51\u641c\u4e86\u4e0b, \u5f00 pro \u4f1a\u5458\u4e00\u5e74\u597d\u50cf\u5f97\u4e0a\u4e07, \u4f6c\u4eec\u6709\u4ec0\u4e48\u770b\u6cd5?

\n

ps: \u9644\u90ae\u4ef6\u622a\u56fe\n\"\"

\n", "date_published": "2026-03-05T01:45:34+00:00", "title": "\u521a\u624d\u6e05\u7406\u5e9f\u7eb8\u7bd3\u7684\u65f6\u5019\u53d1\u73b0\u4e00\u5c01\u6ca1\u770b\u7684 unity \u90ae\u4ef6, \u8fd9\u662f\u4ee5\u540e\u4e0d\u8ba9\u7528 Unity \u5f00\u53d1\u56fd\u5916\u7248\u672c\u7684\u6e38\u620f\u4e86? \u903c\u7740\u4f7f\u7528\u817e\u8baf\u7684 Tuanjie \u5f15\u64ce\u5417? Tuanjie \u6253\u51fa\u6765\u7684\u5305\u597d\u50cf\u4f1a\u5f3a\u52a0\u6c34\u5370\u5565\u7684.", "id": "t/1195928" }, { "author": { "url": "member/GPLer", "name": "GPLer", "avatar": "https://cdn.v2ex.com/gravatar/d157c8c4ad24344ad27169d12b516d0c?s=73&d=retro" }, "url": "t/1195358", "title": "\u4e2d\u56fd\u533a\u7528\u6237\u7684\u6d77\u5916 Unity \u8d44\u6e90\u5546\u5e97\u7684\u8bbf\u95ee\u6743\u9650\u5c06\u4e8e 2026 \u5e74 3 \u6708 31 \u65e5\u7ec8\u6b62", "id": "t/1195358", "date_published": "2026-03-03T01:50:10+00:00", "content_html": "

\u91cd\u8981\u901a\u77e5\uff1a\u6d77\u5916 Unity \u8d44\u6e90\u5546\u5e97\u7684\u8bbf\u95ee\u6743\u9650\u5c06\u4e8e 2026 \u5e74 3 \u6708 31 \u65e5\u7ec8\u6b62\n\u60a8\u597d\uff01

\n

\u6211\u4eec\u7279\u6b64\u901a\u77e5\u60a8\uff0c\u7531\u4e8e\u5bf9\u533a\u57df\u8bb8\u53ef\u3001\u5206\u53d1\u53ca\u5408\u89c4\u653f\u7b56\u7684\u66f4\u65b0\uff0c\u6211\u4eec\u9700\u7ec8\u6b62\u5411\u6240\u6709\u4f4d\u4e8e\u4e2d\u56fd\u5927\u9646\u53ca\u6e2f\u6fb3\u5730\u533a\u7684\u7ec4\u7ec7\u63d0\u4f9b\u6d77\u5916 Unity \u8d44\u6e90\u5546\u5e97\u7684\u8bbf\u95ee\u6743\u9650\u3002

\n

\u81ea 2026 \u5e74 3 \u6708 31 \u65e5\u8d77\uff0c\u8fd9\u4e9b\u7ec4\u7ec7\u5c06\u65e0\u6cd5\u7ee7\u7eed\u4f7f\u7528\u6d77\u5916 Unity \u8d44\u6e90\u5546\u5e97\uff0c\u4e5f\u65e0\u6cd5\u518d\u8bbf\u95ee\u5176\u5df2\u7ecf\u8d2d\u4e70\u7684\u6216\u514d\u8d39\u83b7\u53d6\u7684\u8d44\u6e90\u3002\u6211\u4eec\u7684\u8bb0\u5f55\u663e\u793a\uff0c\u60a8\u7ec4\u7ec7\u7684\u8fd0\u8425\u5730\u70b9\u4f4d\u4e8e\u4e2d\u56fd\u5927\u9646\u53ca\u6e2f\u6fb3\u5730\u533a\uff0c\u56e0\u6b64\u5c06\u53d7\u5230\u672c\u6b21\u8c03\u6574\u5f71\u54cd\u3002\u5982\u60a8\u5bf9\u6211\u4eec\u8bb0\u5f55\u7684\u8fd0\u8425\u5730\u70b9\u4fe1\u606f\u5b58\u5728\u5f02\u8bae\uff0c\u8bf7\u52a1\u5fc5\u4e8e\u5317\u4eac\u65f6\u95f4 2026 \u5e74 3 \u6708 15 \u65e5 8:00 \uff08 UTC \u65f6\u95f4 2026 \u5e74 3 \u6708 15 \u65e5 00:00 \uff09\u524d\u8054\u7cfb Unity \u652f\u6301\u56e2\u961f\u3002\u672a\u6765\u6211\u4eec\u5efa\u8bae\u60a8\u4f7f\u7528\u4e2d\u56fd\u8d44\u6e90\u5546\u5e97\u53ca\u56e2\u7ed3\u5f15\u64ce\u8fdb\u884c\u521b\u4f5c\u3002\n\u4e3b\u8981\u66f4\u65b0\u5185\u5bb9\uff1a

\n
\u81ea 2026 \u5e74 3 \u6708 31 \u65e5\u8d77\uff0c\u4e2d\u56fd\u5927\u9646\u53ca\u6e2f\u6fb3\u5730\u533a\u7528\u6237\u5c06\u65e0\u6cd5\u7ee7\u7eed\u901a\u8fc7\u6d77\u5916 Unity \u8d44\u6e90\u5546\u5e97\u8bbf\u95ee\u6216\u83b7\u53d6\u514d\u8d39\u53ca\u4ed8\u8d39\u8d44\u6e90\u3002\u6211\u4eec\u5efa\u8bae\u60a8\u540e\u7eed\u4f7f\u7528\u4e2d\u56fd\u8d44\u6e90\u5546\u5e97\u8fdb\u884c\u76f8\u5173\u64cd\u4f5c\u3002\n\u672c\u6b21\u8c03\u6574\u5c06\u5f71\u54cd\u6240\u6709\u8fd0\u8425\u5730\u70b9\u4f4d\u4e8e\u4e2d\u56fd\u5927\u9646\u53ca\u6e2f\u6fb3\u5730\u533a\u7684\u7ec4\u7ec7\u3002\n\u5982\u60a8\u5bf9\u6211\u4eec\u8bb0\u5f55\u7684\u8fd0\u8425\u5730\u70b9\u4fe1\u606f\u5b58\u5728\u5f02\u8bae\uff0c\u8bf7\u52a1\u5fc5\u4e8e\u5317\u4eac\u65f6\u95f4 2026 \u5e74 3 \u6708 15 \u65e5 8:00 \uff08 UTC \u65f6\u95f4 2026 \u5e74 3 \u6708 15 \u65e5 00:00 \uff09\u524d\u8054\u7cfb Unity \u652f\u6301\u56e2\u961f\u3002\n
\n

\u5982\u4f55\u4fdd\u7559\u73b0\u6709\u8d44\u6e90\uff1a\n\u5982\u679c\u60a8\u5e0c\u671b\u4fdd\u7559\u5e76\u7ee7\u7eed\u4f7f\u7528\u5df2\u83b7\u53d6\u7684\u8d44\u6e90\uff0c\u8bf7\u4e8e 2026 \u5e74 3 \u6708 31 \u65e5\u4e4b\u524d\uff0c\u901a\u8fc7\u201c\u6211\u7684\u8d44\u6e90\uff08 My Assets \uff09\u201d\u9875\u9762\u4e2d\u65b0\u589e\u7684\u201c\u5168\u90e8\u4e0b\u8f7d\uff08 Download all \uff09\u201d\u6309\u94ae\uff0c\u5c06\u6240\u6709\u8d44\u6e90\u4e0b\u8f7d\u81f3\u672c\u5730\u3002

\n

\u6d77\u5916 Unity \u8d44\u6e90\u5546\u5e97\u56e2\u961f

\n
\n

\u611f\u89c9 Unity3D \u5f7b\u5e95\u5e9f\u4e86\uff0c\u6700\u65b0\u7684\u5f15\u64ce\u4e0d\u8ba9\u7528\uff0c\u5546\u5e97\u4e5f\u4e0d\u7ed9\u7528\u4e86\u3002

\n" }, { "author": { "url": "member/asdfplkj", "name": "asdfplkj", "avatar": "https://cdn.v2ex.com/gravatar/0aaa9bb33f56c84e2c315d5941472839?s=73&d=retro" }, "url": "t/1168612", "title": "\u6709\u54ea\u4e2a\u5934\u663e\u662f\u80fd\u5b9e\u65f6\u8fde\u63a5 Unity \u7f16\u8f91\u573a\u666f\u7684\uff1f", "id": "t/1168612", "date_published": "2025-10-27T04:09:54+00:00", "content_html": "

\u516c\u53f8\u505a vision pro \u7684\u5185\u5bb9\uff0c\u4f46\u8981\u770b\u6548\u679c\u7684\u8bdd\u8fd8\u662f\u5f97\u6253\u5305\u5b8c\u4e86\u624d\u80fd\u770b\u6280\u672f\u5f04\u8fc7\u4e00\u6b21\u5b9e\u65f6\u7f16\u8f91\u7684\uff0c\u4f46\u4e0d\u597d\u7528\uff0c\u8fd9\u65b9\u9762 unity \u5bf9 vision pro \u7684\u652f\u6301\u5c31\u4e0d\u662f\u5f88\u597d\uff0c\u60f3\u77e5\u9053\u6709\u6ca1\u6709\u4eba\u77e5\u9053\u54ea\u5bb6\u7684\u5934\u663e\u5728\u5b9e\u65f6\u67e5\u770b\u573a\u666f\u7f16\u8f91\u65f6\u6548\u679c\u6bd4\u8f83\u597d\u7684\uff0c\u4e3b\u8981\u662f\u5730\u7f16\u73af\u8282\u65f6\u80fd\u6700\u5feb\u7684\u770b\u5230\u6548\u679c\u3002

\n" }, { "author": { "url": "member/zuiluo", "name": "zuiluo", "avatar": "https://cdn.v2ex.com/gravatar/59111bb8aeaa4d96043276c66589a644?s=73&d=retro" }, "url": "t/1159192", "date_modified": "2025-09-15T12:26:46+00:00", "content_html": "Unity Hub \u7ed1\u5b9a\u56fd\u533a\u8d26\u53f7\uff0c\u4f46\u65e0\u8bba\u4ece\u54ea\u91cc\u8df3\u8f6c\u8d44\u6e90\u5546\u5e97\u90fd\u4f1a\u8fdb\u5165\u56fd\u9645\u5546\u5e97\uff0c\u800c\u56fd\u533a\u8d26\u53f7\u4e0e\u56fd\u9645\u5546\u5e97\u8d26\u53f7\u4e92\u4e0d\u901a\u7528\uff0c\u5bfc\u81f4\u8d44\u6e90\u65e0\u6cd5\u4e0b\u8f7d\u6216\u5bfc\u5165\u3002", "date_published": "2025-09-15T01:14:51+00:00", "title": "unity \u56fd\u533a\u8d26\u53f7\u5982\u4f55\u4e0b\u8f7d unity \u5546\u5e97\u8d44\u6e90\uff1f", "id": "t/1159192" }, { "author": { "url": "member/qwqqwq", "name": "qwqqwq", "avatar": "https://cdn.v2ex.com/avatar/133a/2a74/386672_large.png?m=1755242220" }, "url": "t/1148782", "date_modified": "2025-07-31T16:29:26+00:00", "content_html": "

\u628a\u5b9e\u9a8c\u5ba4\u573a\u5730\u7684 cad \u56fe\u7eb8\u5bfc\u5165\u8349\u56fe\u5927\u5e08\u5efa\u597d\u6a21\u7136\u540e\u5bfc\u5165 unity,\u5bfc\u5165\u4e4b\u540e\u4e0d\u77e5\u9053\u600e\u4e48\u505a\u4e86\uff0c\u4e4b\u524d\u6ca1\u5b66\u8fc7 unity \uff0c\u6709\u6ca1\u6709\u7b80\u5355\u7684\u529e\u6cd5\u5728 unity \u4e2d\u6e32\u67d3\u7136\u540e\u5b9e\u73b0\u94fe\u5bb6\u7684\u770b\u5bb6 vr \u6548\u679c\uff0c\u540e\u671f\u53ef\u80fd\u8981\u5b9e\u73b0\u6570\u5b57\u5b6a\u751f(\u8fd9\u4e2a\u5f97\u4e4b\u540e\u518d\u8bf4\u4e86

\n", "date_published": "2025-07-30T07:29:21+00:00", "title": "unity \u53ef\u4ee5\u505a\u4e09\u7ef4\u5efa\u6a21 vr \u6548\u679c\u5417", "id": "t/1148782" }, { "author": { "url": "member/kevin1ee", "name": "kevin1ee", "avatar": "https://cdn.v2ex.com/avatar/7795/8e6e/579994_large.png?m=1747966820" }, "url": "t/1137315", "title": "gaia pro \u95ee\u9898\u8bf7\u6559", "id": "t/1137315", "date_published": "2025-06-09T03:07:31+00:00", "content_html": "

\u57fa\u4e8e unity\n\u60f3\u521b\u5efa\u4e00\u4e2a\u5c3d\u53ef\u80fd\u771f\u5b9e\u7684\u5730\u5f62\ngaia pro \uff0cheightmap \uff0c\u8fd8\u6709\u5730\u5f62\u7eb9\u7406\uff0c\u690d\u88ab\u7b49\uff0c\u60f3\u8bf7\u95ee\u4e0b\uff0c\u76f8\u5173\u6570\u636e\u8d44\u6e90\u4ece\u54ea\u91cc\u53ef\u4ee5\u514d\u8d39/\u4ed8\u8d39\u83b7\u53d6\u5230\u5462\uff1f\n\u8c22\u8c22\uff01

\n" }, { "author": { "url": "member/leenjewel", "name": "leenjewel", "avatar": "https://cdn.v2ex.com/gravatar/7751db480b8b9cf7d0b6faac4b441184?s=73&d=retro" }, "url": "t/1112656", "title": "Cursor \u7b49\u4e00\u4f17 AI \u7f16\u7a0b\u5de5\u5177\u76ee\u524d\u548c Unity \u6e38\u620f\u5f00\u53d1\u7684\u7ed3\u5408\u600e\u4e48\u6837\u4e86\uff1f Unity \u6e38\u620f\u5f00\u53d1\u60f3\u7528 AI \u63d0\u9ad8\u751f\u4ea7\u7387\u76ee\u524d\u90fd\u6709\u4ec0\u4e48\u6bd4\u8f83\u597d\u7684\u65b9\u6848\u6216\u8005\u5de5\u5177\uff1f", "id": "t/1112656", "date_published": "2025-02-19T07:14:41+00:00", "content_html": "" }, { "author": { "url": "member/drymonfidelia", "name": "drymonfidelia", "avatar": "https://cdn.v2ex.com/gravatar/017bcef6e642dbf067e17838a9cd447a?s=73&d=retro" }, "url": "t/1111826", "title": "Unity \u80a1\u4ef7\u53ea\u5269\u4e09\u5e74\u524d\u7684 10%\u4e86\uff08200USD=>20USD\uff09\u4f1a\u4e0d\u4f1a\u88ab\u54ea\u4e2a\u5927\u516c\u53f8\u6536\u8d2d\uff1f", "id": "t/1111826", "date_published": "2025-02-16T12:34:02+00:00", "content_html": "" }, { "author": { "url": "member/nathandoge", "name": "nathandoge", "avatar": "https://cdn.v2ex.com/avatar/cd58/dcda/241991_large.png?m=1686789829" }, "url": "t/1111772", "date_modified": "2025-02-16T13:04:36+00:00", "content_html": "

\u4f30\u8ba1\u662f\u4e3a\u4e86\u63a8\u56fd\u5185\u7279\u4f9b\u7248 \u56e2\u7ed3\u5f15\u64ce\uff0c\u771f\u6ca1\u89c1\u8fc7\u8fd9\u4e48\u6076\u5fc3\u7684\u516c\u53f8

\n", "date_published": "2025-02-16T06:59:02+00:00", "title": "Unity 6 \u73b0\u5728\u56fd\u533a\u4e0d\u8ba9\u4e0b\u8f7d\u4e86", "id": "t/1111772" }, { "author": { "url": "member/zeroonetwo", "name": "zeroonetwo", "avatar": "https://cdn.v2ex.com/gravatar/75705ba814a990e8b9901d14721dd5b5?s=73&d=retro" }, "url": "t/1074178", "date_modified": "2024-09-19T12:52:09+00:00", "content_html": "\u8fd9\u4e2a\u7248\u5757\u592a\u51b7\u6e05\u4e86\uff0c\u60f3\u589e\u52a0\u70b9\u70ed\u5ea6\u3002
\u81ea\u5df1\u662f\u6e38\u620f\u591a\u5e74\u4ece\u4e1a\u8005\uff0c\u5404\u9636\u6bb5\u7684\u516c\u53f8\u90fd\u5f85\u8fc7\uff0c\u6e38\u620f\u548c\u5f15\u64ce\u76f8\u5173\u7684\u5404\u79cd\u95ee\u9898\uff0c\u90fd\u53ef\u968f\u610f\u804a\u804a\u3002
\u957f\u671f\u6709\u6548\u3002", "date_published": "2024-09-19T12:51:52+00:00", "title": "Unity \u7b54\u7591\uff0c\u4efb\u4f55\u95ee\u9898\u90fd\u53ef\u4ee5", "id": "t/1074178" }, { "author": { "url": "member/huzhikuizainali", "name": "huzhikuizainali", "avatar": "https://cdn.v2ex.com/avatar/1869/a390/522912_large.png?m=1752498684" }, "url": "t/1055293", "title": "\u5f53\u6211\u7528 Unity \u5f00\u53d1\u6e38\u620f\u7684\u65f6\u5019\u6709\u4ec0\u4e48\u573a\u666f\u4e0b\u8981\u4f7f\u7528\u201c\u6808\u201d\u64cd\u4f5c\uff1f", "id": "t/1055293", "date_published": "2024-07-06T06:42:17+00:00", "content_html": "

\u80cc\u666f\u8d44\u6599\uff0c\u6211\u4e0e ChatGpt \u7684\u4e24\u8f6e\u95ee\u7b54\uff1a

\n

\u6211\u95ee\uff1a\u201c\u5f53\u6211\u7528 unity+C#\u5f00\u53d1\u4e00\u6b3e\u6e38\u620f\uff0c\u5728\u4ec0\u4e48\u573a\u666f\u4e0b\u9700\u8981\u6211\u201c\u663e\u5f0f\u201d\u7684\u4f7f\u7528\u201c\u6808\u201d\uff1f\u201d

\n

ChatGpt\uff1a\nUnity \u6e38\u620f\u5f00\u53d1\u4e2d\u7684\u4f7f\u7528\u573a\u666f\n1 \u3001\u6df1\u5ea6\u4f18\u5148\u641c\u7d22\uff08 DFS \uff09\u548c\u8ff7\u5bab\u751f\u6210\uff1a\u5728\u9700\u8981\u904d\u5386\u56fe\u5f62\u7ed3\u6784\u3001\u6811\u7ed3\u6784\u6216\u751f\u6210\u8ff7\u5bab\u65f6\uff0c\u6df1\u5ea6\u4f18\u5148\u641c\u7d22\u7b97\u6cd5\u53ef\u4ee5\u4f7f\u7528\u6808\u6765\u7ba1\u7406\u8282\u70b9\u7684\u8bbf\u95ee\u987a\u5e8f\u3002

\n

2 \u3001\u56de\u6eaf\u7b97\u6cd5\uff1a\u5728\u5904\u7406\u9700\u8981\u56de\u6eaf\u7684\u7b97\u6cd5\uff0c\u5982\u6c42\u89e3\u8c1c\u9898\u3001\u8def\u5f84\u67e5\u627e\u7b49\uff0c\u53ef\u4ee5\u4f7f\u7528\u6808\u6765\u4fdd\u5b58\u72b6\u6001\u4fe1\u606f\u3002

\n

3 \u3001\u64a4\u9500\u64cd\u4f5c\uff1a\u5728\u6e38\u620f\u4e2d\u5b9e\u73b0\u64a4\u9500/\u91cd\u505a\u529f\u80fd\uff0c\u53ef\u4ee5\u4f7f\u7528\u6808\u6765\u4fdd\u5b58\u72b6\u6001\u5feb\u7167\u3002

\n

\u6211\u95ee\uff1a\u4f60\u63d0\u5230\u6e38\u620f\u5f00\u53d1\u4e2d\u6d89\u53ca\u201c\u6df1\u5ea6\u4f18\u5148\u641c\u7d22\uff08 DFS \uff09\u548c\u8ff7\u5bab\u751f\u6210\u201d\u3002\u8fd9\u4e9b\u95ee\u9898\u96be\u9053 Unity \u8fd8\u6ca1\u6709\u89e3\u51b3\u4e48\uff1f\u8fd8\u9700\u8981 C#\u7a0b\u5e8f\u5458\u81ea\u5df1\u7528\u6808\u6765\u5b9e\u73b0\u4e48\uff1f

\n

ChatGpt\uff1aUnity \u63d0\u4f9b\u4e86\u5f3a\u5927\u7684\u5de5\u5177\u548c\u7ec4\u4ef6\u6765\u7b80\u5316\u6e38\u620f\u5f00\u53d1\uff0c\u4f46\u6709\u4e9b\u7279\u5b9a\u7684\u7b97\u6cd5\u548c\u903b\u8f91\u9700\u8981\u5f00\u53d1\u8005\u81ea\u5df1\u5b9e\u73b0\uff0c\u5c24\u5176\u662f\u5f53\u6d89\u53ca\u5230\u6e38\u620f\u7684\u6838\u5fc3\u73a9\u6cd5\u8bbe\u8ba1\u548c\u7279\u5b9a\u7684\u7b97\u6cd5\u9700\u6c42\u65f6\u3002\u6df1\u5ea6\u4f18\u5148\u641c\u7d22\uff08 DFS \uff09\u548c\u8ff7\u5bab\u751f\u6210\u5c31\u662f\u8fd9\u6837\u7684\u4f8b\u5b50\u3002\u5c3d\u7ba1 Unity \u63d0\u4f9b\u4e86\u4e00\u4e9b\u57fa\u7840\u529f\u80fd\uff0c\u4f46\u5177\u4f53\u7684\u7b97\u6cd5\u5b9e\u73b0\u901a\u5e38\u9700\u8981\u5f00\u53d1\u8005\u6839\u636e\u9700\u6c42\u81ea\u884c\u7f16\u5199\u3002\u4ee5\u4e0b\u662f\u4e00\u4e9b\u9700\u8981\u5f00\u53d1\u8005\u4f7f\u7528\u6808\u6765\u5b9e\u73b0\u7684\u573a\u666f\uff1a

\n

\u6df1\u5ea6\u4f18\u5148\u641c\u7d22\uff08 DFS \uff09\nDFS \u662f\u4e00\u79cd\u5e38\u7528\u7684\u56fe\u904d\u5386\u7b97\u6cd5\uff0c\u7279\u522b\u9002\u7528\u4e8e\u4ee5\u4e0b\u573a\u666f\uff1a

\n

1 \u3001\u8def\u5f84\u67e5\u627e\uff1a\u867d\u7136 Unity \u63d0\u4f9b\u4e86 NavMesh \u8fdb\u884c\u8def\u5f84\u67e5\u627e\uff0c\u4f46\u5728\u67d0\u4e9b\u81ea\u5b9a\u4e49\u56fe\u5f62\u7ed3\u6784\uff08\u5982\u81ea\u5b9a\u4e49\u7684\u8ff7\u5bab\u6216\u8282\u70b9\u7f51\u683c\uff09\u4e2d\uff0c\u5f00\u53d1\u8005\u53ef\u80fd\u9700\u8981\u81ea\u884c\u5b9e\u73b0\u8def\u5f84\u67e5\u627e\u7b97\u6cd5\u3002

\n

2 \u3001\u6e38\u620f\u903b\u8f91\uff1a\u5728\u5b9e\u73b0\u590d\u6742\u7684\u6e38\u620f\u903b\u8f91\u65f6\uff0c\u5982 AI \u51b3\u7b56\u6811\u3001\u4efb\u52a1\u6811\u7b49\uff0cDFS \u53ef\u4ee5\u5e2e\u52a9\u904d\u5386\u548c\u5904\u7406\u8fd9\u4e9b\u6811\u72b6\u7ed3\u6784\u3002

\n

\u8ff7\u5bab\u751f\u6210\n\u8ff7\u5bab\u751f\u6210\u662f\u4e00\u4e2a\u5e38\u89c1\u7684\u6e38\u620f\u529f\u80fd\uff0c\u7279\u522b\u662f\u5728\u968f\u673a\u751f\u6210\u6e38\u620f\u4e16\u754c\u6216\u5173\u5361\u65f6\u3002\u4ee5\u4e0b\u662f\u4e00\u4e9b\u8ff7\u5bab\u751f\u6210\u7b97\u6cd5\uff1a

\n

1 \u3001\u6df1\u5ea6\u4f18\u5148\u641c\u7d22\u751f\u6210\u8ff7\u5bab\uff1a\u8fd9\u79cd\u7b97\u6cd5\u53ef\u4ee5\u751f\u6210\u5b8c\u5168\u968f\u673a\u7684\u8ff7\u5bab\u3002\u901a\u8fc7\u4f7f\u7528\u6808\u6765\u8ddf\u8e2a\u8def\u5f84\uff0c\u53ef\u4ee5\u5b9e\u73b0\u8ff7\u5bab\u7684\u751f\u6210\u3002

\n

2 \u3001Prim's \u7b97\u6cd5\uff1a\u8fd9\u662f\u4e00\u79cd\u57fa\u4e8e\u6700\u5c0f\u751f\u6210\u6811\u7684\u8ff7\u5bab\u751f\u6210\u7b97\u6cd5\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u6808\u6765\u5b9e\u73b0\u3002

\n
\n

\u6211\u7684\u95ee\u9898\uff1a

\n

1 \u3001\u8bf7\u5404\u4f4d\u8001\u5e08\u770b\u770b Chatgpt \u7b2c\u4e8c\u8f6e\u56de\u7b54\u662f\u5bf9\u7684\uff1f\u8fd8\u662f\u5728\u8fdb\u884c\u65e0\u610f\u4e49\u7684\u91cd\u590d\uff1f\u50cf\u8ff7\u5bab\u548c\u8def\u5f84\u67e5\u627e\u8fd9\u6837\u7684\u6e38\u620f\u4e2d\u5178\u578b\u573a\u666f\u771f\u7684\u8fd8\u9700\u8981 C#\u7a0b\u5e8f\u5458\u7528\u7b97\u6cd5\u624b\u52a8\u5b9e\u73b0\u4e48\uff1f Unity \u771f\u7684\u8fd8\u6ca1\u6709\u505a\u597d\u8ba9 C#\u7a0b\u5e8f\u5458\u76f4\u63a5\u8c03\u7528\u7684\u65b9\u6cd5\u6216\u51fd\u6570\uff1f

\n

2 \u3001\u6e38\u620f\u6211\u73a9\u8fc7\uff0c\u4f46\u662f Gpt \u63d0\u5230\u7684\u201c\u6c42\u89e3\u8c1c\u9898\u201d \u201c\u64a4\u9500\u64cd\u4f5c\u201d \u5206\u522b\u5bf9\u5e94\u4ec0\u4e48\u6e38\u620f\u573a\u666f\uff1f\u80fd\u4e3e\u4e2a\u4f8b\u5b50\u4e48\uff1f\u4e3a\u4ec0\u4e48\u8fd9\u4e9b\u573a\u666f\u9700\u8981\u7528\u5230\u201c\u6808\u201d\uff1f

\n" }, { "author": { "url": "member/drymonfidelia", "name": "drymonfidelia", "avatar": "https://cdn.v2ex.com/gravatar/017bcef6e642dbf067e17838a9cd447a?s=73&d=retro" }, "url": "t/1049079", "title": "\u4e3a\u4ec0\u4e48 Unity \u81ea\u5e26\u7684\u8d44\u6e90\u52a0\u5bc6\u529f\u80fd\u662f\u4e2d\u56fd\u7248\u7279\u4f9b\u7684\uff1f", "id": "t/1049079", "date_published": "2024-06-12T20:39:45+00:00", "content_html": "" }, { "author": { "url": "member/Brand001", "name": "Brand001", "avatar": "https://cdn.v2ex.com/avatar/4750/26af/669784_large.png?m=1709200187" }, "url": "t/1043030", "title": "Unity \u8fdc\u7a0b\u5f00\u53d1\u5c97\u4f4d\uff0c\u611f\u5174\u8da3\u5c0f\u4f19\u4f34\u770b\u8fc7\u6765", "id": "t/1043030", "date_published": "2024-05-22T09:58:07+00:00", "content_html": "unity \u5f00\u53d1\u5de5\u7a0b\u5e08
\u804c\u4f4d\u804c\u8d23\uff1a
1 \u3001\u4f7f\u7528 Unity3D \u8fdb\u884c\u6e38\u620f\u5ba2\u6237\u7aef\u6838\u5fc3\u6a21\u5757\u5f00\u53d1\uff0c\u8d1f\u8d23\u6e38\u620f\u6838\u5fc3\u67b6\u6784\u7684\u642d\u5efa\u4ee5\u53ca\u6280\u672f\u653b\u5173\uff1b
2 \u3001\u8d1f\u8d23\u4e0e\u7b56\u5212\u3001\u670d\u52a1\u7aef\u6c9f\u901a\u786e\u5b9a\u5f00\u53d1\u9700\u6c42\uff0c\u534f\u8c03\u670d\u52a1\u7aef\u3001\u7b56\u5212\u3001\u7f8e\u672f\u4e4b\u95f4\u7684\u5de5\u4f5c\uff1b
3 \u3001\u719f\u6089 Unity3D \u5f15\u64ce\u67b6\u6784\u8bbe\u8ba1\uff0c\u719f\u6089 Unity3d \u5e38\u7528\u63d2\u4ef6\uff0c\u81f3\u5c11\u638c\u63e1\u4e00\u79cd UI \u5de5\u5177\uff0c\u7cbe\u901a 3D \u56fe\u5f62\u5b66\u539f\u7406\uff0c\u4e86\u89e3 Unity3D \u7684 shaderlab \u8bed\u8a00\u548c\u7269\u7406\u5f15\u64ce\uff1b
4 \u3001\u719f\u6089 3d \u5f15\u64ce\u4e2d\u7684\u52a8\u753b\u539f\u7406\uff0c\u719f\u6089 unity \u4e2d\u7684\u52a8\u753b\u89e3\u51b3\u65b9\u6848\uff1b
5 \u3001\u8d1f\u8d23\u7a0b\u5e8f\u5f00\u53d1\u5de5\u4f5c\u786e\u4fdd\u9879\u76ee\u7a0b\u5e8f\u8fdb\u5ea6\uff1b
6 \u3001\u914d\u5408\u9879\u76ee\u8d1f\u8d23\u4eba\u5b8c\u6210\u9879\u76ee\u5236\u4f5c\uff1b
7 \u3001\u80fd\u591f\u63d0\u51fa\u5404\u79cd\u5ba2\u6237\u7aef\u7591\u96be\u95ee\u9898\u7684\u89e3\u51b3\u65b9\u6848\u3002
\u804c\u4f4d\u8981\u6c42\uff1a
1 \u3001\u4e86\u89e3 Unity3D \u5f15\u64ce\u67b6\u6784\u8bbe\u8ba1\uff0c\u719f\u6089 C#\u8bed\u8a00\uff08\u540c\u65f6\u719f\u6089 c/c++\u4f18\u5148\u8003\u8651\uff09\u53ca lua \u8bed\u8a00\uff1b
2 \u3001\u6709\u4e25\u8c28\u7684\u903b\u8f91\u601d\u7ef4\u80fd\u529b\uff0c\u5584\u4e8e\u9605\u8bfb\u4ee3\u7801\uff0c\u81ea\u5b66\u80fd\u529b\u5f3a\uff1b
3 \u3001\u6709\u5206\u6790\u4e0e\u89e3\u51b3\u95ee\u9898\u80fd\u529b\uff1b
4 \u3001\u81f3\u5c11\u7ecf\u5386\u8fc7\u4e00\u6b3e\u6e38\u620f\u7684\u5b8c\u6574\u5f00\u53d1\u671f\u5e76\u62c5\u4efb\u91cd\u8981\u804c\u4f4d\uff0c\u6709\u5b8c\u6574\u53c2\u4e0e\u4e0a\u7ebf\u9879\u76ee\u7684\u7ecf\u9a8c\u8005\u4f18\u5148\u3002
5 \u3001\u6709 AVG \u54c1\u7c7b\u6e38\u620f\u5f00\u53d1\u7ecf\u9a8c\u4f18\u5148\u3002
\u5de5\u4f5c\u65b9\u5f0f\u53ca\u8bed\u8a00\uff1a
\u5168\u804c\u8fdc\u7a0b\u5de5\u4e2d\u4f5c
\u8bed\u8a00\uff1a\u4e2d\u6587
\u8fdc\u7a0b\u5de5\u4f5c\u65f6\u95f4\uff1a\u5317\u4eac\u65f6\u95f4 10\uff1a00 - 20\uff1a00 \uff0c\u5348\u4f11 2H \uff0c\u5468\u672b\u53cc\u4f11+\u6cd5\u5b9a\u8282\u5047\u65e5
\u7b80\u5386\u6295\u9012\u90ae\u7bb1\uff1a zygs2151@gmail.com" }, { "author": { "url": "member/Fffys", "name": "Fffys", "avatar": "https://cdn.v2ex.com/gravatar/85fa8350ce7b30870cabe6b424636707?s=73&d=retro" }, "url": "t/1037612", "title": "unity 2D \u50cf\u7d20\u7cbe\u7075\u7684\u751f\u6210\u6709\u63a8\u8350\u7684\u65b9\u6cd5\u5417\uff1f", "id": "t/1037612", "date_published": "2024-05-03T16:58:05+00:00", "content_html": "\n

\u8fd8\u6709\u5176\u5b83\u7684\u65b9\u6cd5\u63a8\u8350\u5417\uff1f

\n

\u6216\u8005\uff0cunity \u4e4b\u5916\u7684\u9009\u62e9\uff0c\u53ea\u8981\u80fd\u591f\u7528\u6765\u505a 2D \u50cf\u7d20\u6e38\u620f\uff0c\u5e76\u4e14 2D \u7cbe\u7075\u7684\u751f\u6210\u4f7f\u7528 AI \u6bd4\u8f83\u65b9\u4fbf\u7684\uff1f

\n" }, { "author": { "url": "member/Brand001", "name": "Brand001", "avatar": "https://cdn.v2ex.com/avatar/4750/26af/669784_large.png?m=1709200187" }, "url": "t/1033837", "title": "\u8fdc\u7a0b Unity \u5f00\u53d1\u5de5\u7a0b\u5e08\uff08\u82f1\u56fd\uff09", "id": "t/1033837", "date_published": "2024-04-19T02:21:35+00:00", "content_html": "unity \u5f00\u53d1\u5de5\u7a0b\u5e08
\u804c\u4f4d\u804c\u8d23\uff1a
1 \u3001\u4f7f\u7528 Unity3D \u8fdb\u884c\u6e38\u620f\u5ba2\u6237\u7aef\u6838\u5fc3\u6a21\u5757\u5f00\u53d1\uff0c\u8d1f\u8d23\u6e38\u620f\u6838\u5fc3\u67b6\u6784\u7684\u642d\u5efa\u4ee5\u53ca\u6280\u672f\u653b\u5173\uff1b
2 \u3001\u8d1f\u8d23\u4e0e\u7b56\u5212\u3001\u670d\u52a1\u7aef\u6c9f\u901a\u786e\u5b9a\u5f00\u53d1\u9700\u6c42\uff0c\u534f\u8c03\u670d\u52a1\u7aef\u3001\u7b56\u5212\u3001\u7f8e\u672f\u4e4b\u95f4\u7684\u5de5\u4f5c\uff1b
3 \u3001\u719f\u6089 Unity3D \u5f15\u64ce\u67b6\u6784\u8bbe\u8ba1\uff0c\u719f\u6089 Unity3d \u5e38\u7528\u63d2\u4ef6\uff0c\u81f3\u5c11\u638c\u63e1\u4e00\u79cd UI \u5de5\u5177\uff0c\u7cbe\u901a 3D \u56fe\u5f62\u5b66\u539f\u7406\uff0c\u4e86\u89e3 Unity3D \u7684 shaderlab \u8bed\u8a00\u548c\u7269\u7406\u5f15\u64ce\uff1b
4 \u3001\u719f\u6089 3d \u5f15\u64ce\u4e2d\u7684\u52a8\u753b\u539f\u7406\uff0c\u719f\u6089 unity \u4e2d\u7684\u52a8\u753b\u89e3\u51b3\u65b9\u6848\uff1b
5 \u3001\u8d1f\u8d23\u7a0b\u5e8f\u5f00\u53d1\u5de5\u4f5c\u786e\u4fdd\u9879\u76ee\u7a0b\u5e8f\u8fdb\u5ea6\uff1b
6 \u3001\u914d\u5408\u9879\u76ee\u8d1f\u8d23\u4eba\u5b8c\u6210\u9879\u76ee\u5236\u4f5c\uff1b
7 \u3001\u80fd\u591f\u63d0\u51fa\u5404\u79cd\u5ba2\u6237\u7aef\u7591\u96be\u95ee\u9898\u7684\u89e3\u51b3\u65b9\u6848\u3002
\u804c\u4f4d\u8981\u6c42\uff1a
1 \u3001\u4e86\u89e3 Unity3D \u5f15\u64ce\u67b6\u6784\u8bbe\u8ba1\uff0c\u719f\u6089 C#\u8bed\u8a00\uff08\u540c\u65f6\u719f\u6089 c/c++\u4f18\u5148\u8003\u8651\uff09\u53ca lua \u8bed\u8a00\uff1b
2 \u3001\u6709\u4e25\u8c28\u7684\u903b\u8f91\u601d\u7ef4\u80fd\u529b\uff0c\u5584\u4e8e\u9605\u8bfb\u4ee3\u7801\uff0c\u81ea\u5b66\u80fd\u529b\u5f3a\uff1b
3 \u3001\u6709\u5206\u6790\u4e0e\u89e3\u51b3\u95ee\u9898\u80fd\u529b\uff1b
4 \u3001\u81f3\u5c11\u7ecf\u5386\u8fc7\u4e00\u6b3e\u6e38\u620f\u7684\u5b8c\u6574\u5f00\u53d1\u671f\u5e76\u62c5\u4efb\u91cd\u8981\u804c\u4f4d\uff0c\u6709\u5b8c\u6574\u53c2\u4e0e\u4e0a\u7ebf\u9879\u76ee\u7684\u7ecf\u9a8c\u8005\u4f18\u5148\u3002
5 \u3001\u6709 AVG \u54c1\u7c7b\u6e38\u620f\u5f00\u53d1\u7ecf\u9a8c\u4f18\u5148\u3002
\u5de5\u4f5c\u65b9\u5f0f\u53ca\u8bed\u8a00\uff1a
\u5168\u804c\u8fdc\u7a0b\u5de5\u4e2d\u4f5c
\u8bed\u8a00\uff1a\u4e2d\u6587
\u8fdc\u7a0b\u5de5\u4f5c\u65f6\u95f4\uff1a\u5317\u4eac\u65f6\u95f4 10\uff1a00 - 20\uff1a00 \uff0c\u5348\u4f11 2H \uff0c\u5468\u672b\u53cc\u4f11+\u6cd5\u5b9a\u8282\u5047\u65e5
\u7b80\u5386\u6295\u9012\u90ae\u7bb1\uff1a zygs2151@gmail.com" }, { "author": { "url": "member/manasheep", "name": "manasheep", "avatar": "https://cdn.v2ex.com/avatar/f4a1/8f48/227374_large.png?m=1708345875" }, "url": "t/1016296", "date_modified": "2024-02-18T10:45:29+00:00", "content_html": "\u60f3\u81ea\u5df1\u5f00\u53d1\u4e2a\u5361\u724c\u6e38\u620f\u8bd5\u8bd5", "date_published": "2024-02-18T08:54:03+00:00", "title": "\u6c42\u63a8\u8350\u70b9 Unity \u5165\u95e8\u6559\u7a0b", "id": "t/1016296" }, { "author": { "url": "member/JackMaMa", "name": "JackMaMa", "avatar": "https://cdn.v2ex.com/gravatar/aa1b26c85960c29c25dd71caaf0c78f9?s=73&d=retro" }, "url": "t/999583", "title": "\u8bf7\u6559\u4e2a\u8bed\u97f3\u542c\u5199\u7684\u95ee\u9898", "id": "t/999583", "date_published": "2023-12-12T01:51:18+00:00", "content_html": "

\u81ea\u5df1\u7528 unity \u5f00\u53d1\u4e86\u6570\u5b57\u4eba\uff0c\u652f\u6301\u4e24\u4e2a\u4e3b\u8981\u529f\u80fd\u90fd\u4f7f\u7528\u4e86 Windows \u81ea\u5e26\u7684\u8bed\u97f3\u542c\u5199\u548c\u5524\u9192\u80fd\u529b\uff1a

\n\n

\u73b0\u5728\u78b0\u5230\u4e24\u4e2a\u95ee\u9898

\n
    \n
  1. \u8bed\u97f3\u5524\u9192\u65f6\uff0c\u9ea6\u514b\u98ce\u4f1a\u5360\u7528\uff0c\u8fd9\u65f6\u5019\u53bb\u4ea4\u4e92\u65f6\uff0c\u5076\u5c14\u4f1a\u6ca1\u6709\u54cd\u5e94\uff0c\u53ef\u80fd\u662f\u6ca1\u6709\u91ca\u653e
  2. \n
  3. \u6700\u5c0f\u5316\u540e\u518d\u8fd4\u56de\uff0c\u80af\u5b9a\u65e0\u6cd5\u5524\u9192
  4. \n
\n

\u6709\u641e\u8fc7\u7c7b\u4f3c\u7684\u5927\u4f6c\u7ed9\u70b9\u601d\u8def\uff1f

\n" }, { "author": { "url": "member/sunny1688", "name": "sunny1688", "avatar": "https://cdn.v2ex.com/avatar/baa9/20c1/434258_large.png?m=1716890308" }, "url": "t/988000", "date_modified": "2023-11-03T01:29:09+00:00", "content_html": "

\u662f\u8fd9\u6837\u7684\uff0c\u9879\u76ee A \u662f\u7528 Unity Hub \u521b\u5efa\u7684\u4e00\u4e2a 3D \u9879\u76ee\uff0c\u9879\u76ee A \u7684\u5f00\u53d1\u3001\u6253\u5305\u90fd\u6ca1\u6709\u95ee\u9898\uff0c\u4e00\u5207\u90fd\u662f\u6b63\u5e38\u7684\uff0c

\n

\u5047\u8bbe\u9879\u76ee A \u5b58\u653e\u7684\u8def\u5f84\u662f\uff1a/project/A

\n

\u7531\u4e8e\u6700\u8fd1\u8981\u5f00\u53d1\u65b0\u9879\u76ee\uff0c\u53ef\u4ee5\u57fa\u4e8e\u9879\u76ee A \u53bb\u505a\u5f00\u53d1\uff0c\u4f46\u662f\u8981\u9694\u79bb\u9879\u76ee A \uff0c\u6240\u4ee5\u6211\u590d\u5236\u9879\u76ee A \u5230\u4e00\u4e2a\u65b0\u7684\u6587\u4ef6\u5939\uff0c\u5f53\u6210\u65b0\u7684\u9879\u76ee\u53bb\u505a\u5f00\u53d1\uff0c\u8fd9\u91cc\u53eb\u505a\u9879\u76ee B \u3002

\n
cp -r /project/A/* /project/B\n
\n

\u5728\u9879\u76ee B \u4e0a\u5df2\u7ecf\u5f00\u53d1\u4e86\u4e00\u4e9b\u529f\u80fd\uff0cUnity \u7f16\u8f91\u5668\u4e5f\u53ef\u4ee5\u6b63\u5e38\u8dd1\u8d77\u6765\u3001\u6ca1\u6709\u62a5\u9519\u3001\u80fd build \u9879\u76ee\u6210\u529f(iOS)\u3002

\n

\u7528 xcode \u6253\u5305\u5230\u624b\u673a\u4e0a\uff0c\u6253\u5f00 App \uff0c\u53f3\u4e0b\u89d2\u51fa\u73b0 \"trial version\" \u6807\u8bc6\uff0cUnity \u8bb8\u53ef\u8bc1\u6ca1\u6709\u8fc7\u671f(\u4e2a\u4eba\u7248)\u3002

\n

\u9879\u76ee A \u5e76\u6ca1\u6709\"trial version\" \u6807\u8bc6\uff0c\u662f\u4e0d\u80fd\u8fd9\u6837\u590d\u5236\u9879\u76ee\u5417\uff1f

\n

\u8bf7\u95ee\u8fd9\u662f\u4ec0\u4e48\u539f\u56e0\uff1f\u6709\u9047\u5230\u8fc7\u7684\u5417\uff1f\u6709\u89e3\u51b3\u65b9\u6848\u5417\uff1f\u6c42\u6551\uff0c\u8c22\u8c22\u5927\u4f6c\u4eec

\n", "date_published": "2023-11-02T11:48:14+00:00", "title": "Unity \u6253\u5305\u540e\u51fa\u73b0 \"trial version\"", "id": "t/988000" }, { "author": { "url": "member/Shaar", "name": "Shaar", "avatar": "https://cdn.v2ex.com/avatar/c483/dde7/525483_large.png?m=1721300352" }, "url": "t/985724", "date_modified": "2023-10-27T00:10:13+00:00", "content_html": "

\u5bb6\u91cc\u53ea\u6709\u53f0\u8001 pc \u6027\u80fd\u4e0d\u597d\uff0c\u81ea\u5df1\u6709\u53f0 m2 mac,\u5728\u7528\u6765\u5f00\u53d1 unity2d \u6e38\u620f\uff0c\u7528\u8d77\u6765\u662f\u4e0d\u5361\u7684\uff0c\u6027\u80fd\u4e5f\u591f\u7528\u3002\n\u5c31\u662f\u4e0d\u77e5\u9053\u600e\u4e48\u56de\u4e8b\uff0cunity \u7279\u522b\u5bb9\u6613\u5d29\uff0c\u6700\u8fd1\u4e00\u5929\u5d29\u4e94\u516d\u6b21\uff0c\u5185\u5b58\u4e5f\u591f\u7528\u3002\u76f4\u63a5\u7ed9\u6574\u81ea\u95ed\u4e86\n\u7528 Macbook \u5f00\u53d1\u662f\u56e0\u4e3a\u7eed\u822a\u548c\u6027\u80fd\u90fd\u5f88\u597d\uff0c\u5c31\u4e0d\u60f3\u53bb\u641e\u4e4b\u524d\u7684\u8001 pc\n\u9664\u4e86 unity \u8001\u5d29\u6e83\uff0c\u6ca1\u5176\u4ed6\u6bdb\u75c5\u4e86\n\u6709\u8001\u54e5\u77e5\u9053\u8fd9\u662f\u600e\u4e48\u56de\u4e8b\u5417\uff0c\u8fd8\u6709\u7684\u6551\u5417

\n", "date_published": "2023-10-26T09:13:13+00:00", "title": "\u6709\u6ca1\u8001\u54e5\u7528 m2 \u5f00\u53d1 unity \u7684", "id": "t/985724" }, { "author": { "url": "member/famon", "name": "famon", "avatar": "https://cdn.v2ex.com/gravatar/88903f1ba4a250a2825fd4761432ea7d?s=73&d=retro" }, "url": "t/974113", "date_modified": "2023-09-15T08:58:24+00:00", "content_html": "

\u4e2d\u6587\u4e3b\u9898\u7f51\u7ad9 https://blog.unity.com/cn/news/plan-pricing-and-packaging-updates", "date_published": "2023-09-15T06:55:05+00:00", "title": "\u5982\u4f55\u770b\u5f85 Unity \u65b0\u51fa\u7684\u6bcf\u6b21\u5b89\u88c5\u6536\u8d39\uff1f", "id": "t/974113" }, { "author": { "url": "member/woodfizky", "name": "woodfizky", "avatar": "https://cdn.v2ex.com/avatar/87a6/dfbc/621021_large.png?m=1774945282" }, "url": "t/973768", "date_modified": "2023-09-14T08:51:07+00:00", "content_html": "https://blog.unity.com/news/plan-pricing-and-packaging-updates

\u4e0d\u80fd\u7406\u89e3\u662f\u4ec0\u4e48\u652f\u6491 Unity \u505a\u51fa\u8fd9\u6837\u7684\u51b3\u5b9a\u3002

\u7528\u6237\u53ef\u4ee5\u5728\u591a\u8bbe\u5907\u4e0a\u5b89\u88c5\u540c\u4e00\u4e2a\u6e38\u620f\uff0c\u751a\u81f3\u56e0\u4e3a\u5b58\u50a8\u7a7a\u95f4\u95ee\u9898\u5728\u4e00\u4e2a\u8bbe\u5907\u4e0a\u53cd\u590d\u5b89\u88c5\u5378\u8f7d\u540c\u4e00\u4e2a\u6e38\u620f\uff0c\u4f46\u662f\u540c\u4e00\u4e2a\u6e38\u620f\uff08\u4e70\u65ad\u5236\uff09\uff0c\u7528\u6237\u901a\u5e38\u53ea\u4f1a\u4e70\u4e00\u6b21\u3002



\u540e\u7eed\u53c8\u770b\u5230\u6709\u8bf4\u6cd5\uff0cunity \u8868\u793a\u53ea\u4f1a\u8ba1\u7b97\u540c\u4e00\u4e2a\u5e73\u53f0\u7684\u540c\u4e00\u4e2a\u6e38\u620f\u7684\u521d\u59cb\u4e0b\u8f7d\uff0c\u90a3\u4e48\u95ee\u9898\u6765\u4e86\uff0c\u8fd9\u4e2a\u600e\u4e48\u7edf\u8ba1\uff1f\u6d89\u53ca\u6536\u96c6\u7528\u6237\u6570\u636e\u4e86\u5427\uff1f", "date_published": "2023-09-14T07:16:33+00:00", "title": "\u4e3a\u4ec0\u4e48 Unity \u7684\u5b9a\u4ef7\u7b56\u7565\u589e\u52a0\u4e86\u5bf9\u5b89\u88c5\u91cf\u7684\u9650\u5236\uff1f", "id": "t/973768" }, { "author": { "url": "member/CloveAndCurrant", "name": "CloveAndCurrant", "avatar": "https://cdn.v2ex.com/gravatar/1a31eae8e7fb75fdda9a083213382b33?s=73&d=retro" }, "url": "t/973463", "title": "unity \u5c06\u4e8e 2024 \u5e74 1 \u6708\u8c03\u6574\u6536\u8d39\u6a21\u5f0f", "id": "t/973463", "date_published": "2023-09-13T09:33:43+00:00", "content_html": "

unity \u5c06\u4e8e 2024 \u5e74 1 \u6708\u8c03\u6574\u6536\u8d39\u6a21\u5f0f\uff0c\u6309\u5b89\u88c5\u6b21\u6570\u8ba1\u8d39\uff0c\u6bcf\u5b89\u88c5\u4e00\u6b21\u90fd\u8981\u638f\u94b1\u3002\n\u5177\u4f53\u53ef\u4ee5\u67e5\u770b unity X\uff1a https://twitter.com/unity/status/1701650081403842851\n\u5bf9\u4e8e\u5927\u516c\u53f8(\u4e70\u65ad\u5236)\uff0c\u5f71\u54cd\u4e0d\u5927\uff0c\u5bf9\u4e8e\u5c0f\u4f01\u4e1a\u4ee5\u53ca\u72ec\u7acb\u5f00\u53d1\u8005\u662f\u5de8\u5927\u6253\u51fb\u3002

\n" }, { "author": { "url": "member/Back2life", "name": "Back2life", "avatar": "https://cdn.v2ex.com/avatar/342b/d914/579113_large.png?m=1664724359" }, "url": "t/904814", "date_modified": "2022-12-26T14:29:06+00:00", "content_html": "

\u76ee\u524d\u5728\u5c1d\u8bd5\u72ec\u7acb\u5f00\u53d1\u6e38\u620f\uff0c\u73b0\u5b66 C#\u7f16\u7a0b\uff0c\u4e00\u8def\u4e0a\u56f0\u96be\u91cd\u91cd\uff0c\u4f46\u4eca\u5929\u9047\u5230\u4e86\u4e00\u4e2a\u6700\u81f4\u547d\u7684\u3002

\n

\u6211\u6bcf\u6b21\u5728 Unity \u7f16\u8f91\u5668\u5185\u8fd0\u884c\uff0c\u6216\u8005 [\u6587\u4ef6] -[\u6784\u5efa\u5e76\u8fd0\u884c]\uff0c\u6e38\u620f\u90fd\u80fd\u6b63\u5e38\u8fd0\u8f6c\uff0c\u4f46\u662f\uff0c\u5f53\u6211\u5728\u7f16\u8f91\u5668\u5916\uff0c\u53cc\u51fb\u6253\u5f00\u6784\u5efa\u51fa\u7684 exe \u6587\u4ef6\u6765\u8fd0\u884c\u6e38\u620f\uff0c\u5374\u53d1\u73b0\u6e38\u620f\u5185\u5bb9\u53d8\u5f97\u6b8b\u7f3a\u3002\u5177\u4f53\u8868\u73b0\u662f\uff0c\u9664\u4e86\u5e26\u6709\u8d34\u56fe\u7684\u57fa\u672c\u7269\u7406\u5bf9\u8c61\u6b63\u5e38\u663e\u793a\u4e4b\u5916\uff0c\u5176\u4ed6\u7684\u5185\u5bb9\u90fd\u6ca1\u6709\u88ab\u8fd0\u884c\u51fa\u6765\u2026\u2026

\n

\u4e0d\u77e5\u9053\u8bba\u575b\u6709\u6ca1\u6709\u78b0\u5de7\u4f1a Unity \u7684\u5927\u4f6c\uff0c\u80fd\u591f\u6307\u70b9\u8ff7\u6d25\uff0c\u6216\u8005\u5927\u5bb6\u89c9\u5f97 Godot \u8fd9\u4e2a\u5f15\u64ce\u600e\u4e48\u6837\u2026\u2026 (\u0b87\u0434\u0b87; )

\n

\u8865\u5145\uff1a\n\u6e38\u620f\u7684\u8d44\u6e90\u4f8b\u5982\u8d34\u56fe\u548c\u9884\u5236\u4ef6\u90fd\u653e\u5728 Resources \u6587\u4ef6\u5939\uff1b\n\u6570\u636e\u5e93\u5b58\u653e\u5728 StreamingAssets \u6587\u4ef6\u5939\uff0csqlite3.dll \uff08 SQLite4Unity3d \u63d2\u4ef6\uff09\uff1b\n\u6e38\u620f\u5b58\u5728\u5927\u91cf\u7684 \u6807\u7b7e\u8d4b\u4e88 \u548c \u67e5\u627e\u5e26\u6807\u7b7e\u7684\u5bf9\u8c61 \u7684\u8bed\u53e5

\n", "date_published": "2022-12-26T11:34:56+00:00", "title": "[Unity \u79bb\u5947 Bug] \u6e38\u620f\u5728\u7f16\u8f91\u5668\u5185\u8fd0\u884c ok\uff0c\u6784\u5efa\u51fa\u7684 exe \u5374\u4e0d\u80fd\u5728\u672c\u673a\u6b63\u5e38\u8fd0\u884c", "id": "t/904814" }, { "author": { "url": "member/zeronofreya", "name": "zeronofreya", "avatar": "https://cdn.v2ex.com/avatar/0999/bc21/478508_large.png?m=1638280627" }, "url": "t/836040", "date_modified": "2022-02-23T19:44:24+00:00", "content_html": "

\u6807\u51c6 XYZ \u7a7a\u95f4\uff0c\u53ea\u77e5\u9053\u76f4\u7ebf\u7684\u65cb\u8f6c\u89d2\u5ea6\uff0c\u600e\u4e48\u6c42\u65b9\u5411\u5411\u91cf\uff1f

\n

\u6bd4\u5982\u65cb\u8f6c\u89d2\u5ea6\u4e3a\uff1a

\n
(30, 30, 30)\n
\n

\u5de5\u4f5c\u51e0\u5e74\u540e\u8fd9\u4e9b\u4e1c\u897f\u5168\u5fd8\u4e86\uff0c\u4e5f\u4e0d\u77e5\u9053\u8be5\u53d1\u54ea\uff0c\u4f5c\u4e1a\u5e2e\u4e48\u2026\u2026

\n

\u6709\u4f1a\u7684\u670b\u53cb\u6307\u70b9\u4e00\u4e0b\u5427\uff0c\u8c22\u8c22

\n", "date_published": "2022-02-23T14:38:43+00:00", "title": "3 \u7ef4\u7a7a\u95f4\u4e2d\uff0c\u6c42\u8fc7\u539f\u70b9\u7684\u76f4\u7ebf\u7684\u65b9\u5411\u5411\u91cf\uff1f", "id": "t/836040" }, { "author": { "url": "member/Zhuzhuchenyan", "name": "Zhuzhuchenyan", "avatar": "https://cdn.v2ex.com/avatar/7c0c/20fd/463901_large.png?m=1776171454" }, "url": "t/770382", "title": "\u6c42\u63a8\u8350\u8d44\u6e90 - \u4fef\u77b0\u89c6\u89d2\u573a\u666f\u8bbe\u8ba1\u76f8\u5173", "id": "t/770382", "date_published": "2021-04-13T09:05:21+00:00", "content_html": "

\u5404\u4f4d\u597d\uff0c

\n

\u5c0f\u5f1f\u6700\u8fd1\u5728\u505a\u4e00\u6b3e\u4fef\u77b0\u89c6\u89d2\u7684\u57fa\u4e8e\u7f51\u7edc\u5bf9\u6218\u5c0f\u6e38\u620f\uff0c\uff08\u4e0d\u77e5\u9053\u4fef\u77b0\u89c6\u89d2\u8fd9\u4e2a\u8bcd\u6c47\u7528\u7684\u5bf9\u4e0d\u5bf9\uff0c\u5404\u4f4d\u53ef\u4ee5\u8111\u8865\u4e0b\u738b\u8005\u8363\u8000\u8fd9\u79cd MOBA \u7c7b\u6e38\u620f\u7684\u89c6\u89d2\uff0c\u6709\u4e0d\u5bf9\u7684\u8bdd\u8fd8\u8bf7\u6307\u51fa\uff09

\n

\u76ee\u524d\u6e38\u620f\u539f\u578b\u7684\u5f00\u53d1\u6b63\u5728\u6709\u6761\u4e0d\u7d0a\u7684\u8fdb\u884c\uff0c\u4e4b\u524d\u4e13\u6ce8\u4e8e\u6e38\u620f\u7cfb\u7edf\u7684\u8bbe\u8ba1\uff0c\u7f8e\u672f\u8d44\u6e90\u4e00\u5207\u4ece\u7b80\uff0c\u573a\u666f\u91cc\u57fa\u672c\u90fd\u662f\u6761\u6761\u6846\u6846\u7684\u7b80\u7ea6\u7ebf\u6761\u3002Alpha \u6d4b\u8bd5\u7248\u672c\u53d1\u5e03\u4e4b\u540e\uff0c\u6d4b\u8bd5\u73a9\u5bb6\u5410\u69fd\u5f88\u5927\u7684\u4e00\u70b9\u5c31\u662f\u6781\u4e3a\u5355\u8c03\u7684\u573a\u666f\uff0c\u6240\u4ee5\u76ee\u524d\u60f3\u5728\u8fd9\u65b9\u9762\u505a\u70b9\u6539\u8fdb\u3002

\n

\u6bd5\u7adf\u662f\u5c0f\u56e2\u961f\uff0c\u6ca1\u6709\u8fd9\u4e2a\u80fd\u529b\u548c\u8d44\u672c\u53bb\u7ef4\u62a4\u4e00\u5957\u81ea\u5df1\u7684\u7f8e\u672f\u98ce\u683c\uff0c\u6240\u4ee5\u5e0c\u671b\u80fd\u627e\u4e2a\u5927\u800c\u5168\u7684\u7d20\u6750\u5305\u5c06\u6574\u4e2a\u6218\u6597\u573a\u666f\u7684\u9700\u6c42\u5305\u8fdb\u53bb\u3002\u6b63\u597d Unity \u8d44\u6e90\u5546\u5e97\u6625\u5b63\u6253\u6298\u4e86\uff0c\u6240\u4ee5\u60f3\u6765\u8fd9\u91cc\u95ee\u4e00\u4e0b\u5404\u4f4d\u6709\u4ec0\u4e48\u548c\u573a\u666f\u8bbe\u8ba1\u7d20\u6750\u76f8\u5173\u7684 3D \u8d44\u6e90\u63a8\u8350\u7684\u561b\uff1f

\n

\u4e0d\u5728 Unity \u5546\u5e97\u7684\u8d44\u6e90\u4e5f\u53ef\u4ee5\uff0c\u6bd5\u7adf\u6d77\u5916\u5546\u5e97\u7684\u8d44\u6e90\u57fa\u672c\u6ca1\u6709\u56fd\u98ce\u8d44\u6e90\u53ef\u4ee5\u53c2\u8003\uff0c\n\u8fd9\u91cc\u62dc\u8c22\uff0c

\n

Zhuzhu

\n" }, { "author": { "url": "member/JasonXuDeveloper", "name": "JasonXuDeveloper", "avatar": "https://cdn.v2ex.com/avatar/8e48/56e7/506073_large.png?m=1607255169" }, "url": "t/732682", "date_modified": "2020-12-06T10:11:45+00:00", "content_html": "

\u5728\u8fd9\u91cc\u5b89\u5229\u4e00\u4e2a\u81ea\u5df1\u7684\u6846\u67b6\uff0cJEngine\uff0c\u8be5 repo \u5efa\u7acb\u4e86\u63a5\u8fd1 5 \u4e2a\u6708\uff0c\u5df2\u7ecf\u63a5\u8fd1 400star\uff0c\u591a\u4e2a\u516c\u53f8\u9879\u76ee\u5df2\u5b8c\u6210\u5bf9\u63a5\uff0c\u6846\u67b6\u8d28\u91cf\u5c31\u4e0d\u7528\u591a\u8bf4\u4e86

\n

JEngine \u662f\u9488\u5bf9 Unity \u5f00\u53d1\u8005\u8bbe\u8ba1\u7684\u5f00\u7bb1\u5373\u7528\u7684\u6846\u67b6\uff0c\u5c01\u88c5\u4e86\u5f3a\u5927\u7684\u529f\u80fd\uff0c\u5c0f\u767d\u4e5f\u80fd\u5feb\u901f\u4e0a\u624b\uff0c\u8f7b\u677e\u5236\u4f5c\u53ef\u4ee5\u70ed\u66f4\u65b0\u7684\u6e38\u620f\n\u94fe\u63a5\uff1ahttps://github.com/JasonXuDeveloper/JEngine

\n

JEngine \u6709\u5927\u91cf\u89c6\u9891\u6559\u7a0b\u53ca\u6587\u6863\uff0c\u5e76\u4e14\u53ef\u4ee5\u5b9e\u73b0\u8d44\u6e90\u70ed\u66f4+C#\u4ee3\u7801\u70ed\u66f4\uff0c\u518d\u4e5f\u4e0d\u9700\u8981\u5199 Lua \u4e86\uff01

\n

\u4e0e\u6b64\u540c\u65f6 JEngine \u8fd8\u652f\u6301\u5c06\u70ed\u66f4\u7c7b\u62d6\u62fd\u8d4b\u503c\u5230 GameObject \u4e0a\uff0c\u5bf9\u5c0f\u767d\u53ef\u8c13\u662f\u65e0\u654c\u7684\u53cb\u597d\uff1b

\n

JEngine \u8fd8\u6709\u5f88\u591a\u5f3a\u5927\u7684\u529f\u80fd\u7b49\u4f60\u53d1\u73b0\uff01

\n", "date_published": "2020-12-06T10:11:29+00:00", "title": "\u9707\u60ca\uff0c\u6709\u4e2a\u6846\u67b6\u7adf\u7136\u80fd\u5feb\u901f\u8ba9 Unity \u65b0\u624b\u5236\u4f5c\u53ef\u70ed\u66f4\u6e38\u620f\uff01\u7adf\u7136\u53ef\u4ee5\u8ba9\u8001\u9879\u76ee\u5feb\u901f\u5bf9\u63a5\u5177\u5907\u70ed\u66f4\u6027\u8d28\uff01", "id": "t/732682" }, { "author": { "url": "member/rizon", "name": "rizon", "avatar": "https://cdn.v2ex.com/avatar/8b75/b98f/305534_large.png?m=1777440620" }, "url": "t/728440", "date_modified": "2020-11-23T10:48:05+00:00", "content_html": "

\u80cc\u666f\uff1a\u6211\u662f\u7528 mac +rider \u5f00\u53d1

\n

\u95ee\u9898 1:\n\"\"\n\u5982\u56fe\uff0c\u8fd9\u91cc\u7684\u751f\u6210 csproj \u7684\u4e24\u4e2a\u9009\u9879\uff0c\u4e0d\u77e5\u9053\u8be5\u4e0d\u8be5\u52fe\u9009\uff0ccsproj \u7684\u6982\u5ff5\u6211\u7406\u89e3\u5c31\u662f\u8ba9\u7f16\u8f91\u5668\u66f4\u597d\u7684\u5de5\u4f5c\u7684\uff0c\u53ef\u662f\u6211\u52fe\u9009\u548c\u4e0d\u52fe\u9009\u5728 rider \u4e2d\u5b9e\u5728\u770b\u4e0d\u51fa\u533a\u522b\u3002\n\u6240\u4ee5\u9ebb\u70e6\u5e2e\u5fd9\u89e3\u91ca\u4e0b\u8fd9\u4e2a\u9009\u4e86\u5bf9 rider \u6765\u8bf4\u6709\u4ec0\u4e48\u597d\u5904\uff1f\u8be5\u4e0d\u8be5\u52fe\u9009\uff1f\uff1f\n\u4ee5\u53ca\u52fe\u9009\u8fd9\u4e24\u4e2a\u9009\u9879\u5206\u522b\u7684\u4f5c\u7528\uff0c\u6bcf\u4e2a\u80fd\u5e26\u6765\u4ec0\u4e48\u597d\u5904\u3002

\n

\u95ee\u9898 2\uff1a\nrider \u5b89\u88c5 mono \u548c.net core \u5e94\u8be5\u88c5\u54ea\u4e2a\uff0c\u8fd9\u4e24\u4e2a\u7684\u6982\u5ff5\u6211\u67e5\u8d44\u6599\u7406\u89e3\u4e86\uff0c\u76ee\u524d\u4e5f\u662f\u88c5\u4e86 mono\uff0c\u4f46\u662f\u8fd8\u662f\u597d\u5947 \u7528.net core \u53ef\u4ee5\u5f00\u53d1\u5417\uff1f\u5177\u4f53\u6709\u5565\u533a\u522b\uff1f

\n", "date_published": "2020-11-23T10:46:20+00:00", "title": "\u5927\u4f6c\u4eec \u5b66\u4e60 Unity \u9047\u5230\u7684\u4e24\u4e2a\u95ee\u9898\u6c42\u52a9", "id": "t/728440" }, { "author": { "url": "member/aichipipizhu", "name": "aichipipizhu", "avatar": "https://cdn.v2ex.com/avatar/978c/e79f/340755_large.png?m=1546842097" }, "url": "t/717992", "title": "\u6709\u4eba\u5bf9 unity \u7684 photon \u7ec4\u4ef6\u719f\u6089\u7684\u561b\uff0c\u60f3\u6709\u507f\u54a8\u8be2\u51e0\u4e2a\u95ee\u9898", "id": "t/717992", "date_published": "2020-10-23T11:46:00+00:00", "content_html": "

\u53c2\u52a0\u4e86\u4e2a jam \u6bd4\u8d5b\u3002\u5f04\u8054\u673a\u5f04\u7684\u7126\u5934\u70c2\u989d

\n" }, { "author": { "url": "member/TangMonk", "name": "TangMonk", "avatar": "https://cdn.v2ex.com/avatar/c5f1/ae9e/55793_large.png?m=1644466105" }, "url": "t/711988", "date_modified": "2020-09-30T12:40:15+00:00", "content_html": "

Unity \u7684 UIWidgets \u770b\u8d77\u6765\u8fd8\u4e0d\u9519\uff0c\u522b\u8bf4 Windows, Mac\uff0c\u4f30\u8ba1\u751a\u81f3\u8fde ps\uff0cXbox \u90fd\u53ef\u4ee5\u8de8\u5e73\u53f0\uff0c\u800c\u4e14\u52a0\u4e0a\u4e00\u70b9 3d, \u7c92\u5b50\u7279\u6548\uff0c\u6bd4\u4e00\u822c\u7684 UI \u90fd\u8981\u9177\u70ab\u3002

\n

\u6709\u4eba\u7528\u8fc7\u5417\uff1f\u79fb\u52a8\u5f00\u53d1\u548c Flutter \u6bd4\u6bd4\u600e\u4e48\u6837\uff1f\u684c\u9762\u5f00\u53d1\u548c QT \u76f8\u6bd4\u53c8\u5982\u4f55\uff1f

\n", "date_published": "2020-09-30T12:32:01+00:00", "title": "\u7528 Unity3d \u6765\u505a\u8de8\u5e73\u53f0\u5f00\u53d1\u662f\u4e0d\u662f\u5f88\u597d\uff1f", "id": "t/711988" }, { "author": { "url": "member/bakatori", "name": "bakatori", "avatar": "https://cdn.v2ex.com/gravatar/6c3a2a978545b475e12f7e2160624083?s=73&d=retro" }, "url": "t/680811", "title": "\u5bf9\u4e8e U3D Stopwatch ElapsedTick \u7684\u7591\u60d1", "id": "t/680811", "date_published": "2020-06-11T13:06:44+00:00", "content_html": "

\u8bb0\u5f55\u65b9\u6cd5

\n
 static public void time (string key) {\n if (timeKeyHub.ContainsKey (key)) {\n Debug.LogError (\"MLOG.cs time key already exist\");\n } else {\n System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch ();\n timeKeyHub.Add (key, sw);\n sw.Start ();\n }\n }\n static public void timeEnd (string key) {\n if (timeKeyHub.ContainsKey (key)) {\n System.Diagnostics.Stopwatch sw;\n timeKeyHub.TryGetValue (key, out sw);\n sw.Stop();\n Debug.Log (string.Format (\"<color=blue>{0}</color> {1} ms {2} ticks\", key, sw.ElapsedMilliseconds, sw.ElapsedTicks));\n // BIRDTODO:\u7528\u6c60\u5b50\n sw = null;\n timeKeyHub.Remove (key);\n } else {\n Debug.LogError (\"MLOG.cs timeend key not exist\");\n }\n }\n
\n

A*\u7b97\u6cd5\u7684\u90e8\u5206\u4ee3\u7801

\n
 MLOG.time(\"newCostDealer\");\n MLOG.time(\"newCostDealer - newCost\");\n float newCost = cost_so_far[cur]+ heuristic(next.Pos, end.Pos);\n MLOG.timeEnd(\"newCostDealer - newCost\");\n\n MLOG.time(\"newCostDealer - 0\");\n bool tmp2 = !cost_so_far.ContainsKey(next);\n MLOG.timeEnd(\"newCostDealer - 0\");\n\n MLOG.time(\"newCostDealer - temp3\");\n bool tmp3 = false;\n if (!tmp2) {\n tmp3 = newCost < cost_so_far[next];\n }\n MLOG.timeEnd(\"newCostDealer - temp3\");\n\n if (tmp2 || tmp3)\n {\n MLOG.time(\"newCostDealer - 1\");\n frontier.put(next, newCost);\n MLOG.timeEnd(\"newCostDealer - 1\");\n\n MLOG.time(\"newCostDealer - 2\");\n cost_so_far[next] = newCost;\n // MLOG.info(\"came_from[next] = cur,\" + next.ToString() + \" \" + cur.ToString());\n came_from[next] = cur;\n MLOG.timeEnd(\"newCostDealer - 2\");\n }\n\n MLOG.timeEnd(\"newCostDealer\");\n
\n

\u8fd0\u884c\u7ed3\u679c\uff1a

\n

\"tIfWA1.png\"

\n

\u6c42\u6559\uff0c\u4e3a\u5565 newCostDealer ticks \u548c\u5176\u5b83\u8bb0\u5f55\u52a0\u8d77\u6765\u5dee\u90a3\u4e48\u591a\u4e2b\uff1f\uff01

\n" }, { "author": { "url": "member/omxian", "name": "omxian", "avatar": "https://cdn.v2ex.com/gravatar/2acf6b830fe7ece8b23f6c71936fe25f?s=73&d=retro" }, "url": "t/670495", "title": "\u6709\u507f\u63d0\u4f9b unity \u865a\u62df\u9762\u8bd5~", "id": "t/670495", "date_published": "2020-05-11T05:12:09+00:00", "content_html": "

\u5927\u5bb6\u89c9\u5f97\u6709\u7684\u641e\u5417\uff1f\u6709\u8fd9\u4e2a\u5e02\u573a\u5417\uff1f\n\u4f5c\u4e3a unity \u591a\u5e74\u7684\u4ece\u4e1a\u8005\uff0c\u6709\u507f\u63d0\u4f9b unity \u4e2d\u4f4e\u7ea7\u7684\u865a\u62df\u9762\u8bd5\uff0c\u7ed9\u65b0\u4eba\u4e00\u4e9b\u53d1\u5c55\u5efa\u8bae\uff01\n\u6709\u5174\u8da3\u7684\u4eba\u53ef\u4ee5\u7559\u8a00\u3002

\n" }, { "author": { "url": "member/BottleOpener", "name": "BottleOpener", "avatar": "https://cdn.v2ex.com/gravatar/bfd6904d256e1986a5deb874ac9a1752?s=73&d=retro" }, "url": "t/667919", "title": "\u95ee\u4e00\u4e0b\u5404\u4f4d\u5927\u54e5\u5173\u4e8e\u4e70\u7f51\u7edc\u6388\u8bfe\u662f\u5426\u6709\u5fc5\u8981\u7684\u95ee\u9898", "id": "t/667919", "date_published": "2020-05-01T08:50:03+00:00", "content_html": "\u6211\u662f Unity \u5ba2\u6237\u7aef\uff0c\u5de5\u4f5c\u5feb\u4e24\u5e74\u4e86\uff0c\u60f3\u63d0\u5347\u4e00\u4e0b\u81ea\u5df1\u3002 \u6700\u8fd1\u770b\u5230\u86ee\u725b\u7684\u8bfe \u5c0f\u767d\u8d85\u795e\u7cfb\u5217 Unity \u4f01\u4e1a\u7279\u8bad\u73ed https://edu.manew.com/course/471 \u611f\u89c9\u597d\u50cf\u633a\u5b9e\u7528\u7684\uff0c\u6211\u57fa\u7840\u4e00\u822c\uff0cc#\u7565\u7cbe\u901a\uff0c\u76ee\u524d\u9879\u76ee\u7528\u7684\u4e5f\u662f c#\u3002

\u60f3\u95ee\u4e00\u4e0b\u5404\u4f4d\uff0c\u6709\u5fc5\u8981\u4e70\u8fd9\u4e2a\u8bfe\u5b66\u4e60\u561b\uff0c\u6bd5\u7adf\u6709\u70b9\u5c0f\u8d35\uff0c\u8fd8\u633a\u7ea0\u7ed3\u7684\u3002

\u5de5\u4f5c\u4e4b\u524d\u4ece\u6765\u6ca1\u7528\u8fc7 uniy\uff0c\u5de5\u4f5c\u4ee5\u540e\u4e5f\u6ca1\u6709\u7cfb\u7edf\u7684\u5b66\u8fc7 unity \u6216\u8005\u70ed\u66f4\u65b0\uff0c\u4e5f\u4e0d\u4e86\u89e3\u670d\u52a1\u5668\u7684\u77e5\u8bc6\uff0c\u867d\u7136\u5e73\u65f6\u5de5\u4f5c\u6ca1\u95ee\u9898\uff0c\u4f46\u5fc3\u91cc\u603b\u662f\u6ca1\u5e95\uff0c\u603b\u89c9\u5f97\u5c11\u5b66\u4e86\u70b9\u4e1c\u897f\u3002" }, { "author": { "url": "member/MuscleOf2016", "name": "MuscleOf2016", "avatar": "https://cdn.v2ex.com/avatar/b78d/58b9/182337_large.png?m=1715430621" }, "url": "t/663211", "title": "\u8bf7\u95ee\u901a\u8fc7 unity WebGL \u80fd\u64ad\u653e rtmp\uff0c\u53ef\u4ee5\u5b9e\u73b0\u5417\uff1f", "id": "t/663211", "date_published": "2020-04-16T13:17:53+00:00", "content_html": "" }, { "author": { "url": "member/unn", "name": "unn", "avatar": "https://cdn.v2ex.com/gravatar/cfff9ca626c77fa9bdd8a8e7eb3048d0?s=73&d=retro" }, "url": "t/649703", "title": "[UnityTips] \u4e00\u79cd\u4eff Minecraft \u7269\u54c1\u5408\u6210\u7684\u601d\u8def", "id": "t/649703", "date_published": "2020-03-04T03:34:10+00:00", "content_html": "

\u672c\u6587\u8f6c\u81ea Unity Connect \u535a\u4e3b \u8d85\u7ea7\u6c7d\u6c34

\n

\u6700\u8fd1\u5728\u505a\u4e00\u4e2a\u5c0f\u6e38\u620f\uff0c\u9047\u5230\u4e86\u5408\u6210\u95ee\u9898\u8fd9\u91cc\u5206\u4eab\u4e00\u4e0b\u5236\u4f5c\u601d\u8def~ \ud83d\udcd5

\n

\u672c\u7bc7\u53ea\u8bb2\u89e3\u4e00\u4e0b\u5927\u6982\u601d\u8def\u63d0\u4f9b\u90e8\u5206\u4ee3\u7801\uff0c\u5b8c\u6574\u7684\u4ee3\u7801\u5e94\u8be5\u4f1a\u5728\u4ee5\u540e\u548c\u9879\u76ee\u4e00\u540c\u63d0\u4f9b ~ \ud83d\udca1\ud83d\udca1\ud83d\udca1 Minecraft \u4e2d\u7684\u5408\u6210\u6982\u8ff0

\n

\"image\"

\n

\u5728 Minecraft \u4e2d\uff0c\u6700\u57fa\u672c\u7684\u5408\u6210\u53f0\u662f\u4e00\u4e2a 2 * 2 \u7684\u5408\u6210\uff0c\u6211\u8fd9\u91cc\u4ee5 A\u3001B\u3001C\u3001D \u6765\u4ee3\u8868\u5b83\u7684\u56db\u4e2a\u683c\u5b50\u3002 \u5408\u6210\u5206\u4e3a\u4fe9\u79cd\u5408\u6210 \uff1a\uff08\u5728 Minecraft \u4e2d\u4e0d\u5355\u5355\u53ea\u6709\u8fd9\u4fe9\u79cd\uff0c\u6211\u8fd9\u91cc\u4e3a\u4e86\u65b9\u4fbf\u4ecb\u7ecd\u7b80\u5316\u4e86\uff09

\n
    \n
  1. \n

    \u6709\u5e8f\u5408\u6210

    \n
  2. \n
  3. \n

    \u65e0\u5e8f\u5408\u6210

    \n
  4. \n
\n

\u6709\u5e8f\u5408\u6210\u662f\u6307\u6240\u6709\u7684\u7269\u54c1\u5fc5\u987b\u6309\u7167\u6307\u5b9a\u7684\u4f4d\u7f6e\u6446\u653e\uff0c\u4f4d\u7f6e\u6446\u653e\u4e0d\u6b63\u786e\u662f\u65e0\u6cd5\u5408\u6210\u7684\u6bd4\u5982\u65a7\u5934\u3001\u9504\u5934\u3001\u76d4\u7532\u7b49\uff0c\u8fd9\u4e5f\u662f\u672c\u6587\u4e2d\u7740\u91cd\u8bb2\u89e3\u7684\u5185\u5bb9\uff0c\u56e0\u4e3a\u65e0\u5e8f\u5408\u6210\u60c5\u51b5\u6bd4\u8f83\u590d\u6742\u6211\u4f1a\u5728\u65e5\u540e\u4e13\u95e8\u63d0\u51fa\u6765\u5c1d\u8bd5\u8bf4\u660e\u3002

\n

\"image\"

\n

\u4eff\u5236 2 * 2 \u5408\u6210\u601d\u8def \uff1a \u5bf9\u5408\u6210\u6709\u4e86\u5927\u81f4\u6982\u5ff5\u4ee5\u540e\u6211\u6765\u8bf4\u8bf4\u6211\u5bf9\u8fd9\u79cd\u5bf9\u4f4d\u7f6e\u6709\u8981\u6c42\u7684\u5408\u6210\u7684\u4eff\u5236\u65b9\u6848\uff1a

\n
    \n
  1. \n

    \u5bf9\u6e38\u620f\u4e2d\u6240\u6709\u7684\u7269\u54c1\u8bbe\u7f6e\u552f\u4e00\u7269\u54c1 ID\uff0c\u7528\u6765\u4ee3\u8868\u8fd9\u4e2a\u7269\u54c1\u53ef\u4ee5\u7528\u6570\u503c\u6216\u8005\u5b57\u7b26\u4e32\u3002

    \n
  2. \n
  3. \n

    \u5bf9\u6e38\u620f\u4e2d\u6240\u6709\u7269\u54c1\u8bbe\u7f6e\u552f\u4e00\u5408\u6210 ID\uff0c\u7528\u6765\u4ee3\u8868\u8fd9\u4e2a\u7269\u54c1\u7684\u5408\u6210\u516c\u5f0f\uff0c\u8fd9\u91cc\u7528\u5b57\u7b26\u4e32\u6765\u4ee3\u8868\u3002

    \n
  4. \n
  5. \n

    \u5bf9\u5408\u6210\u53f0\u7684\u6bcf\u4e2a\u683c\u5b50\u8bbe\u7f6e\u552f\u4e00\u6807\u8bc6 \uff0c\u5982\u4e0a\u6587\u4e2d\u7684 ABCD\u3002

    \n
  6. \n
  7. \n

    \u5408\u6210\u65f6\u5c06\u683c\u5b50\u7684\u6807\u8bc6\u4e0e\u683c\u5b50\u4e2d\u7269\u54c1\u7684 ID \u7ec4\u5408\u4e3a\u4e00\u4e2a\u5b57\u7b26\u4e32\uff0c\u7a7a\u683c\u7528 * \u6765\u8868\u793a\u5f97\u51fa\u5408\u6210\u516c\u5f0f\u3002

    \n
  8. \n
  9. \n

    \u4e0e\u5df2\u6709\u7684\u5408\u6210\u516c\u5f0f\u505a\u6bd4\u5bf9\uff0c\u627e\u5230\u7ed3\u679c\u3002\uff08 \u641c\u7d22\u53ef\u4ee5\u4f18\u5316\u7684\u5730\u65b9\u5f88\u591a\uff0c\u80fd\u529b\u6709\u9650\u5c31\u4e0d\u5199\u51fa\u6765\u8bef\u4eba\u5b50\u5f1f\u4e86 \uff09

    \n
  10. \n
\n

\u4e5f\u5c31\u662f\u8bf4\u4e00\u4e2a\u7269\u54c1\u5b83\u62e5\u6709\u4fe9\u79cd\u8eab\u4efd\u6807\u8bc6\uff0c\u4e00\u79cd\u662f\u552f\u4e00\u7684 ID \u7ed9\u7a0b\u5e8f\u8fdb\u884c\u5224\u65ad\u5b83\u662f\u4ec0\u4e48\u7269\u54c1\uff1b\u53e6\u5916\u4e00\u4e2a\u662f\u5b83\u7684\u5408\u6210\u914d\u65b9\uff0c\u8868\u793a\u5b83\u7684\u5408\u6210\u65b9\u6cd5\uff0c\u8fd9\u4e2a\u53ef\u4ee5\u6709\u591a\u79cd\u3002

\n

\"\u7269\u54c1\u5177\u6709\u4fe9\u79cd\u6807\u8bc6\"

\n

\u63a5\u4e0b\u6765\u6211\u4eec\u5c1d\u8bd5\u8868\u793a\u5408\u6210 \ud83d\udc95 \u7684\u8fc7\u7a0b \uff1a \u5047\u8bbe\u6211\u4eec\u8981\u4f7f\u7528 \ud83c\udf57 \uff08\u70b8\u9e21\uff09 + \ud83c\udf7a \uff08\u5564\u9152\uff09 \u5408\u6210 \ud83d\udc95 \uff08\u5feb\u4e50\uff09\u3002

\n\n

\u63d0\u524d\u5c06 \ud83d\udc95 \u7684\u516c\u5f0f\u5199\u597d\uff0c\u7136\u540e\u5c06\u5b83\u4fdd\u5b58\u597d\u3002\u5982\u679c\u6e38\u620f\u4e2d\u6709\u5927\u91cf\u7684\u516c\u5f0f\u9700\u8981\u4fdd\u5b58\u4e5f\u53ef\u4ee5\u8bd5\u8bd5 SQLite \u6570\u636e\u5e93\uff0c\u4e0d\u8fc7\u901a\u5e38\u60c5\u51b5\u4e0b\u53ea\u9700\u8981\u4fdd\u5b58\u4e3a Json \u6216\u662f YAML \u683c\u5f0f\u5373\u53ef\u3002 \u6839\u636e \ud83d\udc95 \u5408\u6210\u516c\u5f0f A001BCD002\uff0c\u6211\u4f7f\u7528\u56fe\u6765\u8868\u793a\u7684\u8bdd\u662f\u8fd9\u6837 \uff1a

\n

\"image\"

\n

\u8fd9\u6837\u4e00\u4e2a\u7b80\u5355\u7684\u5408\u6210\u7cfb\u7edf\u8bbe\u8ba1\u5c31\u5b8c\u6210\u4e86\uff0c\u4f46\u662f\u8fd9\u4e2a\u7cfb\u7edf\u5e76\u4e0d\u5b8c\u7f8e\u8fd8\u9700\u8981\u540e\u671f\u4f18\u5316\u8bb8\u591a\u6211\u8fd9\u91cc\u4e5f\u53ea\u662f\u8d77\u5230\u4e00\u4e2a\u629b\u7816\u5f15\u7389\u7684\u4f5c\u7528\u3002 \ud83e\udd17 \u4ee3\u7801\u8bbe\u8ba1

\n
using System.Collections.Generic;\nusing UnityEngine;\n\npublic class CraftingTable : MonoBehaviour\n{\n // \u5408\u79f0\u8868\n private Dictionary<string, int> _itemMakeTables = new Dictionary<string, int>();\n // \u7269\u54c1\u8868\n private Dictionary<int, string> _itemNameTables = new Dictionary<int, string>();\n\n private void Start()\n {\n //\u6dfb\u52a0\u4e00\u4e2a\u5408\u6210\u914d\u65b9\u5408\u6210\u4ea7\u7269\u4e3a ID \u662f 10 \u7684\u7269\u54c1\n _itemMakeTables.Add(\"A001B*C*D002\",10);\n //\u6dfb\u52a0\u4e00\u4e2a ID \u4e3a 10 \u7684\u7269\u54c1\n _itemNameTables.Add(10, \"\u5e78\u798f\u661f\u661f\");\n\n //\u6a21\u62df\u5408\u6210\n Debug.Log(Make(\"A001B*C*D002\"));\n }\n\n // \u7269\u54c1\u5408\u6210\u51fd\u6570\uff0c\u63a5\u53d7\u5408\u6210\u516c\u5f0f\u8fd4\u56de\u5408\u6210\u51fa\u7684\u7269\u54c1\u540d\n private string Make(string formula)\n {\n string itemName = null;\n //\u5224\u65ad\u516c\u5f0f\u662f\u5426\u6b63\u786e\n if (_itemMakeTables.TryGetValue(formula,out int itemID))\n {\n //\u6839\u636e\u7269\u54c1 id \u67e5\u8be2\u7269\u54c1\u540d\u5b57\n itemName = _itemNameTables[itemID];\n return itemName;\n }\n else\n {\n return itemName;\n }\n\n }\n\n}\n
\n

\"\u7ed3\u679c\"

\n

\u539f\u6587\u94fe\u63a5\uff1ahttps://connect.unity.com/p/unitytips-yi-chong-fang-minecraft-wu-pin-he-cheng-de-si-lu?app=true

\n

\u6b22\u8fce\u6233\u4e0a\u65b9\u539f\u6587\u94fe\u63a5\uff0c\u4e0b\u8f7d Unity \u5b98\u65b9\u6280\u672f\u793e\u533a app\uff0c\u5728\u7ebf\u6280\u672f\u7b54\u7591\uff0c\u53d1\u73b0\u66f4\u591a\u8d44\u6e90\u5e72\u8d27\uff01

\n" }, { "author": { "url": "member/unn", "name": "unn", "avatar": "https://cdn.v2ex.com/gravatar/cfff9ca626c77fa9bdd8a8e7eb3048d0?s=73&d=retro" }, "url": "t/647960", "title": "ShaderLab \u5165\u95e8\u5b9e\u8df5", "id": "t/647960", "date_published": "2020-02-27T03:01:28+00:00", "content_html": "

\u672c\u6587\u8f6c\u81ea Unity Connect \u535a\u4e3b \u6c6a\u6c6a

\n

\u4ece\u5b9e\u8df5\u6765\u8ba4\u8bc6 shaderlab \u7f16\u7a0b

\n

\u5199\u8fd9\u7bc7\u6587\u7ae0\u5462\uff0c\u4e3b\u8981\u662f\u4e3a\u4e86\u8ba9\u60f3\u5b66\u4e60 shaderlab \u7f16\u7a0b\u7684\u5c0f\u4f19\u4f34\u4eec\u8fc5\u901f\u4e86\u89e3 shaderlab \u7684\u7684\u57fa\u672c\u8bed\u6cd5\uff0c\u548c\u8fd0\u7528\u57fa\u672c\u8bed\u53e5\u6765\u5b9e\u73b0\u4e00\u4e9b\u7b80\u5355\u7684\u6750\u8d28\u6548\u679c\u548c\u52a8\u753b\u3002\u7531\u4e8e\u662f\u5b9e\u8df5\u5165\u95e8\uff0c\u561b\uff0c\u7406\u8bba\u5c31\u4f1a\u5f88\u5c11\uff0c\u504f\u5411\u4e8e\u51fa\u6548\u679c\uff0c\u66f4\u591a\u7684\u662f\u4ece\u4f8b\u5b50\u6765\u4e00\u6b65\u4e00\u6b65\u7684\u89e3\u6790\uff0c\u7406\u89e3\uff0c\u76f4\u5230\u878d\u4f1a\u8d2f\u901a\u3002\u5982\u679c\u60f3\u6df1\u5165\u5b66\u4e60\u7684\u5c0f\u4f19\u4f34\uff0c\u9700\u8981\u591a\u591a\u81ea\u5df1\u94bb\u7814\uff0c\u67e5\u9605\u8d44\u6599\u54e6\u3002

\n

\u867d\u7136\u672c\u6587\u4e0d\u504f\u5411\u4e8e\u7406\u8bba\uff0c\u4f46\u662f\u57fa\u672c\u7684\u5e38\u8bc6\u6027\u95ee\u9898\u5e0c\u671b\u5927\u5bb6\u4e86\u89e3\u3002

\n

\u7f16\u5199 shader \u76ee\u524d\u4e3b\u6d41\u7684\u4e09\u79cd\u9ad8\u7ea7\u8bed\u8a00\u6709\uff1aHLSL\u3001GLSL\u3001CG

\n

HLSL \u7531\u5fae\u8f6f\u63a8\u51fa\uff0c\u57fa\u4e8e DirectX\uff0c\u5168\u540d High Level Shading Language

\n

GLSL \u5219\u57fa\u4e8e OpenGL,\u5168\u540d OpenGL Shading Language

\n

CG \u7531 Nvidia \u63a8\u51fa\uff0c\u5168\u540d C for Graphic

\n

Shader \u662f Material \u7684\u4e00\u90e8\u5206,Material \u662f Shader\uff0c\u7eb9\u7406\uff0c\u989c\u8272\u7b49\u7684\u96c6\u5408

\n

Shader \u5728 GPU \u4e2d\u8fd0\u884c

\n

ShaderLab \u662f\u7531 Unity \u5c01\u88c5\uff0c\u517c\u5bb9 Unity \u7684\u7740\u8272\u5668\u8bed\u8a00

\n

\u76ee\u524d Unity \u4e0b Shader \u7684\u5206\u7c7b\u6709\u4e09\u79cd\uff0csurface shaders\uff0cvertex and fragment shaders\u3001fixed function shaders\u3002

\n

\u672c\u6c6a\u5c06\u4fa7\u91cd\uff0c\u6216\u8005\u53ea\u4f7f\u7528 vertex and fragment shaders \u6765\u8fdb\u884c\u6848\u4f8b\u7684\u8bb2\u89e3

\n

Hello Shader!

\n

\u5c31\u50cf\u6211\u4eec\u5b66\u4e60\u7b2c\u4e00\u95e8\u7f16\u7a0b\u4e00\u6837\uff0c\u6211\u4eec\u5e94\u8be5\u53cb\u597d\u7684\u5bf9 Shaderlab \u8bf4\u4e00\u53e5\uff1aHello!

\n

\u6211\u4eec\u4ece Unity \u4e2d\u521b\u5efa\u4e00\u4e2a Unlit \uff08\u4e0d\u53d7\u5149\uff09\u6a21\u677f\u770b\u4e00\u4e0b

\n

\"image\"

\n

\u201c \uff1f\uff1f\u6c6a\u6c6a\u4f60\u4ec0\u4e48\u610f\u601d\uff0c\u4e00\u6765\u5c31\u7ed9\u6211\u770b\u8fd9\u4e48\u591a\u4ee3\u7801\uff0c\u4e0d\u662f\u8bf4\u7ed9\u60f3\u4e86\u89e3 shaderlab \u7684\u540c\u5b66\u770b\u5417\uff1f\u8fd9\u4e48\u591a\u6211\u770b\u5f97\u61c2\u554a\uff1f\uff1f\u201d

\n

\u8fd9\u3002\u3002\u3002\u522b\u6025\uff0c\u522b\u6025\uff0c\u770b\u672c\u6c6a\u5bf9\u4e0a\u9762\u7684\u4ee3\u7801\u8fdb\u884c\u7626\u8eab\uff01

\n

\"image\"

\n

\u6211\u4eec\u9010\u4e00\u6765\u5206\u6790\uff1a

\n

\u9996\u5148\u662f

\n

Shader\"WangWang/HelloShader\"

\n

\u4e0a\u9762\u6211\u5df2\u7ecf\u6ce8\u91ca\u4e86\uff0c\u662f\u5bf9 shader \u8fdb\u884c\u5206\u7ec4\u548c\u53d6\u540d\uff0c\u5982\u679c\u6309\u7167\u4e0a\u56fe\u4e2d\u7684\u8bbe\u5b9a\uff0c\u90a3\u4e48\u5728 Unity \u91cc\u5c31\u4f1a\u6709\u5982\u4e0b\u6548\u679c\u54e6\uff1a

\n

\"image\"

\n

\u5728\u6750\u8d28\u7684 shader \u9009\u9879\u91cc\uff0c\u51fa\u73b0\u4e86\u4e00\u4e2a Wangwang \u7684\u5206\u7ec4\uff0c\u63a5\u4e0b\u6765\u662f HelloShader \u7684\u6750\u8d28\u540d\u5b57

\n

Properties{}

\n

\u6211\u4eec\u53ef\u4ee5\u5728\u51fd\u6570\u4f53\u4e2d\uff0c\u58f0\u660e\u6211\u4eec\u5411\u5916\u66b4\u9732\u7684\u4e00\u4e9b\u53c2\u6570\uff0c\u6bd4\u5982\u8d34\u56fe\u554a\uff0c\u989c\u8272\u554a\uff0c\u6570\u503c\u554a\u7b49\u3002

\n

\u4e0b\u9762\u6211\u4eec\u5728\u51fd\u6570\u4f53\u4e2d\u6dfb\u52a0\u5982\u4e0b\u4ee3\u7801\uff1a

\n
\n

Properties

\n

{

\n

//\u5728\u6b64\u58f0\u660e\u5c5e\u6027

\n

_BaseTex(\"MainTextrue\",2D)=\"black\"{}

\n

}

\n
\n

\u7f16\u8bd1\u6210\u529f\u540e\uff0c\u6211\u4eec\u67e5\u770b\u4e00\u4e0b\u7ed3\u679c\uff1a

\n

\"image\"

\n

\u51fa\u73b0\u4e86\u4e00\u5f20\u81ea\u5b9a\u4e49\u8d34\u56fe\u9009\u9879\u680f\uff01\uff01

\n

\u540d\u5b57\u662f\uff1aMainTextrue

\n

\u6211\u4eec\u53ef\u4ee5\u8fd9\u6837\u7406\u89e3\u4e0b\u9762\u7684\u4ee3\u7801

\n

_BaseTex(\"MainTextrue\",2D)=\"black\"{}

\n

**\u58f0\u660e\u4e86\u4e00\u4e2a\u53eb\u505a_BaseTex \u7684\u811a\u672c\u5185\u53d8\u91cf\uff0c\u5e76\u5411\u5916\u66b4\u9732\uff0c\u66b4\u9732\u51fa\u6765\u7684\u662f\u4e00\u4e2a\u201c2D\u201d\u7c7b\u578b\u7684\u53d8\u91cf\u7c7b\u578b\uff0c\u540d\u5b57\u53eb\u505a\u201cMainTextrue\u201d\uff0c\u5982\u679c\u6ca1\u6709\u7ed9\u63a5\u53e3\u8d4b\u4e88\u4efb\u4f55\u8d34\u56fe\uff0c\u5219\u9ed8\u8ba4\u4e3a\u9ed1\u8272\u3002

\n

SubShader{}

\n

\u4e0a\u6587\u4e2d\u6211\u4eec\u63d0\u5230\uff0c\u7f16\u5199 shader \u53ef\u4ee5\u6709\u591a\u79cd\u8bed\u8a00\uff0c\u7136\u800c\u8fd9\u4e9b\u8bed\u8a00\u5176\u5b9e\u662f\u6709\u5c40\u9650\u6027\u7684\u3002

\n

HLSL \u53ea\u80fd\u8fd0\u884c\u5728\u652f\u6301 DirectX \u7684\u7684\u5e73\u53f0

\n

GLSL \u53ea\u80fd\u8fd0\u884c\u5728\u652f\u6301 OpenGL \u7684\u5e73\u53f0

\n

\u561b\uff0c\u5c31\u662f\u8bf4\u4ed6\u4eec\u4e24\u4e2a\u8c01\u90fd\u4e0d\u559c\u6b22\u8c01\uff0c\u90fd\u4e0d\u60f3\u548c\u5bf9\u65b9\u8bf4\u8bdd\uff0c\u6240\u4ee5\u65e0\u6cd5\u6c9f\u901a\u5462\u3002\u2261(\u2594\ufe4f\u2594)\u2261

\n

\u5728\u8fd9\u91cc\u5982\u679c\u662f\u9488\u5bf9\u591a\u4e2a\u5e73\u53f0\uff0c\u591a\u4e2a\u786c\u4ef6\u6765\u7f16\u5199\u7684 shader\uff0c\u5c31\u5f88\u6709\u53ef\u80fd\u9700\u8981\u591a\u4e2a SubShader \u54e6\u3002

\n

\u5982\u679c\u663e\u5361 1 \u4e0d\u652f\u6301\u7b2c\u4e00\u4e2a SubShader \u4e2d\u7684\u4ee3\u7801\uff0c\u90a3\u4e48\u5c31\u4f1a\u8df3\u5230\u7b2c\u4e8c\u4e2a Subshader \u4e2d\u6267\u884c\u54e6\u3002\u5c31\u8fd9\u6837\u8df3\u8df3\u8df3\u8df3~

\n

\u4e07\u4e00\u90fd\u4e0d\u652f\u6301\u600e\u4e48\u529e\u5462\uff1f

\n

Fallback\u201cShader \u540d\u201d

\n

\u8fd9\u5c31\u662f\u6211\u4eec\u6700\u540e\u767b\u573a\u7684\u89d2\u8272\uff0c\u5982\u679c\u6ca1\u6709\u4efb\u4f55\u4e00\u4e2a Subshader \u662f\u652f\u6301\u8fd9\u4e2a\u786c\u4ef6\u7684\uff0c\u90a3\u5c31\u4f1a\u8c03\u7528 Fallback \u540e\u9762\u7684 shader\u3002\u901a\u4fd7\u7684\u8bf4\u5462\uff0c\u5c31\u662f\uff01\uff01

\n

\u5907\u80ce\u5427\u3002

\n

\u6700\u540e\u4e00\u4e2a Pass \u56e0\u4e3a\u662f\u91cd\u70b9\u5185\u5bb9\uff0c\u8fd9\u91cc\u4e00\u7bc7\u6587\u7ae0\u8bb2\u4e0d\u5b8c\uff0c\u4f1a\u5728\u540e\u7eed\u8be6\u7ec6\u4ecb\u7ecd\u3002

\n

\u597d\u5566\uff0c\u672c\u671f shaderlab \u5b9e\u8df5\u5c31\u5230\u8fd9\u91cc\u4e86\uff0c\u6c6a\u6c6a\u672c\u4eba\u4e5f\u662f\u5c5e\u4e8e\u5b66\u4e60\u9636\u6bb5\uff0c\u5982\u679c\u4e0d\u8db3\uff0c\u9519\u8bef\u4e4b\u5904\uff0c\u5e0c\u671b\u5927\u5bb6\u6d77\u6db5\u3002

\n

\u539f\u6587\u94fe\u63a5\uff1ahttps://connect.unity.com/p/shaderlab-ru-men-shi-jian?app=true

\n

\u6b22\u8fce\u6233\u4e0a\u65b9\u539f\u6587\u94fe\u63a5\uff0c\u4e0b\u8f7d Unity \u5b98\u65b9\u6280\u672f\u793e\u533a app\uff0c\u5728\u7ebf\u6280\u672f\u7b54\u7591\uff0c\u53d1\u73b0\u66f4\u591a\u8d44\u6e90\u5e72\u8d27\uff01

\n" }, { "author": { "url": "member/unn", "name": "unn", "avatar": "https://cdn.v2ex.com/gravatar/cfff9ca626c77fa9bdd8a8e7eb3048d0?s=73&d=retro" }, "url": "t/647052", "title": "Unity \u70ed\u66f4\u65b0 \u4e4b \u5982\u4f55\u4f7f\u7528 AST \u8f6c\u6362 C# -> Lua", "id": "t/647052", "date_published": "2020-02-24T04:15:52+00:00", "content_html": "

\u672c\u6587\u8f6c\u81ea Unity Connect \u535a\u4e3b \u90e1\u5899

\n

\u672c\u7bc7\u4e3b\u8981\u8bba\u8ff0 \u5982\u4f55\u5c06 C# \u4ee3\u7801\u81ea\u52a8\u8f6c\u6362\u4e3a Lua \u4ee3\u7801\u7684\u89e3\u51b3\u65b9\u6848

\n

\u65b9\u6848\u6d41\u7a0b

\n
    \n
  1. \n

    \u5229\u7528 Mono ceil \u5e93\u5206\u6790\u7a0b\u5e8f\u96c6\u4e2d\u7684\u7c7b\u3001\u5b57\u6bb5\u3001\u65b9\u6cd5\u7b7e\u540d\uff0c\u7136\u540e\u5c06\u5176\u7ffb\u8bd1\u6210\u5bf9\u5e94\u7684 Lua \u6a21\u5757\u6240\u6a21\u62df\u7684\u7c7b\u578b\u7ed3\u6784

    \n
  2. \n
  3. \n

    \u901a\u8fc7 ILSpy \u5de5\u5177\u5206\u6790 IL \u6307\u4ee4\u96c6\uff0c\u91cd\u5efa\u7531\u8bed\u53e5\u8868\u8fbe\u5f0f\u7ec4\u6210\u7684 AST \uff08\u62bd\u8c61\u8bed\u6cd5\u6811\uff09\uff0c\u5e76\u7ffb\u8bd1\u6210\u5bf9\u5e94\u7684 Lua \u65b9\u6cd5\u4f53

    \n
  4. \n
  5. \n

    \u628a Lua \u7c7b\u578b\u4e0e Lua \u65b9\u6cd5\u4f53\u5408\u5e76\u6210\u5b8c\u6574\u7684 Lua \u4ee3\u7801

    \n
  6. \n
\n

\u6309\u7167\u540c\u6837\u7684\u539f\u7406\u53ef\u4ee5\u7ffb\u8bd1\u6210\u5176\u4ed6\u7684\u8bed\u8a00 \u5176\u4e2d Mono ceil \u8d1f\u8d23\u4ece\u7a0b\u5e8f\u96c6\u4e2d\u63d0\u53d6\u7c7b\u3001\u5b57\u6bb5\u3001\u65b9\u6cd5\uff1b ILSpy \uff08\u57fa\u4e8e Mono ceil \u5f00\u53d1\u7684\u5de5\u5177\uff09 \u5219\u8d1f\u8d23\u5206\u6790\u65b9\u6cd5\u4f53\u6307\u4ee4\u5e8f\u5217\u3002 \u67b6\u6784\u8bbe\u60f3

\n\n

\u7ffb\u8bd1\u6d41\u7a0b\u601d\u8def\u5206\u4eab

\n
    \n
  1. \n

    \u7c7b\u578b\u7ed3\u6784\u7ffb\u8bd1\uff0c\u901a\u8fc7 Mono.ceil \u5206\u6790\u7a0b\u5e8f\u96c6\u4e2d\u5305\u542b\u7684\u6240\u6709\u7c7b\uff0c\u4ee5\u53ca\u7c7b\u4e2d\u5b9a\u4e49\u7684\u5b57\u6bb5\u548c\u65b9\u6cd5\uff0c\u6536\u96c6\u5230\u8fd9\u4e9b\u4fe1\u606f\u540e\uff0c\u5c31\u53ef\u4ee5\u751f\u6210 Lua \u5bf9\u5e94\u7684\u7c7b\u578b\u548c\u7ed3\u6784\u53ca\u65b9\u6cd5\u5b9a\u4e49\uff08\u65e0\u65b9\u6cd5\u4f53\uff09

    \n
  2. \n
  3. \n

    \u65b9\u6cd5\u4f53\u7ffb\u8bd1\uff0c\u5229\u7528 ILSpy \u5c06\u65b9\u6cd5\u4f53\u4e2d\u7684 IL \u6307\u4ee4\u5e8f\u5217\u91cd\u5efa\u6210 AST,\u7ffb\u8bd1\u5de5\u5177\u5c06 AST \u8f6c\u6362\u6210 Lua \u8bed\u53e5\u548c\u8868\u8fbe\u5f0f\uff0c\u5f62\u6210 Lua \u65b9\u6cd5\u4f53

    \n
  4. \n
  5. \n

    \u6574\u5408 1\uff0c2 \u6b65\u9aa4

    \n
  6. \n
\n

\u56e0\u4e3a\u6e90\u7801\u5728\u7f16\u8bd1\u540e\uff0c\u5c06\u4f1a\u5bf9\u5b57\u7b26\u4e32\u3001\u5e38\u91cf\u3001\u679a\u4e3e\u3001\u8ba1\u7b97\u7b49\u8fdb\u884c\u4e00\u7cfb\u5217\u4f18\u5316\uff0c\u6bd4\u5982\u5220\u9664\u65e0\u6548\u7684\u65e0\u7528\u4ee3\u7801\uff0c\u9884\u5904\u7406\u5404\u79cd\u5b57\u7b26\u4e32\u3001\u51cf\u5c11\u8fd0\u884c\u65f6\u5f00\u9500\u7b49 \u3002\u5bf9\u7ffb\u8bd1\u540e\u7684 Lua \u4ee3\u7801\u903b\u8f91\u4e5f\u662f\u7f16\u8bd1\u5668\u4f18\u5316\u540e\u7684\u3002 \u7ffb\u8bd1\u7ec6\u8282\u5206\u6790 \u7c7b\u5173\u7cfb

\n\n

\u7c7b\u6210\u5458

\n\n

\u65b9\u6cd5\u4f53

\n\n

\u539f\u6587\u94fe\u63a5\uff1ahttps://connect.unity.com/p/unity-re-geng-xin-zhi-ru-he-shi-yong-astzhuan-huan-c-lua?app=true

\n

\u6b22\u8fce\u6233\u4e0a\u65b9\u539f\u6587\u94fe\u63a5\uff0c\u4e0b\u8f7d Unity \u5b98\u65b9\u6280\u672f\u793e\u533a app\uff0c\u5728\u7ebf\u6280\u672f\u7b54\u7591\uff0c\u53d1\u73b0\u66f4\u591a\u8d44\u6e90\u5e72\u8d27\uff01

\n" }, { "author": { "url": "member/unn", "name": "unn", "avatar": "https://cdn.v2ex.com/gravatar/cfff9ca626c77fa9bdd8a8e7eb3048d0?s=73&d=retro" }, "url": "t/646035", "title": "\u6309\u9700\u6e32\u67d3\u5982\u4f55\u6539\u5584\u79fb\u52a8\u7aef\u6027\u80fd\uff1f", "id": "t/646035", "date_published": "2020-02-20T02:36:00+00:00", "content_html": "

\u5927\u591a\u6570\u65f6\u5019\uff0c\u9879\u76ee\u5e76\u4e0d\u9700\u8981\u4e00\u76f4\u4fdd\u6301\u6700\u9ad8\u5e27\u7387\u6e32\u67d3\uff0c\u5c24\u5176\u662f\u5728\u79fb\u52a8\u5e73\u53f0\u4e0a\u3002\u8fc7\u53bb\uff0cUnity \u5f00\u53d1\u8005\u4eec\u5e38\u4f7f\u7528 Application targetFrameRate \u6216 Vsync \uff08\u5782\u76f4\u540c\u6b65\uff09\u6765\u9650\u5236\u5f15\u64ce\u7684\u6e32\u67d3\u901f\u5ea6\u3002\u8fd9\u79cd\u65b9\u6cd5\u5728\u5f71\u54cd\u6e32\u67d3\u7684\u540c\u65f6\uff0c\u8fd8\u4f1a\u5bf9\u5176\u4ed6\u90e8\u5206\u7684\u8fd0\u884c\u901f\u7387\u9020\u6210\u4e00\u4e9b\u5f71\u54cd\u3002\u800c\u65b0\u7684\u6309\u9700\u6e32\u67d3 API \u5141\u8bb8\u5f00\u53d1\u8005\u5c06\u6e32\u67d3\u9891\u7387\u4ece\u6574\u4f53\u4e2d\u72ec\u7acb\u51fa\u6765\u8c03\u6574\u3002

\n

\u4ec0\u4e48\u662f\u6309\u9700\u6e32\u67d3\uff1f \u6309\u9700\u6e32\u67d3\u53ef\u4ee5\u5728\u964d\u4f4e\u6e32\u67d3\u5e27\u6570\u7684\u540c\u65f6\uff0c\u8ba9\u5176\u4ed6\u90e8\u5206\u7cfb\u7edf\u4f9d\u65e7\u4ee5\u9ad8\u9891\u7387\u8fd0\u884c\u3002\u5b83\u5728\u79fb\u52a8\u7aef\u7684\u7528\u5904\u6700\u5927\u3002\u7701\u53bb\u90e8\u5206\u6e32\u67d3\u53ef\u4ee5\u5927\u5e45\u63d0\u5347\u6027\u80fd\u3001\u964d\u4f4e\u80fd\u8017\uff0c\u540c\u65f6\u5e94\u7528\u4f9d\u65e7\u53ef\u4ee5\u5bf9\u89e6\u63a7\u4e8b\u4ef6\u4f5c\u51fa\u53ca\u65f6\u54cd\u5e94\u3002 \u6309\u9700\u6e32\u67d3\u7684\u4f7f\u7528\u573a\u666f\uff1f \u5728\u4ee5\u4e0b\u51e0\u4e2a\u60c5\u666f\u4e2d\uff0c\u964d\u4f4e\u5e27\u7387\u901a\u5e38\u662f\u66f4\u597d\u7684\u9009\u62e9\uff1a

\n
    \n
  1. \n

    \u83dc\u5355\uff08\u5373\u5e94\u7528\u5165\u53e3\u6216\u6682\u505c\u83dc\u5355\uff09\uff1a\u83dc\u5355\u901a\u5e38\u662f\u4e00\u4e2a\u8f83\u4e3a\u7b80\u5355\u7684\u573a\u666f\uff0c\u4e0d\u9700\u8981\u9ad8\u9891\u7387\u7684\u6e32\u67d3\u3002\u5373\u4f7f\u5c06\u83dc\u5355\u6e32\u67d3\u901f\u7387\u964d\u4f4e\uff0c\u5e94\u7528\u4f9d\u65e7\u53ef\u4ee5\u5728\u672a\u6e32\u67d3\u7684\u5e27\u4e0a\u63a5\u53d7\u5230\u6307\u4ee4\u8f93\u5165\u3002\u964d\u4f4e\u6e32\u67d3\u901f\u7387\u540e\uff0c\u6211\u4eec\u5c31\u80fd\u964d\u4f4e\u80fd\u8017\uff0c\u901a\u8fc7\u9650\u5236 CPU \u9891\u7387\u6765\u9632\u6b62\u8bbe\u5907\u6e29\u5ea6\u8fc7\u9ad8\uff0cUI \u4e92\u52a8\u4e5f\u80fd\u4f9d\u65e7\u5e73\u6ed1\u3002

    \n
  2. \n
  3. \n

    \u56de\u5408\u5236\u6e38\u620f\uff08\u5982\u8c61\u68cb\uff09\uff1a\u5728\u56de\u5408\u5236\u6e38\u620f\u4e2d\uff0c\u73a9\u5bb6\u9700\u8981\u601d\u8003\u4e0b\u4e00\u6b65\u884c\u52a8\uff0c\u7b49\u5f85\u5bf9\u624b\u7684\u884c\u52a8\u3002\u8fd9\u6bb5\u65f6\u95f4\u6e38\u620f\u5185\u7684\u6d3b\u52a8\u8f83\u5c11\uff0c\u6211\u4eec\u53ef\u4ee5\u964d\u4f4e\u5e27\u7387\u6765\u51cf\u5c11\u4e0d\u5fc5\u8981\u7684\u80fd\u8017\u3001\u5ef6\u957f\u7535\u6c60\u5bff\u547d\u3002

    \n
  4. \n
  5. \n

    \u9759\u6001\u5185\u5bb9\uff1a\u5728\u5e94\u7528\u4e2d\uff0c\u5728\u5927\u90e8\u5206\u65f6\u95f4\u90fd\u5904\u4e8e\u9759\u6001\u7684\u5185\u5bb9\u4e0a\uff0c\u6bd4\u5982\u8f66\u5185\u7528\u6237\u754c\u9762\uff0c\u53ef\u4ee5\u9002\u5f53\u5730\u964d\u4f4e\u5e27\u7387\u3002

    \n
  6. \n
  7. \n

    \u6027\u80fd\u63a7\u5236\uff1a\u5982\u679c\u60f3\u8981\u63a7\u5236\u80fd\u8017\u548c\u8bbe\u5907\u6e29\u5ea6\uff0c\u5728\u5ef6\u957f\u7535\u6c60\u5bff\u547d\u7684\u540c\u65f6\u53c8\u4e0d\u9650\u5236 CPU \u6027\u80fd\uff0c\u5c24\u5176\u662f\u4f7f\u7528\u4e86Adaptive Performance\u5305\u7684\u60c5\u51b5\u4e0b\uff0c\u53ef\u4ee5\u901a\u8fc7\u8c03\u6574\u6e32\u67d3\u901f\u7387\u6765\u5b9e\u73b0\u76ee\u6807\u3002

    \n
  8. \n
  9. \n

    \u673a\u5668\u5b66\u4e60\u548c AI\uff1a\u51cf\u5c11 CPU \u5728\u6e32\u67d3\u4e0a\u7684\u5de5\u4f5c\u91cf\uff0c\u53ef\u4ee5\u8ba9\u5e94\u7528\u7684\u673a\u5668\u5b66\u4e60\u548c AI \u5904\u7406\u6709\u4e9b\u8bb8\u7684\u6027\u80fd\u63d0\u5347\u3002

    \n
  10. \n
\n

\u6309\u9700\u6e32\u67d3\u652f\u6301\u54ea\u4e9b\u5e73\u53f0\uff1f \u6240\u6709\u5e73\u53f0\uff01 Unity 2019.3 \u7684\u6309\u9700\u6e32\u67d3\u529f\u80fd\u652f\u6301\u6240\u6709\u5e73\u53f0\uff08\u8be6\u60c5\u8bf7\u89c1\u7cfb\u7edf\u8981\u6c42\u90e8\u5206\uff09\u548c\u6e32\u67d3 API \uff08\u5305\u62ec\u5185\u7f6e\u6e32\u67d3\u7ba1\u7ebf Built-in Render Pipeline\u3001\u901a\u7528\u6e32\u67d3\u7ba1\u7ebf URP \u548c\u9ad8\u6e05\u6e32\u67d3\u7ba1\u7ebf HDRP \uff09\u3002 \u5982\u4f55\u4f7f\u7528\u6309\u9700\u6e32\u67d3\u5462\uff1f \u6309\u9700\u6e32\u67d3\u7684 API \u5305\u542b\u5728 UnityEngine.Rendering \u547d\u540d\u7a7a\u95f4\u4e2d\uff0c\u7531\u4e09\u79cd\u5c5e\u6027\u7ec4\u6210\u3002OnDemandRendering.renderFrameInterval \u8be5 API \u662f\u6700\u91cd\u8981\u7684\u90e8\u5206\u3002\u6211\u4eec\u53ef\u4ee5\u7528\u5b83\u6765\u53d6\u5f97\u6216\u8bbe\u7f6e\u6e32\u67d3\u5e27\u95f4\u9694\uff0c\u786e\u5b9a\u5e27\u7387\u3002 \u6e32\u67d3\u5e27\u95f4\u9694\u662f\u786e\u5b9a Application.targetFrameRate \u53ca QualitySettings.vSyncCount \u95f4\u9694\u7684\u8981\u7d20\u3002 \u6253\u4e2a\u6bd4\u65b9\uff0c\u6211\u4eec\u5c06 Application.targetFrameRate \u8bbe\u7f6e\u4e3a 60\uff0c\u5c06 OnDemandRendering.renderFrameInterval \u8bbe\u7f6e\u4e3a 2\uff0c\u5219\u7cfb\u7edf\u4f1a\u6bcf\u9694\u4e00\u5e27\u6e32\u67d3\u4e00\u6b21\uff0c\u6700\u7ec8\u5e27\u7387\u4fbf\u4e3a 30fps\u3002 \u261eOnDemandRendering.effectiveFrameRate \u8be5\u5c5e\u6027\u4f1a\u7ed9\u51fa\u5e94\u7528\u6e32\u67d3\u5e27\u7387\u7684\u4f30\u7b97\u503c\u3002 \u4f30\u7b97\u503c\u6839\u636e OnDemandRendering.renderFrameInterval\u3001Application.targetFrameRate \u548c QualitySetting.vSyncCount \u7684\u6570\u503c\uff0c\u4ee5\u53ca\u663e\u793a\u5668\u5237\u65b0\u9891\u7387\u8ba1\u7b97\u5f97\u51fa\u3002\u8bf7\u6ce8\u610f\u8fd9\u53ea\u662f\u4e2a\u4f30\u7b97\u503c\uff0c\u5e76\u4e0d\u4e00\u5b9a\u662f\u5b9e\u9645\u8868\u73b0\uff1b\u5f53 CPU \u540c\u65f6\u5728\u5904\u7406\u5176\u4ed6\u811a\u672c\u3001\u7269\u7406\u6a21\u62df\u3001\u7f51\u7edc\u4f20\u8f93\u7b49\u7b49\u8fdb\u7a0b\u65f6\uff0c\u6548\u7387\u96be\u514d\u4f1a\u964d\u4f4e\uff0c\u5e94\u7528\u7684\u6e32\u67d3\u901f\u5ea6\u4e5f\u53ef\u80fd\u53d8\u6162\u3002 \u261eOnDemandRendering.willThisFrameRender \u8be5 API \u4f1a\u544a\u77e5\u5f53\u524d\u5e27\u662f\u5426\u4f1a\u88ab\u6e32\u67d3\u5230\u5c4f\u5e55\u4e0a\u3002\u6211\u4eec\u53ef\u4ee5\u5728\u4e0d\u6e32\u67d3\u7684\u5e27\u4e0a\u6267\u884c\u4e00\u4e9b\u5403 CPU \u6027\u80fd\u7684\u8fdb\u7a0b\uff0c\u6bd4\u5982\u590d\u6742\u7684\u6570\u5b66\u8fd0\u7b97\u3001\u52a0\u8f7d\u8d44\u6e90\u6216\u751f\u6210\u9884\u5236\u4ef6\u3002 \u6ce8\u610f\u4e8b\u9879

\n\n

\u793a\u4f8b \u5728\u4e0b\u65b9\u4f8b\u5b50\u4e2d\uff0c\u83dc\u5355\u4e0a\u4f7f\u7528\u4e86\u6309\u9700\u6e32\u67d3\u5c06\u5e27\u7387\u9650\u5236\u5728\u4e86 20fps\uff0c\u76f4\u5230\u6709\u6307\u4ee4\u8f93\u5165\u3002

\n
using UnityEngine;\nusing UnityEngine.Rendering;\n\npublic class Menu : MonoBehaviour\n{\n // Start is called before the first frame update\n void Start()\n {\n QualitySettings.vSyncCount = 0;\n Application.targetFrameRate = 60;\n // When the Menu starts, set the rendering to target 20fps\n OnDemandRendering.renderFrameInterval = 3;\n }\n\n // Update is called once per frame\n void Update()\n {\n if (Input.GetMouseButton(0) || (Input.touchCount > 0))\n {\n // If the mouse button or touch detected render at 60 FPS (every frame).\n OnDemandRendering.renderFrameInterval = 1;\n }\n else\n {\n // If there is no mouse and no touch input then we can go back to 20 FPS (every 3 frames).\n OnDemandRendering.renderFrameInterval = 3;\n }\n }\n} \n\n
\n
\n

\"image\"

\n

\u767e\u8bb2\u4e0d\u5982\u4e00\u7ec3\uff0c\u5728\u6587\u7ae0\u7684\u6700\u540e\u5411\u5404\u4f4d\u63d0\u4f9b\u4e00\u4e2a\u5c55\u793a\u6309\u9700\u6e32\u67d3\u4e0d\u540c\u4f7f\u7528\u60c5\u666f\u7684\u793a\u4f8b\u9879\u76ee

\n

\u539f\u6587\u94fe\u63a5\uff1ahttps://connect.unity.com/p/an-xu-xuan-ran-ru-he-gai-shan-yi-dong-duan-xing-neng?app=true

\n

\u6b22\u8fce\u6233\u4e0a\u65b9\u539f\u6587\u94fe\u63a5\uff0c\u4e0b\u8f7d Unity \u5b98\u65b9\u6280\u672f\u793e\u533a app\uff0c\u5728\u7ebf\u6280\u672f\u7b54\u7591\uff0c\u53d1\u73b0\u66f4\u591a\u8d44\u6e90\u5e72\u8d27\uff01

\n" }, { "author": { "url": "member/unn", "name": "unn", "avatar": "https://cdn.v2ex.com/gravatar/cfff9ca626c77fa9bdd8a8e7eb3048d0?s=73&d=retro" }, "url": "t/645196", "title": "\u600e\u4e48\u901a\u8fc7 Unity \u4f7f\u7528 Vulkan API & \u79fb\u52a8\u7aef Vulkan GPU \u5927 PK", "id": "t/645196", "date_published": "2020-02-17T03:59:52+00:00", "content_html": "

\u672c\u6587\u8f6c\u81ea Unity Connect \u535a\u4e3b \u68a6\u60f3\u5728\u8def\u4e0a\u7684 LPP

\n

\u9022\u4eba\u7686\u8a00 Vulkan \u597d\uff0c\u5230\u5e95\u597d\u5728\u54ea\u91cc\uff1f\u5982\u4f55\u5728 Unity \u5de5\u7a0b\u4e2d\u4f7f\u7528 Vulkan API \uff1f\u652f\u6301 Vukan \u7684 GPU \u90fd\u6709\u54ea\u4e9b\uff1f\u6211\u7684\u624b\u673a\u652f\u6301 Vulkan \u5417\uff1f\u4e3a\u4ec0\u4e48\u611f\u89c9\u6e38\u620f\u5382\u5bb6\u90fd\u201c\u4e0d\u79ef\u6781\u201d\u5462\uff0c\u9002\u914d Vulkan \u7684\u6e38\u620f\u4e0d\u591a\u5462\uff1f.......\u5728\u8fd9\u7bc7\u6587\u7ae0\u4e2d\u4e00\u8d77\u627e\u7b54\u6848\u5427\u3002

\n

\u6b63\u5982\u5e76\u884c\u6027\u548c\u591a\u7ebf\u7a0b\u7f16\u7a0b\u4e3a\u591a\u6838 CPU \u7684\u6027\u80fd\u63d0\u5347\u94fa\u5e73\u4e86\u9053\u8def\u4e00\u6837\uff0cVulkan \u4e5f\u7740\u624b\u6253\u9020\u4e00\u4e2a\u591a\u7ebf\u7a0b\u3001\u8de8\u5e73\u53f0\u7684 GPU \u7f16\u7a0b\u548c\u9ad8\u6027\u80fd\u6e32\u67d3\u7684\u672a\u6765\u3002\u81ea\u9762\u4e16\u4ee5\u6765 Vulkan \u56e0\u4e3a\u9ad8\u6027\u80fd\u548c\u4f4e\u5f00\u9500\u800c\u5e7f\u53d7\u5173\u6ce8\uff0c\u76ee\u524d\u5df2\u6709\u4e0d\u5c11\u652f\u6301 Vulkan \u7684\u6e38\u620f\u4e0e\u5e94\u7528\u5982\u300a Doom \u300b\u300a Dota2 \u300b\u3001\u300a\u738b\u8005\u8363\u8000\u300b\u3001\u300a\u4f7f\u547d\u53ec\u5524\u300b\u3001\u300a\u5929\u6daf\u660e\u6708\u5200\u300b\u7b49\u3002

\n

\u4e0b\u9762\u4ee5\u738b\u8005\u8363\u8000\u4e3a\u4f8b\u8bf4\u660e Vulkan \u7684\u9ad8\u6027\u80fd\u548c\u4f4e\u5f00\u9500\u4f18\u52bf\u3002Talk is Cheap ,Shown me the data .

\n

\"image\"

\n

1.\u7279\u6548\u5168\u5f00\uff0c\u753b\u9762\u7cbe\u7f8e\uff0c\u4eba\u7269\u52a8\u4f5c\u884c\u4e91\u6d41\u6c34\uff0c\u73a9\u6e38\u620f\u4e5f\u662f\u4e00\u573a\u89c6\u89c9\u4eab\u53d7\uff08\u8c82\u8749\u8fde\u7eed\u653e\u5927\u62db\u5e27\u7387\u7a33\u5b9a\u5728 60FPS \uff09

\n

\"image\"

\n

2.\u6301\u7eed\u9ad8\u5e27\uff0c\u6253\u56e2\u8981\u7a33\uff0c\u80dc\u5229\u5728\u671b

\n

\"image\"

\n

3.\u66f4\u4f4e\u529f\u8017\uff0c\u66f4\u4f4e\u53d1\u70ed\uff0c\u5ef6\u957f\u624b\u673a\u7eed\u822a\u65f6\u95f4

\n

\"image\"

\n

Unity \u4f5c\u4e3a\u4e00\u4e2a\u79fb\u52a8\u5e73\u53f0\u6700\u4e3a\u6210\u529f\u7684\u6e38\u620f\u5f00\u53d1\u5e73\u53f0\uff0c\u4ece 2016 \u5e74 12 \u6708\uff0cUnity Technologies \u8868\u793a Unity \u6e38\u620f\u5f15\u64ce 5.6 \u7248\u5c06\u652f\u6301 Vulkan API \uff1b\u5230 2017 \u5e74 3 \u6708\uff0cUnity 5.6 \u63d0\u4f9b\u6b63\u5f0f\u652f\u6301 Vulkan API\uff0c\u518d\u5230 Unity 2019.2 \u589e\u52a0\u4e86\u8bb8\u591a Vulkan \u8865\u4e01\uff0cUnity \u4e00\u76f4\u5728\u63d0\u9ad8\u6e38\u620f\u753b\u8d28\u4e0e\u63d0\u5347\u6e38\u620f\u6027\u80fd\u7684\u9053\u8def\u4e0a\u594b\u529b\u524d\u884c\u3002

\n

\u5982\u4f55\u5728\u9879\u76ee\u4e2d\u4f7f\u7528 Vulkan API \u8fdb\u884c\u6784\u5efa

\n

1.\u4ece Unity \u6587\u4ef6\u83dc\u5355\u4e2d\u9009\u62e9\u201cBuild Settings\u201d

\n

\"image\"

\n

2.\u4ece\u6784\u5efa\u8bbe\u7f6e\u9762\u677f\u4e2d\u9009\u62e9\u201cPlayer Settings\u2026\u201d

\n

\"image\"

\n

3.\u5355\u51fb\u5c55\u5f00\u201cOther Settings\u201d\u9762\u677f\u3002

\n

\"image\"

\n

4.\u53d6\u6d88\u9009\u4e2d\u201cWindows \u7684\u81ea\u52a8\u56fe\u5f62 API\u201d\u590d\u9009\u6846

\n

\"image\"

\n

5.\u5355\u51fb\u201c+\u201d\u53f7\uff0c\u9009\u62e9 Vulkan \u5c06\u5176\u6dfb\u52a0\u5230\u6d3b\u52a8 API \u5217\u8868\u4e2d

\n

\"image\"

\n

6.\u4f7f\u7528\u201c-\u201d\u53f7\u4ece\u6d3b\u52a8\u5217\u8868\u4e2d\u5220\u9664\u5176\u4ed6 API

\n

\"image\"

\n

\u8be5\u9879\u76ee\u73b0\u5728\u5c06\u4f7f\u7528 Vulkan API \u8fdb\u884c\u6784\u5efa\u3002

\n

\u79fb\u52a8\u7aef Vulkan GPU \u5927 PK

\n

\u7531\u4e8e Vulkan \u8bde\u751f\u7684\u65f6\u95f4\u4e0d\u957f\uff0c\u56e0\u6b64\u5f53\u4e0b\u5e02\u9762\u4e0a GPU \u5e76\u4e0d\u80fd\u5f88\u597d\u7684\u652f\u6301\uff0c\u4e3a\u4e86\u4f7f\u5927\u5bb6\u66f4\u597d\u7684\u4e86\u89e3\u8fd9\u65b9\u9762\u7684\u60c5\u51b5\uff0c\u6211\u7b80\u8981\u4ecb\u7ecd\u79fb\u52a8\u7aef\u76ee\u524d\u80fd\u591f\u5f88\u597d\u7684\u652f\u6301 Vulkan \u7684 GPU\u3002

\n

Android \u5e73\u53f0\u4e0b\uff0c\u7531\u4e8e\u6ca1\u6709\u7edf\u4e00\u7684\u786c\u4ef6\u6807\u51c6\uff0c\u5bfc\u81f4\u5404\u4e2a\u5382\u5bb6\u5404\u4e2a\u578b\u53f7\u667a\u80fd\u624b\u673a\u3001\u5e73\u677f\u7535\u8111\u7684\u786c\u4ef6\u914d\u7f6e\u5927\u76f8\u5f84\u5ead\u3002\u76ee\u524d\u5e94\u7528\u5728 Android \u79fb\u52a8\u5e73\u53f0\u7684 GPU \u4e3b\u8981\u7531 4 \u5bb6\u516c\u53f8\u63d0\u4f9b\uff0c\u5206\u522b\u4e3a Imagination\u3001ARM\u3001\u9ad8\u901a\u3001NVIDIA\u3002\u6211\u5c06\u5bf9\u8fd9\u56db\u5bb6\u516c\u53f8\u63d0\u4f9b\u7684\u652f\u6301 Vulkan \u7684 GPU \u8fdb\u884c\u7b80\u8981\u4ecb\u7ecd\u3002\u5982\u4e0b\uff1a

\n

PowerVR Rogue

\n

PowerVR Rogue \u662f\u7531 Imagination \u4e8e 2010 \u5e74\u53d1\u5e03\u7684 PowerVR \u67b6\u6784\uff0c\u652f\u6301 Vulkan \u9700\u8981\u7684 PowerVR 6 \u4ee5\u53ca\u66f4\u65b0\u7684\u7cfb\u5217\uff0c\u5177\u4f53\u60c5\u51b5\u5982\u4e0b\u3002

\n

PowerVR Series7XT \u7cfb\u5217\u662f\u4e2d\u9ad8\u7aef\u56fe\u5f62\u5904\u7406\u5668\uff0c\u4e3b\u8981\u578b\u53f7\u6709 PowerVR GT7200\u3001PowerVR GT7400\u3001PowerVR GT7600\u3001PowerVR GT7800\u3001PowerVR GT7900 \u7b49\u3002Series7XT \u652f\u6301 HDR \u6e32\u67d3\u30014K \u7eb9\u7406\u3001\u7269\u7406\u7740\u8272\u7b49\u3002Android \u8bbe\u5907\u4e2d\u4f7f\u7528 PowerVR \u67b6\u6784\u7684 GPU \u7684\u4ee3\u8868\u6027\u4ea7\u54c1\u662f\u9b45\u65cf\u7684 PRO7 Plus,\u8fd9\u6b3e\u624b\u673a\u642d\u8f7d\u4e86 Helio X30 \u5904\u7406\u5668\uff0c\u96c6\u6210\u4e86 PowerVR 7XTP GPU\u3002

\n

Mail \u7cfb\u5217

\n

Mail \u7cfb\u5217 GPU \u662f ARM \u8bbe\u8ba1\u51fa\u54c1\u7684\uff0c\u5176\u4e2d Midgard1-4 \u53ef\u4ee5\u5168\u5e73\u53f0\u652f\u6301 Vulkan API\u3002\u76ee\u524d\u4e3b\u8981\u578b\u53f7\u4e3a Mail-G71\u3001Mail-G72\u3001Mail-T760\u3001Mail-T820\u3001Mail-T830\u3001Mail-T860\u3001Mail-T880 \u7b49

\n

Mail-G71 \u57fa\u4e8e Bifrost \u67b6\u6784\uff0c\u62e5\u6709\u975e\u5e38\u5f3a\u5927\u7684\u79fb\u52a8\u56fe\u50cf\u5904\u7406\u80fd\u529b\uff0c\u5927\u5927\u964d\u4f4e\u4e86\u8bbe\u8ba1\u529f\u7387\uff0c\u4ee5\u63d0\u9ad8\u540c\u7b49\u6838\u5fc3\u9762\u79ef\u4e0b\u7684\u56fe\u5f62\u5904\u7406\u6027\u3002\u4e09\u661f Galaxy S8 \u7cfb\u5217\u624b\u673a\u91c7\u7528\u7684\u5c31\u662f Mail-G71 \u56fe\u5f62\u5904\u7406\u5668\u800c\u642d\u8f7d\u9e92\u9e9f 970 \u5904\u7406\u5668\u7684\u534e\u4e3a P20\uff0cGPU \u4f7f\u7528\u7684\u5219\u662f Mail-G72\u3002

\n

\"image\"

\n

Adreno \u7cfb\u5217

\n

Adreno \u7cfb\u5217\u7531\u9ad8\u901a\u63a8\u51fa\uff0c\u88ab\u5e7f\u6cdb\u7528\u4e8e\u9ad8\u901a\u7684 Snapdragon \u5e73\u53f0\u4e0a\u3002\u5176\u4e2d\uff0c\u9ad8\u901a Adreno 400 \u548c Adreno500 \u7cfb\u5217\u5168\u5e73\u53f0\u652f\u6301 Vulkan API\u3002\u76ee\u524d\u5e94\u7528\u8f83\u4e3a\u5e7f\u6cdb 3 \u6b3e Adreno \u7cfb\u5217 GPU \u5206\u522b\u662f Adreno 430\u3001Adreno 530\u3001Adreno 540\u3002

\n

Adreno 540 \u4e0e Adreno 530 \u76f8\u6bd4\uff0c\u5c06\u9891\u7387\u63d0\u9ad8\u4e86 710MHz\uff0c\u63d0\u5347\u8fd1 14%\u7684\u6027\u80fd\u3002\u518d\u52a0\u4e0a\u5176\u4ed6\u65b9\u9762\u7684\u5404\u79cd\u4f18\u5316\uff0cAdreno 540 \u7684\u6027\u80fd\u6bd4 Adreno 530 \u63d0\u5347\u8fbe 25%\uff0c\u5c0f\u7c73 6 \u642d\u8f7d\u7684\u9a81\u9f99 835 \u5904\u7406\u5668\u5c31\u96c6\u6210\u4e86 Adreno 540 \u7684\u56fe\u5f62\u5904\u7406\u5668\u3002

\n

\"image\"

\n

GeForce ULV \u7cfb\u5217

\n

GeForce ULV \u7cfb\u5217\u7531 NVIDIA \u63a8\u51fa\uff0c\u88ab\u5e7f\u6cdb\u5e94\u7528\u4e8e Tegra \u5e73\u53f0\u4e0a\u3002\u76ee\u524d\u652f\u6301 Vulkan API \u7684\u578b\u53f7\u4e3a Tegra x1 \u7b49\u3002\u4ece\u6027\u80fd\u4e0a\u6765\u770b\uff0cNVIDIA \u7684 GeForce \u7cfb\u5217\u82af\u7247\u5728\u6574\u4f53\u4e0a\u975e\u5e38\u7684\u4f18\u79c0\uff0c\u7279\u522b\u5728\u9ad8\u6e05\u89c6\u9891\u5f55\u5236\u548c\u64ad\u653e\u65b9\u9762\u4ee5\u53ca\u5927\u578b 3D \u6e38\u620f\u65b9\u9762\u6709\u7740\u4e0d\u9519\u7684\u8868\u73b0\u3002

\n

NVIDIA \u63a8\u51fa\u7684 Shield \u7cfb\u5217\u6e38\u620f\u673a\u4ee5\u53ca\u5e73\u677f\u90fd\u662f\u642d\u8f7d Tegra x1\uff0c\u800c\u5927\u540d\u9f0e\u9f0e\u7684\u4efb\u5929\u5802 Switch \u4e5f\u662f\u91c7\u7528\u7684 Tegra x1 \u6539\u8fdb\u7248\u3002

\n

\"image\"

\n

\u5199\u5230\u8fd9\u91cc\u76f8\u4fe1\u5df2\u7ecf\u6709\u5f88\u591a\u7684\u5c0f\u4f19\u4f34\u6709\u4e2a\u7591\u95ee\uff1aVulkan \u53ef\u4ee5\u5927\u5e45\u5ea6\u63d0\u9ad8\u6e32\u67d3\u6027\u80fd\uff0c\u63d0\u9ad8\u6e38\u620f\u4f53\u9a8c\uff0c\u90a3\u4e3a\u4ec0\u4e48\u611f\u89c9\u6e38\u620f\u5382\u5bb6\u90fd\u201c\u4e0d\u79ef\u6781\u201d\u5462\uff0c\u9002\u914d Vulkan \u7684\u6e38\u620f\u4e0d\u591a\u5462\uff1f\uff1f\uff1f

\n

\u4e00\u53e5\u8bdd\u6982\u62ec\u5c31\u662f\uff0c\u65f6\u95f4\u5c31\u662f\u91d1\u94b1\uff0c\u6548\u7387\u5c31\u662f\u751f\u547d\u3002

\n

\u5c24\u5176\u5728\u6e38\u620f\u884c\u4e1a\u3002Vulkan \u662f\u4e2a\u65b0\u4e1c\u897f\uff0c\u5f00\u53d1\u56e2\u961f\u5b66\u4e60\u5b83\u9700\u8981\u65f6\u95f4\uff0c\u800c\u4e14\u5373\u4f7f\u4f7f\u7528\u4e86 Vulkan API\uff0c\u4f46\u662f\u4e0d\u82b1\u7cbe\u529b\u4f18\u5316\u7684\u8bdd\uff0c\u6548\u679c\u53ef\u80fd\u6bd4\u4e4b\u524d\u66f4\u5dee(\u738b\u8005\u8363\u8000 Vulkan \u7248\u4e5f\u4e8e\u4eca\u5e74\u5df2\u7ecf\u4e0d\u7ef4\u62a4\u4e86)\uff0c\u6e38\u620f\u9700\u6309\u7167\u673a\u578b\u8fdb\u884c\u9002\u914d\u3002\u800c\u8fd9\u4e9b\u9700\u8981\u5e73\u53f0\uff0c\u624b\u673a\u5382\u5bb6\u548c\u6e38\u620f\u5382\u5546\u4e00\u8d77\u53c2\u4e0e\u4f18\u5316\uff0c\u800c\u4e14\u8981\u90fd\u6709\u610f\u613f\uff0c\u7f3a\u4e00\u4e0d\u53ef\u3002

\n

\u539f\u6587\u94fe\u63a5\uff1ahttps://connect.unity.com/p/zen-yao-tong-guo-unityshi-yong-vulkan-api-vulkan-gpu-da-pk?app=true

\n" }, { "author": { "url": "member/unn", "name": "unn", "avatar": "https://cdn.v2ex.com/gravatar/cfff9ca626c77fa9bdd8a8e7eb3048d0?s=73&d=retro" }, "url": "t/644467", "date_modified": "2020-02-14T02:43:35+00:00", "content_html": "

\u672c\u6587\u8f6c\u81ea Unity Connect \u535a\u4e3b \u5317\u4eac\u7433\u4e91\u4fe1\u606f\u79d1\u6280\u6709\u9650\u8d23\u4efb\u516c\u53f8

\n

\u5b66\u4e60\u6a21\u578b\u5408\u7406\u5bfc\u5165 Unity3D \u5f15\u64ce

\n
 \u76f8\u4fe1\u5728\u6e38\u620f\u4e2d\uff0c\u6a21\u578b\u76f8\u5f53\u4e8e\u6e38\u620f\u5fc5\u8981\u7684\u5143\u7d20\uff0c\u4f8b\u5982\u6e38\u620f\u7684\u4e00\u4e2a\u4eba\u7269\u89d2\u8272\uff0c\u6211\u4eec\u53ef\u4ee5\u79f0\u5b83\u4e3a\u4e00\u4e2a\u6a21\u578b\uff0c\u4eca\u5929\u548c\u5c0f\u7f16\u4e00\u8d77\u5b66\u4e60\u4e00\u4e0b\uff0c\u5bfc\u5165 Unity 3d \u6a21\u578b\uff0c\u6211\u4eec\u5e94\u8be5\u6ce8\u610f\u54ea\u4e9b\u7ec6\u8282\uff01\u5f53\u7136\u6211\u4eec\u77e5\u9053\u5e38\u7528\u7684\u6a21\u578b\u90fd\u53ef\u4ee5\u901a\u8fc7 Maya/3D Max \u7b49\u4e09\u7ef4\u52a8\u753b\u8f6f\u4ef6\u5236\u4f5c\u7684\u3002\n
\n

\u5b98\u65b9\u5b66\u4e60\u6587\u6863\uff1a https://docs.unity3d.com/Manual/FBXImporter-Model.html

\n

1\u3001\u6a21\u578b\u81ea\u8eab\u89c4\u8303\uff1a

\n
 1.0 \u6240\u6709\u7684\u6a21\u578b\u5728\u539f\u70b9\u521b\u5efa\uff0c\u6ca1\u6709\u5177\u4f53\u7684\u7279\u5b9a\u8981\u6c42\u4e0b\uff0c\u9700\u8981\u4ee5\u7269\u4f53\u5bf9\u8c61\u4e2d\u5fc3\u4e3a\u8f74\u5fc3\uff1b\n\n 1.1 \u6a21\u578b\u9762\u6570\uff1a\u79fb\u52a8\u7aef\uff08 300-1500 \u4e2a\u591a\u8fb9\u5f62\u8fbe\u5230\u6bd4\u8f83\u597d\u7684\u6548\u679c\uff09 PC \u7aef\uff08 1500-4000 \u6bd4\u8f83\u9002\u5b9c\uff09\u6b63\u5e38\u7684\u5355\u4e2a\u7269\u4f53\u6700\u597d\u63a7\u5236\u5728 1000 \u9762\u4ee5\u4e0b\uff0c\u6240\u6709\u7684\u7269\u4f53\u9762\u6570\u4e0d\u8d85\u8fc7 20000 \u4e2a\u4e09\u89d2\u9762\uff1b\n\n 1.2 \u6a21\u578b\u5927\u5c0f\uff1a\u6a21\u578b\u6587\u4ef6\u505a\u5230\u6700\u5927\u7684\u4f18\u5316\uff0c\u5bf9\u4e8e\u770b\u4e0d\u5230\u7684\u9762\uff0c\u6211\u4eec\u53ef\u4ee5\u91c7\u7528\u76f4\u63a5\u5220\u9664\uff0c\u5408\u5e76\u65ad\u5f00\u7684\u70b9\uff0c\u79fb\u9664\u5b64\u7acb\u7684\u70b9\uff1b\n\n 1.3 \u6a21\u578b\u547d\u540d\uff1a\u547d\u540d\u6700\u597d\u505a\u5230\u89c4\u8303\u5316\uff0c\u6a21\u578b\u5728\u7ed9\u7ed1\u5b9a\u4e4b\u524d\u5fc5\u987b\u505a\u4e00\u6b21\u91cd\u7f6e\u53d8\u6362\uff1b\n\n 1.4 \u6a21\u578b\u590d\u5236\uff1a\u5982\u679c\u7269\u4f53\u53ef\u4ee5\u590d\u5236\u7684\u8bdd\uff0c\u5c31\u5c3d\u91cf\u590d\u5236\uff1b\u4f8b\u5982\u4e00\u4e2a 500 \u9762\u7684\u7269\u4f53\uff0c\u70d8\u57f9\u597d\u4e4b\u540e\u590d\u5236\u51fa\u53bb 50 \u4e2a\uff0c\u90a3\u4e48\u4ed6\u6240\u6d88\u8017\u8d44\u6e90\u57fa\u672c\u548c\u4e00\u4e2a\u7269\u4f53\u6d88\u8017\u7684\u8d44\u6e90\u57fa\u672c\u662f\u4e00\u6837\uff1b\n\n 1.5 \u6a21\u578b\u5355\u4f4d\uff1a\u5728\u5efa\u6a21\u578b\u4e4b\u524d\u8bbe\u5b9a\u597d\u5355\u4f4d\uff0c\u5728 Unity3d \u4e2d\u7528\u5230\u7684\u5355\u4f4d\u8bbe\u7f6e\u5fc5\u987b\u8981\u4e00\u6837\uff0c\u6a21\u578b\u548c\u6a21\u578b\u4e4b\u95f4\u7684\u6bd4\u4f8b\u8981\u6b63\u786e\uff0c\u548c\u7a0b\u5e8f\u5bfc\u5165\u7684\u5355\u4f4d\u8981\u4e00\u81f4\uff0c\u5982\u679c\u5230\u7a0b\u5e8f\u4e2d\u5355\u4f4d\u9700\u8981\u7f29\u653e\u4e5f\u5c3d\u53ef\u80fd\u7edf\u4e00\u8c03\u6574\u7f29\u653e\u6bd4\u4f8b\uff0c\u7edf\u4e00\u5355\u4f4d\u4e3a\u7c73\uff1b\n
\n

2\u3001\u6a21\u578b\u5bfc\u5165\u4e2d\u7684\u89c4\u8303\uff1a

\n
 2.0 \u6a21\u578b\u4f7f\u7528\u7684\u6750\u8d28\uff0c\u9996\u5148\u5728 3d Max \u548c Maya \u4e2d\uff0c\u4e0d\u662f\u6240\u6709\u7684\u6750\u8d28\u5728 Unity3d \u4e2d\u90fd\u53ef\u4ee5\u652f\u6301\u4f7f\u7528\uff0c\u53ea\u6709 Standard \uff08\u6807\u51c6\u6750\u8d28\uff09\u548c Multi/Sub-Object \uff08\u591a\u7ef4 /\u5b50\u7269\u4f53\u6750\u8d28\uff09\u88ab Unity3d \u8f6f\u4ef6\u6240\u652f\u6301\u3002\n\n 2.1 \u6a21\u578b\u8d34\u56fe\u683c\u5f0f\u548c\u5c3a\u5bf8\uff1a\u5e38\u7528\u7684\u56fe\u7247\u683c\u5f0f\u662f .tga \u548c .png (\u5e26\u900f\u660e\u901a\u9053) \u3001\u4e0d\u5e26\u901a\u9053\u4e3a .jpg \uff0c\u8d34\u56fe\u7684\u5c3a\u5bf8\u6700\u597d\u4e3a 2 \u7684 N \u6b21\u65b9,\u6700\u5927\u7684\u8d34\u56fe\u5c3a\u5bf8\u4e0d\u80fd\u8d85\u8fc7 1024X1024\uff0c\u5f53\u7136\u7279\u5b9a\u7684\u8981\u6c42\uff0c\u5c3a\u5bf8\u53ef\u4ee5\u6839\u636e\u5177\u4f53\u7684\u9700\u6c42\u800c\u5b9a\u3002\n\n 2.2 \u6a21\u578b\u8d34\u56fe\u5176\u4ed6\u6ce8\u610f\u70b9\uff1a\n\n 2.2.0 \u8d34\u56fe\u547d\u540d\u4e0d\u8981\u6709\u4e2d\u6587\u5b57\u547d\u540d\uff0c\u5e76\u4e14\u4e0d\u80fd\u6709\u91cd\u540d\uff1b\n\n 2.2.1 \u6750\u8d28\u547d\u540d\u548c\u7269\u4f53\u540d\u79f0\u6700\u597d\u4fdd\u6301\u4e00\u81f4\uff0c\u6613\u4e8e\u6574\u7406\uff0c\u6750\u8d28\u7403\u7684\u7236\u5b50\u5c42\u7ea7\u7684\u547d\u540d\u5c3d\u53ef\u80fd\u4e00\u81f4\uff1b\n\n 2.2.2 \u540c\u79cd\u8d34\u56fe\u53ef\u4ee5\u4f7f\u7528\u540c\u4e00\u4e2a\u6750\u8d28\u7403\uff1b\n\n 2.2.3 \u5e26 Alpha \u901a\u9053\u8d34\u56fe\u56fe\u7247\u683c\u5f0f\u6700\u597d\u4e3a tga \u548c png \u683c\u5f0f\uff0c\u5728\u547d\u540d\u53ef\u4ee5\u52a0 _al \u52a0\u4ee5\u533a\u5206\uff1b\n\n 2.2.4 \u6a21\u578b\u9700\u8981\u901a\u8fc7\u901a\u9053\u5904\u7406\u65f6\uff0c\u5728\u5236\u4f5c\u901a\u9053\u7eb9\u7406\uff0c\u6700\u597d\u5c06\u900f\u660e\u90e8\u5206\u6539\u6210\u6a21\u578b\u7684\u4e3b\u8272\uff0c\u8fd9\u6837\u6e32\u67d3\u53ef\u4ee5\u4f7f\u6709\u6548\u8fb9\u7f18\u90e8\u5206\u5927\u989c\u8272\u6b63\u786e\uff0c\u901a\u9053\u7eb9\u7406\u5728\u7a0b\u5e8f\u6e32\u67d3\u5360\u7528\u7684\u8d44\u6e90\u540c\u5c3a\u5bf8\u5927\u666e\u901a\u7eb9\u7406\u8981\u591a\uff0c\u901a\u9053\u547d\u540d\u4e5f\u6700\u597d\u4ee5 _al \u7ed3\u5c3e\uff1b\n\n 2.3 Unity \u8d44\u6e90\u5bfc\u5165\uff1a\n\n \u5bf9\u4e8e\u6e38\u620f\u4e2d\u8d44\u6e90\u5bfc\u5165\u53ef\u4ee5\u5bfc\u5165\u56fe\u7247\uff0c\u7f51\u683c\u7b49\uff0cProject \u9762\u677f\u53f3\u952e\uff08 Import New Asset \uff09\u3002\n\n 2.3.0 \u56fe\u7247\u8bbe\u7f6e\uff1a\n\n TextureType\uff1a\u8d34\u56fe\u7c7b\u578b\u3002\n\n AlphafromGrayscal :\u4f7f\u7528\u7070\u5ea6\u521b\u5efa Alpha\uff0c\u5f53\u9700\u8981 unity \u4e3a\u8d34\u56fe\u521b\u5efa\u4e00\u6761 alpha \u901a\u9053\uff0c\u4f7f\u7528\u5b83\u8f6c\u6362\u5f97\u5230\u7684\u7070\u5ea6\u503c\u6765\u6e32\u67d3\u900f\u660e\u5ea6\uff0c\u53ef\u4ee5\u5f00\u542f\u5b83\u3002\n\n WrapMode\uff1a\u6240\u8c13\u7684\u5305\u88f9\u6a21\u5f0f\uff0c\u51b3\u5b9a\u8d34\u56fe\u4f1a\u65e0\u9650\u6b21\u5e73\u94fa\u8fd8\u662f\u53ea\u7ed8\u5236\u4e00\u6b21\u3002Repeat \u5c31\u662f\u91cd\u590d\u5e73\u94fa\u3002Clamp \u4f1a\u8ba9\u8d34\u56fe\u7684\u8fb9\u7f18\u62c9\u5347\u5e76\u5728\u6539\u53d8\u5927\u5c0f\u65f6\u5019\u586b\u6ee1\u4efb\u4f55\u7f1d\u9699\u3002\n\n FilterMode\uff1a\u6240\u8c13\u7684\u56fe\u50cf\u8fc7\u6ee4\u6a21\u5f0f\uff0c\u5728\u62c9\u4f38\u65f6\u5019\u5bf9\u8d34\u56fe\u8fc7\u6ee4\uff0c\u6bd4\u5982 [Point] \u70b9\u8fc7\u6ee4\uff0c\u5728\u5f88\u8fd1\u770b\u8d34\u56fe\u65f6\u5019\uff0c\u53ef\u80fd\u611f\u89c9\u4e0d\u5747\u3002Bilinear \u5b83\u4f1a\u65f6\u8fd1\u770b\u8d34\u56fe\u663e\u5f97\u6a21\u7cca\u3002Trilinear \u5b83\u4f1a\u5728\u4e0d\u540c mipmap \u5c42\u6b21\u4e4b\u95f4\u6a21\u7cca\u3002\n\n AnisoLevel\uff1a\u8bbe\u7f6e\u5404\u9879\u5f02\u6027\u8fc7\u6ee4\u5668\u7684\u7ea7\u522b\uff0c\u540c\u5c5e\u7684\u53ef\u4ee5\u7406\u89e3\u4e3a\u5f53\u4f60\u4ece\u4e00\u4e2a\u6bd4\u8f83\u9661\u7684\u89d2\u5ea6\u6765\u770b\uff0c\u8d34\u56fe\u73b0\u5b9e\u7684\u53ef\u4ee5\u6709\u591a\u7ec6\u817b\uff0c\u6e32\u67d3\u7684\u7b49\u7ea7\u8d8a\u9ad8\uff0c\u8d8a\u5360\u5185\u5b58\u3002\u60f3\u8981\u786e\u5b9a\u8d34\u56fe\u9875\u9762\u4f1a\u5360\u7528\u591a\u5927\u5185\u5b58\uff0c\u53ef\u4ee5\u957f X \u5bbd\uff0c\u518d\u4e58\u4ee5\u4ed6\u7684\u4f4d\u6df1\u5ea6 [bpp,\u6bcf\u50cf\u7d20\u4f4d\u6570] \uff0c\u5982\u679c\u8d34\u56fe\u5305\u542b mipmap\uff0c\u8fd8\u9700\u8981\u6269\u5927 1.33 \u500d\u3002\n\n 2.3.1 \u7f51\u683c\u8bbe\u7f6e\uff1a\n\n \u7f51\u683c\u5c31\u662f\u90a3\u4e9b Maya\uff0cC4D\uff0c3DSMAX\uff0cC3D\uff0cLW \u7b49\u8f6f\u4ef6\u5bfc\u51fa\u7684\u6587\u4ef6\u3002\u6bd4\u5982\u5bfc\u5165\u4e00\u4e2a .fbx \u6587\u4ef6\u3002\u9009\u4e2d\u540e\uff0c\u5728 Inspector \u9762\u677f\u4e2d\uff0c\u6211\u4eec\u80fd\u770b\u5230\u4e0b\u9762\u7684\u5c5e\u6027\uff1a\n\n ScaleFactor\uff1a\u7f29\u653e\u7cfb\u6570\uff0c\u4f7f\u7528\u8fd9\u4e2a\u5c5e\u6027\u5728\u5bfc\u5165\u8d44\u6e90\u540e\u8bbe\u7f6e\u5176\u5927\u5c0f\uff0c\u8c03\u6574\u8d44\u6e90\u5728\u573a\u666f\u73b0\u5b9e\u8fc7\u5927\uff0c\u6216\u8005\u8fc7\u5c0f\u7684\u95ee\u9898\u3002\n\n MeshCompression\uff1a\u7f51\u683c\u538b\u7f29\u7684\u6bd4\u4f8b\uff08 Off\uff0cLow\uff0cMedium\uff0cHigh \uff09\u4e0d\u53ef\u5426\u8ba4\uff0c\u538b\u7f29\u65f6\u53ef\u4ee5\u8282\u7ea6\u5185\u5b58\u7684\u3002\n\n OptimizeMesh\uff1a\u4e3a\u63d0\u9ad8 GPU \u6027\u80fd\u8bb0\u5f55\u7f51\u683c\u9876\u70b9\u548c\u7d22\u5f15\u3002\n\n GenerateColliders\uff1a\u662f\u5426\u5728\u573a\u666f\u4e2d\u8ba9\u7f51\u683c\u5bf9\u8c61\u5177\u6709\u78b0\u72b6\u4f53\u8868\u73b0\uff0c\u901a\u4fd7\u7684\u8bf4\u5c31\u662f\u5b9e\u5fc3\u7684\uff0c\u4e0d\u53ef\u4ee5\u7a7f\u4f53\u800c\u8fc7\u3002\n\n SwapUVs\uff1a\u4ea4\u6362 UV\uff0c\u5f53\u4f60\u5bfc\u5165\u4e00\u4e2a\u7f51\u683c\u5bf9\u8c61\u65f6\u5019\uff0c\u7740\u8272\u5668\u53ef\u80fd\u4f1a\u4f7f\u7528\u9519\u8bef\u7684 UV \u901a\u9053\uff0c\u5982\u679c\u53d1\u73b0\u8d44\u6e90\u5f02\u5e38\uff08\u6bd4\u5982\u5e26\u5149\u7167\u56fe\u65f6\u5019\uff09\uff0c\u53ef\u4ee5\u9009\u4e2d\u8fd9\u4e2a\u590d\u9009\u6846\u3002\n\n Generate Lightmap UVs\uff1a\u4e3a UV2 \u751f\u6210\u5149\u7167\u8d34\u56fe\u3002\n\n Normals&Tangents\uff1a\u8be5\u9879\u8bbe\u7f6e\u8ba1\u7b97\u6cd5\u7ebf\u5207\u7ebf\n\n Normals\uff1a\u8ba1\u7b97\u6cd5\u7ebf\uff0cimport \u8868\u793a\u4f7f\u7528\u5bfc\u5165\u7684\u7f51\u683c\u6cd5\u7ebf\uff0cCalculate \u8868\u793a\u4ece\u65b0\u8ba1\u7b97\u7f51\u683c\u6cd5\u7ebf\u3002\n\n Tangents\uff1a\u8ba1\u7b97\u5207\u7ebf\uff0cimport \u8868\u793a\u4f7f\u7528\u5bfc\u5165\u7684\u7f51\u683c\u5207\u7ebf\uff0cCalculate \u8868\u793a\u4ece\u65b0\u8ba1\u7b97\u5207\u7ebf\u3002\n\n Smoothing angle\uff1a\u6cd5\u7ebf\u5e73\u6ed1\u89d2\u5ea6\uff0c\u544a\u8bc9\u5f15\u64ce\u5728\u89d2\u5ea6\u503c\u4e3a\u591a\u5c11\u65f6\u5019\u628a\u4e00\u4e2a\u8fb9\u7f18\u89c6\u4e3a\u786c\u8fb9\u7f18\u3002\n\n Split Tangents\uff1a\u662f\u5426\u5206\u79bb\u5207\u7ebf,\u5982\u679c\u6a21\u578b\u5728\u573a\u666f\u6e32\u67d3\u540e\u73b0\u5b9e UV \u7f1d\u9699\uff0c\u8981\u5f00\u542f\u5b83\u3002\n\n Materials\uff1a\n\n Import Materials:\u662f\u5426\u5bfc\u5165\u6750\u8d28\uff0c\u9ed8\u8ba4\u9009\u4e2d\u3002\n\n Material Naming:\u6750\u8d28\u540d\u5b57\u751f\u6210\u6a21\u5f0f\u3002\n\n Material Search\uff1a\u6750\u8d28\u641c\u7d22\u65b9\u6848\u3002\n
\n

3\u3001\u6a21\u578b\u5728\u5236\u4f5c\u8f6f\u4ef6\u4e2d\u5177\u4f53\u8bbe\u7f6e\uff1a

\n
 3.0 \u8d34\u56fe\u70d8\u57f9\u8bbe\u7f6e\uff1a\u5728\u8fdb\u884c Completemap \u70d8\u57f9\u65b9\u5f0f\uff0c\u8d34\u56fe\u901a\u9053\u548c\u7269\u4f53 UV \u5750\u6807\u901a\u9053\u5fc5\u987b\u4e3a 1 \u901a\u9053\u3002\n\n 3.1 lightingMap \u70d8\u57f9\u8bbe\u7f6e\u65f6\uff0c\u548c completemap \u8bbe\u7f6e\u6709\u4e9b\u4e0d\u540c\uff0c\u8d34\u56fe\u901a\u9053\u548c\u7269\u4f53 UV \u5750\u6807\u5fc5\u987b\u4e3a 3 \u901a\u9053\uff0c\u70d8\u57f9\u65f6\u706f\u5149\u7684\u9634\u5f71\u65b9\u5f0f\u4e3a adv.raytraced \u9ad8\u7ea7\u5149\u7ebf\u8ddf\u8e2a\u9634\u5f71\uff0c\u80cc\u666f\u8272\u8981\u6539\u767d\u8272\uff0c\u53ef\u4ee5\u907f\u514d\u9ed1\u8fb9\u7684\u60c5\u51b5\uff0c\u4e3b\u8981\u7269\u4ef6\u7684\u8d34\u56fe UV \u5fc5\u987b\u624b\u52a8\u5c55\u5f00\uff1b\n\n 3.2 \u6a21\u578b\u7ed1\u5b9a\u53ca\u52a8\u753b\n\n 3.2.0 \u9aa8\u9abc\u5fc5\u987b\u4e3a IK\u3001CAT\u3001BIP \u4e09\u7c7b\uff0cUnity \u4e0d\u8ba4\u865a\u62df\u52a8\u753b\uff0c\u5355\u4e2a\u7269\u4f53\u9aa8\u9abc\u6570\u91cf\u4e0d\u8d85\u8fc7 60 \u4e2a\uff1b\n\n 3.2.1 \u52a8\u753b\u5e27\u7387\u3001\u5e27\u6570\u7684\u63a7\u5236\uff0c\u4e00\u822c\u60c5\u51b5\u4e0b\u6bcf\u79d2 10 \u5e27\uff0c\u4e00\u4e2a\u52a8\u753b\u5c3d\u91cf\u63a7\u5236 1 \u79d2\u5185\u5b8c\u6210\uff1b\n\n 3.3 \u6a21\u578b\u5bfc\u51fa\n\n 3.3.0 \u5c06\u70d8\u57f9\u6750\u8d28\u6539\u4e3a\u6807\u51c6\u6750\u8d28\u7403\uff0c\u901a\u9053\u4e3a 1\uff0c\u81ea\u53d1\u5149 100% \uff1b\n\n 3.3.1 \u5408\u5e76\u9876\u70b9\uff0c\u5220\u9664\u591a\u4f59\u7684\u6750\u8d28\u7403\uff08\u4e0d\u91cd\u8981\u8d34\u56fe\u7f29\u5c0f\uff09;\n\n 3.3.2 \u7269\u4f53\u540d\u79f0\u3001\u6750\u8d28\u7403\u540d\u3001\u8d34\u56fe\u540d\u4fdd\u6301\u4e00\u81f4\uff1b\n\n 3.3.3 \u6309\u8981\u6c42\u5bfc\u51fa\u7684 .fbx \uff08\u68c0\u67e5\u662f\u5426\u8981\u6309\u7ec4\u5bfc\u51fa\uff0c\u5bfc\u51fa fbx \u540e\uff0c\u518d\u91cd\u65b0\u5bfc\u5165 3D Max \uff0f Maya \u4e2d\u52a8\u753b\u662f\u5426\u6b63\u786e\uff09 \n\n .....\n\n \u4e0a\u9762\u867d\u7136\u6ca1\u6709\u56fe\u7247\u7684\u5c55\u793a\uff0c\u4f46\u662f\u5c5e\u4e8e\u5b9e\u8df5\u4e2d\u7684\u6587\u5b57\u603b\u7ed3\uff0c\u5e0c\u671b\u80fd\u5e2e\u52a9\u5230\u5c0f\u4f19\u4f34\u4eec\u3002\n
\n

\u539f\u6587\u94fe\u63a5\uff1a https://connect.unity.com/p/unity3d-shi-yong-ji-qiao-kuai-su-xue-hui-mo-xing-he-li-dao-ru-unity3d-yin-qing?app=true\n\u6b22\u8fce\u5927\u5bb6\u6233\u4e0a\u65b9\u539f\u6587\u94fe\u63a5\uff0c\u4e0b\u8f7d Unity \u5b98\u65b9\u6280\u672f\u793e\u533a app\uff0c\u5728\u7ebf\u6280\u672f\u7b54\u7591\uff0c\u53d1\u73b0\u66f4\u591a\u5e72\u8d27\uff5e

\n", "date_published": "2020-02-14T02:43:17+00:00", "title": "Unity3D \u5b9e\u7528\u6280\u5de7 - \u5feb\u901f\u5b66\u4f1a\u6a21\u578b\u5408\u7406\u5bfc\u5165 Unity3D \u5f15\u64ce", "id": "t/644467" }, { "author": { "url": "member/unn", "name": "unn", "avatar": "https://cdn.v2ex.com/gravatar/cfff9ca626c77fa9bdd8a8e7eb3048d0?s=73&d=retro" }, "url": "t/643390", "title": "Unity3D \u5b9e\u7528\u6280\u5de7 - \u4ece\u5b9e\u8df5\u4e2d\u603b\u7ed3\u7ecf\u9a8c\uff081\uff09", "id": "t/643390", "date_published": "2020-02-10T02:54:08+00:00", "content_html": "

\u672c\u6587\u8f6c\u81ea Unity Connect \u535a\u4e3b \u5317\u4eac\u7433\u4e91\u4fe1\u606f\u79d1\u6280\u6709\u9650\u8d23\u4efb\u516c\u53f8\n\u5de7\u7528 Unity3D \u5f15\u64ce\u7f16\u8f91\u5668

\n

\u4f5c\u4e3a\u4e00\u540d\u6e38\u620f\u5f00\u53d1\u8005\uff0c\u5b66\u4f1a\u5de7\u7528\u5f15\u64ce\u7f16\u8f91\u5668\uff0c\u53ef\u4ee5\u8ba9\u6211\u4eec\u521b\u9020\u51fa\u66f4\u591a\u4f18\u79c0\u7684\u6e38\u620f\u4f5c\u54c1\u3002\u4eca\u5929\u5c0f\u7f16\u4e0e\u5927\u5bb6\u5171\u540c\u6d45\u6790\u8fd9\u4e9b\u5e38\u89c1\u7684\u5b9e\u7528\u6280\u5de7\u3002

\n

\u6d3b\u7528 Unity3D \u5f15\u64ce\u7f16\u8f91\u5668\u6280\u5de7

\n

1\u3001\u901a\u8fc7 Assets \u5206\u652f\u4fdd\u8bc1\u6b63\u786e\u7684\u6d41\u7a0b

\n

\u6240\u6709\u7684 Asset \u90fd\u5e94\u8be5\u53ea\u6709\u4e00\u4e2a\u552f\u4e00\u7684\u7248\u672c\u3002\u5982\u679c\u5f53\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u5206\u652f\u7248\u672c\u7684 Prefab\u3001Scene \u6216\u662f Mesh\uff0c\u90a3\u4e48\u6211\u4eec\u9700\u8981\u5236\u5b9a\u4e00\u4e2a\u975e\u5e38\u6e05\u6670\u7684\u6d41\u7a0b\uff0c\u6765\u786e\u5b9a\u54ea\u4e2a\u662f\u6b63\u786e\u7684\u7248\u672c\u3002\u9519\u8bef\u7684\u5206\u652f\u5e94\u8be5\u8d77\u4e00\u4e2a\u7279\u522b\u7684\u540d\u5b57\uff0c\u4f8b\u5982\u53cc\u4e0b\u5212\u7ebf\u524d\u7f00\uff1a__MainScene_Backup\u3002Prefab \u7248\u672c\u5206\u652f\u9700\u8981\u4e00\u4e2a\u7279\u522b\u7684\u6d41\u7a0b\u6765\u4fdd\u8bc1\u5b89\u5168 \u3002

\n

2\u3001Unity3D \u9047\u5230\u673a\u5668\u7a81\u7136\u6b7b\u673a\u672a\u4fdd\u5b58\u573a\u666f\u7684\u60c5\u51b5

\n

\u5f53\u4f60\u5728 Unity3D \u4e2d\u7f16\u8f91\u573a\u666f\uff0c\u7a81\u7136\u6b7b\u673a\u65f6\uff0c\u53ef\u4ee5\u5728\u9879\u76ee\u6587\u4ef6\u76ee\u5f55\u4e2d\u627e\u5230 Temp \u6587\u4ef6\u5939\uff0c\u53cc\u51fb\u6587\u4ef6\u5939\uff0c\u627e\u5230_Backupscenes \u6587\u4ef6\u5939\uff0c\u628a\u540e\u7f00\u4e3a .backup \u7684\u6587\u4ef6\u540e\u7f00\u6539\u4e3a .unity\uff0c\u7136\u540e\u62d6\u8fdb Unity3D \u7684 Project \u754c\u9762\u91cc\u9762\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u8fd8\u539f\u6b7b\u673a\u524d\u573a\u666f\u6700\u540e\u60c5\u51b5\u3002

\n

3\u3001\u8003\u8651\u7f16\u5199\u901a\u7528\u7684\u81ea\u5b9a\u4e49 Inspector \u4ee3\u7801

\n

\u4f5c\u4e3a Unity3D \u7684\u68c0\u89c6\u9762\u677f\uff0c \u7f16\u8f91 Inspecto r \u5c5e\u6027\u65f6\uff0c\u5b9e\u73b0\u81ea\u5df1\u5b9a\u4e49\u7684 Inspector \u662f\u975e\u5e38\u76f4\u622a\u4e86\u5f53\u7684\u3002\u800c\u7f16\u8f91\u5668\u6709\u5f88\u591a\u7c7b\uff1a\u7f16\u8f91\u5668\u7c7b\u3002\u4f8b\u5982\uff1aEditorGUI \uff08\u7f16\u8f91\u5668\u754c\u9762\uff09, EditorGUILayout \uff08\u7f16\u8f91\u5668\u754c\u9762\u5e03\u5c40\uff09, EditorGUIUtility \uff08\u7f16\u8f91\u5668\u754c\u9762\u5de5\u5177\uff09\u7b49\u7b49\u8fd9\u4e9b\uff0c\u90fd\u662f\u7f16\u8f91\u5668\u5bf9\u754c\u9762\u8fdb\u884c\u7f16\u8f91\uff0c\u6211\u4eec\u90fd\u53ef\u4ee5\u8fdb\u884c\u5b66\u4e60\u7b80\u5355\u5957\u7528\u3002

\n

4\u3001\u5b66\u4f1a\u573a\u666f\u5bf9\u8c61\u7684\u7075\u6d3b\u8bbe\u7f6e

\n

\u4e00\u822c\u6211\u4eec\u628a\u63a7\u5236\u5bf9\u8c61\u548c\u573a\u666f\u6587\u4ef6\u5939\uff08\u7a7a Game Objec \uff09\u653e\u5728\u539f\u70b9\uff08 0\uff0c0\uff0c0 \uff09\uff0c\u5047\u8bbe\u4f4d\u7f6e\u5bf9\u4e8e\u8fd9\u4e2a\u5bf9\u8c61\u4e0d\u91cd\u8981\uff0c\u90a3\u4e48\u5c31\u628a\u5b83\u653e\u5230\u539f\u70b9\u3002\u8fd9\u6837\u4f60\u5c31\u4e0d\u4f1a\u9047\u5230\u5904\u7406 Local Space \u548c World Space \u7684\u9ebb\u70e6\uff0c\u4ee3\u7801\u4e5f\u4f1a\u66f4\u7b80\u6d01\u3002

\n

\u4f8b\u5982\uff1a

\n

\u628a\u4e16\u754c\u7684\u5730\u9762\u653e\u5728 Y=0\uff0c\u8fd9\u6837\u80fd\u591f\u66f4\u65b9\u4fbf\u7684\u628a\u5bf9\u8c61\u653e\u5230\u5730\u9762\u4e0a\u3002\u800c\u4e14\u5728\u6e38\u620f\u903b\u8f91\u4e2d\uff0c\u80fd\u591f\u628a\u4e16\u754c\u4f5c\u4e3a 2D \u7a7a\u95f4\u6765\u5904\u7406\uff08\u5047\u8bbe\u5408\u9002\u7684\u8bdd\uff09\uff0c\u6bd4\u5982 AI \u548c\u7269\u7406\u6a21\u62df\u3002

\n

\u628a\u89d2\u8272\u548c\u5730\u9762\u7269\u4f53\u7684\u4e2d\u5fc3\u70b9( Pivot )\u653e\u5728\u5e95\u90e8\u3002\u4e0d\u8981\u653e\u5728\u4e2d\u95f4\u8fd9\u80fd\u591f\u4f7f\u4f60\u65b9\u4fbf\u7684\u628a\u89d2\u8272\u6216\u8005\u5176\u5b83\u5bf9\u8c61\u7cbe\u786e\u7684\u653e\u5230\u5730\u677f\u4e0a\u3002\u5047\u8bbe\u5408\u9002\u7684\u8bdd\uff0c\u5b83\u4e5f\u53ef\u80fd\u4f7f\u5f97\u6e38\u620f\u903b\u8f91\u3001AI\u3001\u751a\u81f3\u662f\u7269\u7406\u4f7f\u7528 2D \u903b\u8f91\u6765\u8868\u73b0 3D\u3002

\n

4\u3001\u5b66\u4f1a\u6b63\u786e\u8bbe\u5b9a\u5bf9\u8c61\u7684 Scale\uff0c\u5e94\u8be5\u4e0e\u7f8e\u672f\u5546\u5b9a\u628a\u6240\u6709\u5bfc\u5165\u7684\u7f29\u653e\u7cfb\u6570\u8bbe\u7f6e\u4e3a 1\uff0c\u5e76\u4e14\u628a\u4ed6\u4eec\u7684 Transform \u7684 Scale \u8bbe\u7f6e\u4e3a 1,1,1\u3002\u53ef\u4ee5\u4f7f\u7528\u4e00\u4e2a\u53c2\u8003\u5bf9\u8c61\uff08\u4e00\u4e2a Unity \u7684 Cube \uff09\u6765\u505a\u7f29\u653e\u6bd4\u8f83\u3002\u4e3a\u4f60\u7684\u6e38\u620f\u9009\u62e9\u4e00\u4e2a\u4e16\u754c\u7684\u5355\u4f4d\u7cfb\u6570\uff0c\u7136\u540e\u575a\u6301\u4f7f\u7528\u5b83\u3002

\n

5\u3001\u4e0d\u8981\u8ba9\u6e38\u620f\u8fd0\u884c\u65f6\u751f\u6210\u7684\u5bf9\u8c61\u641e\u4e71\u573a\u666f\u5c42\u6b21\u7ed3\u6784

\n

\u5728\u6e38\u620f\u8fd0\u884c\u65f6\uff0c\u4e3a\u52a8\u6001\u751f\u6210\u7684\u5bf9\u8c61\u8bbe\u7f6e\u597d\u5b83\u4eec\u7684\u7236\u5bf9\u8c61\uff0c\u53ef\u4ee5\u8ba9\u4f60\u66f4\u65b9\u4fbf\u7684\u67e5\u627e\u3002\u4f60\u53ef\u4ee5\u4f7f\u7528\u4e00\u4e2a\u7a7a\u7684\u5bf9\u8c61\uff0c\u6216\u8005\u4e00\u4e2a\u6ca1\u6709\u884c\u4e3a\u7684\u5355\u4ef6\u6765\u7b80\u5316\u4ee3\u7801\u4e2d\u7684\u8bbf\u95ee\u3002\u53ef\u4ee5\u7ed9\u8fd9\u4e2a\u5bf9\u8c61\u547d\u540d\u4e3a\u201cDynamicObjects\u201d\u3002

\n

\u5355\u4ef6\u53ef\u4ee5\u4f5c\u4e3a\u4e00\u4e9b\u7ba1\u7406\u5668\uff0c\u4f8b\u5982 ParticleManager \u6216\u8005 AudioManager \u4ea6\u6216\u8005 GUIManager\u3002 \u5bf9\u4e8e\u90a3\u4e9b\u975e\u552f\u4e00\u7684 Prefab \u5b9e\u4f8b\u4f7f\u7528\u5355\u4ef6\u7ba1\u7406\u5668\uff08\u4f8b\u5982 Player \uff09\u3002\u4e0d\u8981\u4e3a\u4e86\u575a\u6301\u8fd9\u6761\u539f\u5219\u628a\u7c7b\u7684\u5c42\u6b21\u5173\u7cfb\u590d\u6742\u5316\uff0c\u5b81\u613f\u5728\u4f60\u7684 GameManager \uff08\u6216\u5176\u4ed6\u5408\u9002\u7684\u7ba1\u7406\u5668\u4e2d\uff09\u4e2d\u6301\u6709\u4e00\u4e2a\u5b83\u4eec\u7684\u5f15\u7528\u3002 \u5bf9\u4e8e\u5916\u90e8\u7ecf\u5e38\u4f7f\u7528\u7684\u5171\u6709\u53d8\u91cf\u548c\u65b9\u6cd5\u5b9a\u4e49\u4e3a Static\uff0c\u8fd9\u6837\u4f60\u53ef\u4ee5\u8fd9\u6837\u7b80\u4fbf\u7684\u4e66\u5199 \u201cGameManager.Player\u201d \uff0c\u800c\u4e0d\u7528\u5199\u6210 \u201cGameManager.Instance.player\u201d \u3002

\n

6\u3001\u5b66\u4f1a\u6d3b\u7528\u7f16\u8f91\u5668\u7684\u5feb\u6377\u952e

\n

\u6309\u952e\u76d8\u952e Q\u3001W\u3001E\u3001R\u3001T \u53ef\u4ee5\u4f9d\u6b21\u5207\u6362\u754c\u9762\u4e0a\u7684\u5c0f\u5de5\u5177\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u6309\u6570\u5b57\u952e 2 \u6216 3 \u8fd8\u53ef\u4ee5\u5207\u6362\u573a\u666f\u4e3a 2D \u6a21\u5f0f\u6216 3D \u6a21\u5f0f\u3002\u5982\u679c\u89c9\u5f97\u5728\u573a\u666f\u89c6\u56fe\u4e2d\u8c03\u6574\u5bf9\u8c61\u89c6\u89d2\u592a\u4e0d\u65b9\u4fbf\uff0c\u53ef\u4ee5\u6309\u4f4f\u53f3\u952e\u7ed3\u5408\u952e\u76d8\u4e0a\u7684 A\u3001S\u3001W\u3001D\u3001Q\u3001E \u952e\u50cf\u8d70\u8def\u4e00\u6837\u8c03\u6574\u5230\u5408\u9002\u7684\u89c6\u89d2\uff0c\u7136\u540e\u70b9\u51fb GameObject \u83dc\u5355\u4e0b\u7684 Align With View \u5373\u53ef\u5c06\u6e38\u620f\u89c6\u56fe\u7684\u89c6\u89d2\u4e0e\u573a\u666f\u89c6\u56fe\u540c\u6b65\u3002

\n

7\u3001\u5982\u4f55\u5e94\u5bf9\u811a\u672c\u7684\u8fd0\u884c\u51fa\u9519

\n

\u5982\u679c\u811a\u672c\u51fa\u73b0\u9519\u8bef\uff0cUnity \u7f16\u8f91\u5668\u4f1a\u56e0\u4e3a\u68c0\u67e5\u5230\u51fa\u9519\u800c\u65e0\u6cd5\u8fdb\u5165\u8fd0\u884c\u6a21\u5f0f\uff0c\u8fd9\u65f6\u53ef\u4ee5\u5728\u9879\u76ee\u89c6\u56fe\u4e2d\u65b0\u5efa\u6587\u4ef6\u5939 WebplayerTemplates\uff0c\u7136\u540e\u5c06\u51fa\u9519\u7684\u811a\u672c\u62d6\u5165\u6b64\u6587\u4ef6\u5939\u4e0b\uff0c\u6240\u6709\u4f4d\u4e8e\u8be5\u6587\u4ef6\u5939\u4e0b\u7684\u6587\u4ef6\u90fd\u4f1a\u88ab\u8bc6\u522b\u4e3a\u4e00\u822c\u6587\u4ef6\u4ece\u800c\u4e0d\u4f1a\u5f53\u4f5c\u811a\u672c\u88ab\u7f16\u8bd1\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u8fd0\u884c\u6e38\u620f\u4e86\u3002

\n

8\u3001\u638c\u63e1 Unity3D \u5f15\u64ce\u7f16\u8f91\u5668\u4e2d\u53ef\u7528\u7684\u8c03\u8bd5\u5de5\u5177

\n

Unity3D \u4e2d\u7684\u8c03\u8bd5\u5de5\u5177\u6709\u8bb8\u591a\u529f\u80fd\uff0c\u5305\u62ec\u53ef\u4ee5\u6709\u6548\u5e2e\u52a9\u7528\u6237\u8c03\u8bd5\u6e38\u620f\u7684\u529f\u80fd\uff0c\u4f8b\u5982 Debug.Break\uff0cDebug.Log \uff0cDebug.DrawRay \u548c Debug.DrawLine \u7b49\u51fd\u6570\u3002\u524d\u4e24\u4e2a\u51fd\u6570\u7528\u4e8e\u7406\u89e3\u6e38\u620f\u72b6\u6001\uff0c\u800c\u540e\u4e24\u4e2a\u51fd\u6570\u53ef\u5e2e\u52a9\u7528\u6237\u76f4\u89c2\u5730\u8c03\u8bd5\u6e38\u620f\u3002\u7528\u6237\u8fd8\u53ef\u4ee5\u4f7f\u7528\u8c03\u8bd5\u53ef\u89c6\u68c0\u67e5\u5668\u6765\u67e5\u627e\u8fd0\u884c\u65f6\u7684\u79c1\u6709\u5b57\u6bb5\uff0c\u8c03\u8bd5\u53ef\u89c6\u5316\u68c0\u67e5\u7528\u6237\u9700\u8981\u4ee5\u4e0d\u540c\u65b9\u5f0f\u6765\u8c03\u8bd5\u53ef\u89c6\u5316\u68c0\u67e5\u3002Visual \u8c03\u8bd5\u5668\u53ef\u4ee5\u901a\u8fc7\u751f\u6210\u56fe\u8868\u6765\u5e2e\u52a9\u7528\u6237\u5b9e\u73b0\u8fd9\u4e00\u70b9\uff0c\u7528\u6237\u53ef\u4ee5\u4f7f\u7528 Monitor Components \u6267\u884c\u6b64\u64cd\u4f5c\u3002

\n

9\u3001\u638c\u63e1 Unity3D \u5f15\u64ce\u7f16\u8f91\u5668\u4e2d\u53ef\u7528\u7684\u6d4b\u8bd5\u5de5\u5177

\n

Unity3D \u53d1\u5e03\u4e86\u8bb8\u591a\u6d4b\u8bd5\u5de5\u5177\uff0c\u8fd9\u589e\u52a0\u4e86\u7528\u6237\u7684\u8c03\u8bd5\u6539\u8fdb\u65b9\u6cd5\uff0cUnity3D \u7684\u6d4b\u8bd5\u5de5\u5177\u4e0d\u4ec5\u9002\u5408\u6b63\u5f0f\u6d4b\u8bd5\uff0c\u800c\u4e14\u8fd8\u53ef\u4ee5\u4fbf\u4e8e\u8fdb\u884c\u53ef\u4ee5\u5728\u7f16\u8f91\u5668\u4e2d\u8fd0\u884c\uff0c\u540c\u65f6\u65e0\u9700\u573a\u666f\u8fd0\u884c\u7684 Scratch-pad \u6d4b\u8bd5\u3002

\n

\u6d3b\u7528\u6e38\u620f\u9879\u76ee\u5de5\u4f5c\u6d41\u7a0b\u6280\u5de7

\n

\u5de5\u4f5c\u6d41\u7a0b\u6539\u8fdb\u6280\u5de7\u65e8\u5728\u5e2e\u52a9\u7528\u6237\u6539\u8fdb\u6e38\u620f\u5f00\u53d1\u8fc7\u7a0b\u3002\u4f7f\u7528\u6237\u7684\u9879\u76ee\u5b8c\u6210\u5f97\u66f4\u5feb\uff0c\u66f4\u6b63\u786e\u3002

\n

1\u3001\u4f7f\u7528\u6e90\u4ee3\u7801\u63a7\u5236\uff0c\u83b7\u5f97\u5de5\u4f5c\u6700\u5927\u6548\u7387

\n

\u6b63\u786e\u4f7f\u7528\u6e90\u4ee3\u7801\u63a7\u5236\u6765\u6539\u5584\u7528\u6237\u7684\u5de5\u4f5c\u6d41\u7a0b\u3002\u8fd9\u5c06\u786e\u4fdd\u7528\u6237\u4e0d\u4f1a\u4e22\u5931\u4efb\u4f55\u5de5\u4f5c\uff0c\u8fd8\u53ef\u4ee5\u8ba9\u7528\u6237\u68c0\u67e5\u66f4\u6539\u7684\u5185\u5bb9\u3002\u7528\u6237\u53ef\u4ee5\u5e8f\u5217\u5316\u8d44\u6e90\uff0c\u4f7f\u7528\u5206\u652f\u7b56\u7565\u6765\u6700\u5927\u9650\u5ea6\u5730\u63a7\u5236\u751f\u4ea7\uff0c\u5e76\u4f7f\u7528\u5b50\u6a21\u5757\u6765\u6700\u5927\u5316\u6e90\u4ee3\u7801\u7684\u6709\u6548\u63a7\u5236\u3002

\n

2\u3001\u786e\u8ba4\u9879\u76ee\u4e2d\u6240\u9700\u8d44\u6e90\u7684\u5927\u5c0f

\n

\u8fd9\u4e00\u51b3\u5b9a\u53d6\u51b3\u4e8e\u7528\u6237\u7684\u9879\u76ee\u7c7b\u578b\u4ee5\u53ca\u6e38\u620f\u8fd0\u884c\u7684\u5206\u8fa8\u7387\u3002

\n

3\u3001\u59cb\u7ec8\u7528\u81ea\u52a8\u5316\u6784\u5efa\u8fc7\u7a0b\uff0c\u8282\u7701\u65f6\u95f4\u3002

\n

\u81ea\u52a8\u5316\u6784\u5efa\u8fc7\u7a0b\u8fd8\u5c06\u786e\u4fdd\u7528\u6237\u53ef\u4ee5\u540c\u65f6\u5904\u7406\u4e0d\u540c\u7684\u6e38\u620f\u7248\u672c\uff0c\u5e76\u4e14\u5e2e\u52a9\u7528\u6237\u8fdb\u884c\u5c0f\u7684\u66f4\u6539\uff0c\u65e0\u9700\u5728\u6bcf\u6b21\u66f4\u6539\u540e\u5b8c\u6210\u6574\u4e2a\u6784\u5efa\u8fc7\u7a0b\u3002

\n

4\u3001\u968f\u65f6\u4fdd\u5b58\u6587\u6863

\n

\u517b\u6210\u968f\u624b\u4fdd\u5b58\u597d\u4e60\u60ef\u80fd\u907f\u514d\u5404\u79cd\u95ee\u9898\u3002\u6b64\u5916\uff0c\u6587\u6863\u53ef\u4ee5\u8ba9\u9879\u76ee\u7ec4\u5176\u4ed6\u6210\u5458\u66f4\u597d\u5730\u4e86\u89e3\u3001\u534f\u52a9\u5b8c\u6210\u672c\u9879\u76ee\u3002

\n

5\u3001\u5c06\u6d4b\u8bd5\u573a\u666f\u4e0e\u4ee3\u7801\u5206\u5f00

\n

\u6d4b\u8bd5\u573a\u666f\u53ef\u80fd\u662f\u9879\u76ee\u4e2d\u4e00\u4e2a\u5e9e\u5927\u7684\u90e8\u5206\uff0c\u5728\u9879\u76ee\u5b8c\u6210\u540e\u8fd9\u4e9b\u6d4b\u8bd5\u573a\u666f\u662f\u6ca1\u6709\u7528\u7684\u3002\u8981\u786e\u4fdd\u9879\u76ee\u6587\u4ef6\u4e0d\u4f1a\u592a\u5360\u7a7a\u95f4\uff0c\u8bf7\u5c06\u6d4b\u8bd5\u573a\u666f\u4e0e\u4ee3\u7801\u5206\u5f00\uff0c\u5e76\u5728\u9879\u76ee\u5b8c\u6210\u540e\u5c06\u5176\u5220\u9664\u3002

\n

\u539f\u6587\u94fe\u63a5\uff1a https://connect.unity.com/p/unity3d-shi-yong-ji-qiao-cong-shi-jian-zhong-zong-jie-jing-yan-1?app=true\n\u66f4\u591a Unity \u7cbe\u5f69\u5185\u5bb9\uff0c\u8bf7\u6233\u4e0a\u65b9\u94fe\u63a5\uff0c\u4e0b\u8f7d Unity \u5b98\u65b9 app\uff0c\u5728\u7ebf\u8ba8\u8bba\uff0c\u6280\u672f\u7b54\u7591\uff0c\u5e72\u8d27\u6ee1\u6ee1\uff01

\n" }, { "author": { "url": "member/unn", "name": "unn", "avatar": "https://cdn.v2ex.com/gravatar/cfff9ca626c77fa9bdd8a8e7eb3048d0?s=73&d=retro" }, "url": "t/639988", "title": "[HDRP] PBR Lit shader\uff08\u4e00.\u57fa\u7840\u7528\u6cd5\u7bc7\uff09", "id": "t/639988", "date_published": "2020-01-23T03:15:01+00:00", "content_html": "

\u672c\u6587\u8f6c\u81ea Unity Connect \u535a\u4e3b \u6a31\u82b1\u5154

\n

\u501f\u52a9\u8fd9\u9ed8\u8ba4\u7684 HDRP Shader\uff0c\u5c0f\u4f19\u4f34\u4eec\u53ef\u4ee5\u8f7b\u677e\u5730\u5728 HDRP \u4e2d\u521b\u5efa\u903c\u771f\u7684\u7269\u7406\u6750\u8d28\u3002\u5b83\u5305\u62ec\u4e00\u4e9b\u6548\u679c\u9009\u9879\uff0c\u4f8b\u5982\u6b21\u8868\u9762\u6563\u5c04\uff0c\u8679\u5f69\uff0c\u9876\u70b9\u6216\u50cf\u7d20\u4f4d\u79fb\u7b49\u5404\u79cd\u8868\u73b0\u6548\u679c\u3002

\n

\"image\"

\n

\u4eca\u5929\u5462\uff0c\u4e3b\u8981\u5206\u4eab\u4e00\u4e0b HDRP \u81ea\u5e26\u7684\u4e09\u79cd Shader Types\uff1aShader types \uff08\u7740\u8272\u5668\u7c7b\u578b\uff09

\n\n

\u8981\u521b\u5efa\u65b0\u7684 Lit Material\uff0c\u5728\u5f15\u64ce\u7684\u5bfc\u822a\u680f\u4e2d\u627e\u5230 Asset \u7a97\u53e3\uff0c\u53f3\u952e\u5355\u51fb\u8be5\u7a97\u53e3\uff0c\u7136\u540e\u9009\u62e9 Create> Material\u3002\u8fd9\u4f1a\u5c06\u65b0\u7684\u6750\u8d28\u6dfb\u52a0\u5230 Unity \u9879\u76ee\u7684 Asset \u6587\u4ef6\u5939\u4e2d\u3002\u5f53\u4f60\u5728 HDRP \u4e2d\u521b\u5efa\u65b0\u6750\u8d28\u65f6\uff0c\u9ed8\u8ba4\u60c5\u51b5\u4e0b\u5b83\u4eec\u5c06\u4f7f\u7528 Lit Shader\u3002\u60f3\u8981\u6362\u6210\u5176\u4ed6\u7684\u5462\uff0c\u5b83\u4eec\u5462\uff0c\u90fd\u5728\u201c \u7740\u8272\u5668\u201d\u4e0b\u62c9\u83dc\u5355\u4e2d\u201c HDRP/ \u201d\u4e0b\u3002 \u5bf9\u4e86\uff0c\u6709\u522b\u7684\u95ee\u9898\u7684\u8bdd\uff0c\u53ef\u4ee5\u770b\u4e0b\u6211\u4e4b\u524d\u5199\u7684\u6587\u7ae0\u54e6~ HDRP \u7684\u8d34\u56fe\u901a\u9053\u7ec6\u8282\u53ef\u4ee5\u770b\u8fd9\u91cc\uff1a\u5395\u6240\u5de5\u7a0b HDRP \u540e\u671f Volume \u4ecb\u7ecd\u53ef\u4ee5\u770b\u8fd9\u91cc\uff1aVolume Surface types \uff08\u8868\u9762\u7c7b\u578b\uff09

\n

\"image\"

\n

Tyes \u7684 HDRP \u624b\u518c\u6587\u6863\uff1aTypes

\n\n

Material types \uff08\u6750\u8d28\u7c7b\u578b\uff09

\n

\"image\"

\n

Types \u7684 HDRP \u624b\u518c\u6587\u6863\uff1aTypes

\n\n

\u5728\u5236\u4f5c\u4e4b\u524d\u5462\uff0c\u6211\u4eec\u5148\u6765\u4e86\u89e3\u4e00\u4e0b\u83f2\u6d85\u5c14\u6548\u5e94\uff08 Fresnel effect \uff09\uff0c\u56e0\u4e3a\u5b83\u662f\u4f5c\u4e3a\u57fa\u4e8e\u7269\u7406\u7684\u6e32\u67d3\u7406\u5ff5\u4e2d\u7684\u6838\u5fc3\u7406\u5ff5\u4e4b\u4e00\u3002 \u83f2\u6d85\u5c14\u6548\u5e94 Fresnel Effect \u57fa\u4e8e\u7269\u7406\u7684\u6e32\u67d3\u7684\u6838\u5fc3\u7406\u5ff5\u4e4b\u4e00\u662f\u91c7\u7528\u57fa\u4e8e\u771f\u5b9e\u4e16\u754c\u6d4b\u91cf\u7684\u6750\u8d28\u5149\u5b66\u53c2\u6570\u3002 \u7531\u4e8e\u5149\u7531\u7535\u78c1\u6ce2\u7ec4\u6210\uff0c\u56e0\u6b64\uff0c\u7269\u8d28\u7684\u5149\u5b66\u7279\u6027\u4e0e\u5176\u5bfc\u7535\u7279\u6027\u5bc6\u5207\u76f8\u5173\u3002\u6211\u4eec\u901a\u5e38\u628a\u5bfc\u7535\u6027\u8f83\u5dee\u7684\u6750\u8d28\uff0c\u5982\u7164\u3001\u4eba\u5de5\u6676\u4f53\u3001\u7425\u73c0\u3001\u9676\u74f7\u7b49\u79f0\u4e3a\u7edd\u7f18\u4f53\u3002\u800c\u628a\u5bfc\u7535\u6027\u6bd4\u8f83\u597d\u7684\u91d1\u5c5e\u5982\u91d1\u3001\u94f6\u3001\u94dc\u3001\u94c1\u3001\u9521\u3001\u94dd\u7b49\u79f0\u4e3a\u5bfc\u4f53\u3002\u4ee5\u53ca\u5c06\u5bfc\u7535\u6027\u8d28\u4ecb\u4e8e\u5bfc\u4f53\u548c\u7edd\u7f18\u4f53\u4e4b\u95f4\u7684\u6750\u8d28\u79f0\u4e3a\u534a\u5bfc\u4f53\u3002 \u5373\u6839\u636e\u5bfc\u7535\u7279\u6027\uff0c\u53ef\u5c06\u73b0\u5b9e\u751f\u6d3b\u4e2d\u7684\u7269\u8d28\u5206\u4e3a\u4e09\u4e2a\u4e3b\u8981\u5149\u5b66\u7c7b\u522b\uff1a

\n\n

\u83f2\u6d85\u5c14\u6548\u5e94\uff0c\u8868\u793a\u7684\u662f\u770b\u5230\u7684\u5149\u7ebf\u7684\u53cd\u5c04\u7387\u4e0e\u89c6\u89d2\u76f8\u5173\u7684\u73b0\u8c61\uff0c\u7531\u6cd5\u56fd\u7269\u7406\u5b66\u5bb6\u5965\u53e4\u65af\u4e01.\u83f2\u6d85\u5c14\u7387\u5148\u53d1\u73b0\u3002\u5176\u5177\u4f53\u8868\u73b0\u662f\u5728\u63a0\u5c04\u89d2\uff08\u4e0e\u6cd5\u7ebf\u5448\u63a5\u8fd1 90 \u5ea6\uff09\u4e0b\u5149\u7684\u53cd\u5c04\u7387\u4f1a\u589e\u52a0\u3002\u800c\u4e0a\u8ff0\u7684\u53cd\u5c04\u7387\uff0c\u4fbf\u88ab\u79f0\u4e3a\u83f2\u6d85\u5c14\u53cd\u5c04\u7387\u3002\u5982\u4e0b\u56fe\u3002

\n

\"image\"

\n

\"image\"

\n

\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u6211\u4eec\u5728\u5b8f\u89c2\u5c42\u9762\u770b\u5230\u7684\u83f2\u6d85\u5c14\u6548\u5e94\u5b9e\u9645\u4e0a\u662f\u5fae\u89c2\u5c42\u9762\u5fae\u5e73\u9762\u83f2\u6d85\u5c14\u6548\u5e94\u7684\u5e73\u5747\u503c\u3002 \u4e5f\u5c31\u662f\u8bf4\uff0c\u5f71\u54cd\u83f2\u6d85\u5c14\u6548\u5e94\u7684\u5173\u952e\u53c2\u6570\u5728\u4e8e\u6bcf\u4e2a\u5fae\u5e73\u9762\u7684\u6cd5\u5411\u91cf\u548c\u5165\u5c04\u5149\u7ebf\u7684\u89d2\u5ea6\uff0c\u800c\u4e0d\u662f\u5b8f\u89c2\u5e73\u9762\u7684\u6cd5\u5411\u91cf\u548c\u5165\u5c04\u5149\u7ebf\u7684\u89d2\u5ea6\u3002\u5373\uff1a

\n\n

\u4e0d\u540c\u6750\u8d28\u7684\u83f2\u6d85\u5c14\u6548\u5e94\u7684\u5f3a\u5f31\u662f\u4e0d\u540c\u7684\uff0c\u5bfc\u4f53(\u5982\u91d1\u5c5e)\u7684\u83f2\u6d85\u5c14\u6548\u5e94\u4e00\u822c\u5f88\u5f31\uff0c\u4e3b\u8981\u662f\u56e0\u4e3a\u5bfc\u4f53\u672c\u8eab\u7684\u53cd\u5c04\u7387\u5c31\u5df2\u7ecf\u5f88\u5f3a\u3002\u5c31\u62ff\u94dd\u6765\u8bf4\uff0c\u5176\u53cd\u5c04\u7387\u5728\u6240\u6709\u89d2\u5ea6\u4e0b\u51e0\u4e4e\u90fd\u4fdd\u6301 86%\u4ee5\u4e0a\uff0c\u968f\u89d2\u5ea6\u53d8\u5316\u5f88\u5c0f\uff0c\u800c\u7edd\u7f18\u4f53\u6750\u8d28\u7684\u83f2\u6d85\u5c14\u6548\u5e94\u5c31\u5f88\u660e\u663e\uff0c\u6bd4\u5982\u6298\u5c04\u7387\u4e3a 1.5 \u7684\u73bb\u7483\uff0c\u5728\u8868\u9762\u6cd5\u5411\u91cf\u65b9\u5411\u7684\u53cd\u5c04\u7387\u4ec5\u4e3a 4%\uff0c\u4f46\u5f53\u89c6\u7ebf\u4e0e\u8868\u9762\u6cd5\u5411\u91cf\u5939\u89d2\u5f88\u5927\u7684\u65f6\u5019\uff0c\u53cd\u5c04\u7387\u53ef\u4ee5\u63a5\u8fd1 100%\uff0c\u8fd9\u4e00\u73b0\u8c61\u4e5f\u5bfc\u81f4\u4e86\u91d1\u5c5e\u4e0e\u975e\u91d1\u5c5e\u5916\u89c2\u4e0a\u7684\u4e0d\u540c\u3002 \u5f53\u5149\u7ebf\u5782\u76f4\uff08\u4ee5 0 \u5ea6\u89d2\uff09\u649e\u51fb\u8868\u9762\u65f6\uff0c\u8be5\u5149\u7ebf\u88ab\u53cd\u5c04\uff08 Reflected \uff09\u4e3a\u955c\u9762\u53cd\u5c04\u5149\u7684\u6bd4\u7387\u88ab\u79f0\u4e3a F0\u3002\u5373 F0 \u4e3a 0 \u5ea6\u89d2\u5165\u5c04\u65f6\u7684\u83f2\u6d85\u5c14\u53cd\u5c04\u7387\u3002\u800c\u6298\u5c04\uff08 refracted \uff09\u5230\u8868\u9762\u4e2d\u7684\u5149\u91cf\u5219\u4e3a\u4e3a 1-F0\u3002\u5982\u4e0b\u56fe\u3002

\n

\"image\"

\n

\u5bf9\u4e8e\u5149\u6ed1\u7684\u7535\u4ecb\u8d28\u8868\u9762\uff0c\u5728 0 \u5ea6\u89d2\u5165\u5c04\uff08 F0 \uff09\u5c06\u53cd\u5c04 2-5 \uff05\u7684\u5149\uff0c\u5728\u63a0\u5c04\u89d2\u5165\u5c04\u4e0b\u5c06\u53cd\u5c04 100 \uff05\u7684\u5149\u3002 \u5927\u591a\u6570\u5e38\u89c1\u7535\u4ecb\u8d28\u7684 F0 \u8303\u56f4\u4e3a 0.02-0.05 \uff08\u7ebf\u6027\u503c\uff09\u3002\u5bf9\u4e8e\u5bfc\u4f53\uff0cF0 \u8303\u56f4\u4e3a 0.5-1.0\u3002 \u4e3a\u4e86\u65b9\u4fbf\u521b\u4f5c\u5462\uff0c\u53ef\u53c2\u8003\u5982\u4e0b\u7684 PBR \u6750\u8d28 F0 \u53cd\u5c04\u7387\u901f\u67e5\u56fe\u8868\uff0c\u5176\u4e2d\u5206\u522b\u5bf9\u5e38\u89c1\u6750\u8d28\u7684\u7ebf\u6027\u503c\uff0csRGB \u503c\u548c\u53c2\u8003\u989c\u8272\u8fdb\u884c\u4e86\u5217\u4e3e\u3002

\n

\"image\"

\n

\u597d\u4e86\uff0c\u73b0\u5728\u5462\uff0c\u6211\u4eec\u4e86\u89e3\u4e86\u57fa\u7840\u7684\u8868\u9762\u7c7b\u578b\u548c\u6750\u8d28\u7c7b\u578b\uff0c\u4ee5\u53ca\u7269\u7406\u7684\u6750\u8d28\u89e3\u6790\u4e4b\u540e\u5462\uff0c\u5c31\u53ef\u4ee5\u5f00\u59cb\u5236\u4f5c\u4e86\uff0c\u8fd9\u91cc\u5462\uff0c\u6211\u505a\u4e86\u51e0\u4e2a\u6750\u8d28\u7684\u793a\u4f8b\uff0c\u4f9b\u5927\u5bb6\u53c2\u8003\u4e00\u4e0b~

\n\n

\u2014 \u6728\u677f \u2014

\n

\"image\"

\n

\"\u89c6\u9891\u5c01\u9762\"

\n

\u4e0a\u4f20\u89c6\u9891\u5c01\u9762

\n

\u200b

\n

\u597d\u7684\u6807\u9898\u53ef\u4ee5\u83b7\u5f97\u66f4\u591a\u7684\u63a8\u8350\u53ca\u5173\u6ce8\u8005

\n

\u5728\u201c \u7740\u8272\u5668\u201d\u4e0b\u62c9\u83dc\u5355\u4e2d\uff0c\u9009\u62e9\u201c HDRP\u201d>\u201cLit\u201d \u7535\u4ecb\u8d28\u5177\u6709\u76f8\u5f53\u4f4e\u7684 F0 \u503c - \u901a\u5e38\u4e3a 0.06 \u6216\u66f4\u4f4e\u3002\u5728\u5782\u76f4\u5165\u5c04\u65f6\u7684\u8fd9\u79cd\u4f4e\u53cd\u5c04\u7387\u4f7f\u5f97\u83f2\u6d85\u5c14\u6548\u5e94\u5bf9\u4e8e\u7535\u4ecb\u8d28\u5c24\u5176\u660e\u663e\u3002\u7535\u4ecb\u8d28\u7684\u5149\u5b66\u6027\u8d28\u5728\u53ef\u89c1\u5149\u8c31\u4e0a\u5f88\u5c11\u53d8\u5316\u5f88\u5927\uff0c\u5bfc\u81f4\u65e0\u8272\u53cd\u5c04\u7387\u503c\u3002 \u8fd9\u4e2a\u6728\u5934\u6750\u8d28\u7684\u5c5e\u6027\u5982\u4e0b\uff1a\u9996\u5148\u6728\u5934\u7684 Surface types \u662f Opaque \u7684\uff0c\u7136\u540e\u5462\uff0c\u5b83\u7684 Material types \u5c31\u9009\u9ed8\u8ba4\u7684 Standard\u3002

\n

\"image\"

\n

\u2014 \u91d1\u5c5e \u2014

\n

\"image\"

\n

\"\u89c6\u9891\u5c01\u9762\"

\n

\u4e0a\u4f20\u89c6\u9891\u5c01\u9762

\n

\u200b

\n

\u597d\u7684\u6807\u9898\u53ef\u4ee5\u83b7\u5f97\u66f4\u591a\u7684\u63a8\u8350\u53ca\u5173\u6ce8\u8005

\n

\u5728\u201c \u7740\u8272\u5668\u201d\u4e0b\u62c9\u83dc\u5355\u4e2d\uff0c\u9009\u62e9\u201c HDRP\u201d>\u201cLitTessellation\u201d \u91d1\u5c5e\u5177\u6709\u9ad8\u7684 F0 \u503c - \u51e0\u4e4e\u603b\u662f 0.5 \u6216\u66f4\u9ad8\u3002\u4e00\u4e9b\u91d1\u5c5e\u5177\u6709\u5728\u53ef\u89c1\u5149\u8c31\u8303\u56f4\u5185\u53d8\u5316\u7684\u5149\u5b66\u6027\u8d28\uff0c\u5bfc\u81f4\u4e86\u8fd9\u4e9b\u91d1\u5c5e\u6709\u8272\u7684\u83f2\u6d85\u5c14\u53cd\u5c04\u7387\u3002 \u8fd9\u4e2a\u94c1\u7403\u4e3a\u4e86\u5c06\u5b83\u8868\u9762\u7ec6\u8282\u4f53\u73b0\u7684\u66f4\u52a0\u53ef\u4fe1\uff0c\u6211\u5c06\u5b83\u8bbe\u4e3a\u4e86\u66f2\u9762\u7ec6\u5206\u7684 Lit\uff0c\u8fd9\u4e2a\u91d1\u5c5e\u6750\u8d28\u7684\u5c5e\u6027\u5982\u4e0b\uff1a\u9996\u5148\u5b83\u7684 Surface types \u662f Opaque \u7684\uff0c\u7136\u540e\u5462\uff0c\u5b83\u7684 Material types \u5c31\u9009\u9ed8\u8ba4\u7684 Standard\uff0c\u5982\u679c\u9009\u62e9\u4e86\u66f2\u9762\u7ec6\u5206\u7684 shader \u7684\u8bdd\uff0c\u4f1a\u5728 Shader \u9762\u677f\u4e2d\u591a\u51fa\u4e00\u6761 Tessellation Options\uff0c\u6765\u8bbe\u7f6e\u66f2\u9762\u7ec6\u5206\u7684\u7ec6\u8282\uff0c\u8fd9\u91cc\u5c31\u5148\u4e0d\u591a\u505a\u4ecb\u7ecd\u4e86\u3002 \u7136\u540e\u5728 Surface Inputs \u4f1a\u591a\u4e00\u9879 Height Map \u7684\u63a5\u53e3\uff0c\u4ee5\u53ca\u7ec6\u5206\u9ad8\u5ea6\u53c2\u6570\u7684\u8bbe\u7f6e\u3002

\n

\"image\"

\n

\u2014 \u629b\u5149\u91d1\u5c5e \u2014

\n

\"image\"

\n

\"\u89c6\u9891\u5c01\u9762\"

\n

\u4e0a\u4f20\u89c6\u9891\u5c01\u9762

\n

\u200b

\n

\u597d\u7684\u6807\u9898\u53ef\u4ee5\u83b7\u5f97\u66f4\u591a\u7684\u63a8\u8350\u53ca\u5173\u6ce8\u8005

\n

\u5728\u201c \u7740\u8272\u5668\u201d\u4e0b\u62c9\u83dc\u5355\u4e2d\uff0c\u9009\u62e9\u201c HDRP\u201d>\u201cLit\u201d \u8fd9\u4e2a\u629b\u5149\u6750\u8d28\u7684\u5c5e\u6027\u5982\u4e0b\uff1a\u9996\u5148\u5b83\u7684 Surface types \u662f Opaque \u7684\uff0c\u7136\u540e\u5462\uff0c\u5b83\u7684 Material types \u9009\u62e9\u5230 Specular Color\u3002 \u4e3a\u4e86\u5448\u73b0\u51fa\u955c\u9762\u629b\u5149\u7684\u611f\u89c9\u5462\uff0c\u6211\u5c06 Smoothness \u503c\u8c03\u6574\u5230\u4e86 1\uff0c\u5982\u679c\u662f Specular Color \u7684\u6750\u8d28\u7c7b\u578b\u7684\u8bdd\uff0c\u4f1a\u5728 shader \u7684 Surface Inputs \u4e2d\u591a\u51fa\u4e00\u884c Specular \u7684\u8d34\u56fe\u8bbe\u7f6e\u4ee5\u53ca\u989c\u8272\u8bbe\u7f6e\u3002 \u629b\u5149\u91d1\u5c5e\u4f1a\u7acb\u5373\u5438\u6536\u4efb\u4f55\u900f\u5c04\u5149\uff0c\u56e0\u6b64\u5b83\u4eec\u4e0d\u4f1a\u51fa\u73b0\u4efb\u4f55\u6b21\u8868\u9762\u6563\u5c04\u6216\u900f\u660e\u611f\u3002

\n

\"image\"

\n

\u2014 \u76ae\u80a4 \u2014

\n

\"image\"

\n

\"\u89c6\u9891\u5c01\u9762\"

\n

\u4e0a\u4f20\u89c6\u9891\u5c01\u9762

\n

\u200b

\n

\u597d\u7684\u6807\u9898\u53ef\u4ee5\u83b7\u5f97\u66f4\u591a\u7684\u63a8\u8350\u53ca\u5173\u6ce8\u8005

\n

\u5728\u201c \u7740\u8272\u5668\u201d\u4e0b\u62c9\u83dc\u5355\u4e2d\uff0c\u9009\u62e9\u201c HDRP\u201d>\u201cLitTessellation\u201d \u8fd9\u4e2a\u76ae\u80a4\u6750\u8d28\u7684\u5c5e\u6027\u5982\u4e0b\uff1a\u9996\u5148\u5b83\u7684 Surface types \u662f Opaque \u7684\uff0c\u7136\u540e\u5462\uff0c\u5b83\u7684 Material types \u9009\u62e9\u5230 Subsurface Scattering\u3002 \u4e4b\u540e\u4f1a\u5728 Surface Inputs \u4f1a\u591a\u4e00\u9879 Diffusion Profile \uff08\u6269\u6563\u66f2\u7ebf\uff09\u7684\u914d\u7f6e\u6587\u4ef6\u8c03\u7528\u63a5\u53e3\uff0c\u5982\u679c\u4f60\u60f3\u521b\u5efa Diffusion Profile\uff0c\u53ef\u4ee5\u5728 Assets > Create > Rendering > Diffusion Profile\uff0c\u9700\u8981\u4f7f\u7528\u7684\u8bdd\uff0c\u53ef\u4ee5\u6dfb\u52a0\u5230 HDRP \u914d\u7f6e\u6587\u4ef6\u4e2d\u7684 Diffusion Profile List \u91cc\u9762\u3002 \u7136\u540e\u8fd8\u6709 Subsurface Mask \u8d34\u56fe\u4ee5\u53ca\u53c2\u6570\u63a5\u53e3\uff0c\u4ee5\u53ca Thickness \uff08\u539a\u5ea6\uff09\u53c2\u6570\u63a5\u53e3\u3002

\n

\"image\"

\n

\u2014 \u900f\u660e\u5851\u6599 \u2014

\n

\"image\"

\n

\"\u89c6\u9891\u5c01\u9762\"

\n

\u4e0a\u4f20\u89c6\u9891\u5c01\u9762

\n

\u200b

\n

\u597d\u7684\u6807\u9898\u53ef\u4ee5\u83b7\u5f97\u66f4\u591a\u7684\u63a8\u8350\u53ca\u5173\u6ce8\u8005

\n

\u5728\u201c \u7740\u8272\u5668\u201d\u4e0b\u62c9\u83dc\u5355\u4e2d\uff0c\u9009\u62e9\u201c HDRP\u201d>\u201cLit\u201d \u8fd9\u4e2a\u5851\u6599\u6750\u8d28\u7684\u5c5e\u6027\u5982\u4e0b\uff1a\u9996\u5148\u5b83\u7684 Surface types \u662f Transparent \u7684\uff0c\u7136\u540e\u5462\uff0c\u5b83\u7684 Material types \u9009\u62e9\u5230 Translucent\uff0cTranslucent \u4e0b\u7684 Lit Shader \u4f1a\u751f\u6210\u4e00\u7ec4 Refraction Inputs \u8bbe\u7f6e\uff0c\u5e76\u5c06\u5b83\u4e4b\u4e0b\u7684 Refraction Model \u5f00\u542f\uff0c\u5e76\u5c06\u6a21\u578b\u8bbe\u7f6e\u6210\u4e3a Sphere \uff08\u7403\u4f53\uff09\uff0c\u5f53\u5f00\u542f Refraction \u4e4b\u540e\uff0cSmoothness \u8d34\u56fe\u5c31\u5c06\u80fd\u63a7\u5236\u8fd9\u4e2a\u900f\u660e\u6750\u8d28\u7684\u53ef\u89c1\u5ea6\u3002

\n

\"image\"

\n

\u2014 \u6ce5\u571f\u6c99\u77f3 \u2014

\n

\"image\"

\n

\"\u89c6\u9891\u5c01\u9762\"

\n

\u4e0a\u4f20\u89c6\u9891\u5c01\u9762

\n

\u200b

\n

\u597d\u7684\u6807\u9898\u53ef\u4ee5\u83b7\u5f97\u66f4\u591a\u7684\u63a8\u8350\u53ca\u5173\u6ce8\u8005

\n

\u5728\u201c \u7740\u8272\u5668\u201d\u4e0b\u62c9\u83dc\u5355\u4e2d\uff0c\u9009\u62e9\u201c HDRP\u201d>\u201cLitTessellation\u201d \u8fd9\u4e2a\u77f3\u5934\u6750\u8d28\u7684\u5c5e\u6027\u5982\u4e0b\uff1a\u9996\u5148\u77f3\u5934\u7684 Surface types \u662f Opaque \u7684\uff0c\u7136\u540e\u5462\uff0c\u5b83\u7684 Material types \u5c31\u9009\u9ed8\u8ba4\u7684 Standard\uff0c\u77f3\u5934\u7684\u8bbe\u7f6e\u548c\u6728\u6750\u662f\u4e00\u6837\u7684\uff0c\u4e0d\u8fc7\u4e3a\u4e86\u83b7\u5f97\u66f4\u52a0\u4e30\u5bcc\u7684\u7ec6\u8282\uff0c\u7528 Hight Map \u5c06\u57cb\u5728\u571f\u91cc\u7684\u5c0f\u77f3\u5b50\u903c\u771f\u7684\u523b\u753b\u51fa\u6765\u3002

\n

\"image\"

\n

\u2014 \u7535\u9540 \u2014

\n

\"image\"

\n

\"\u89c6\u9891\u5c01\u9762\"

\n

\u4e0a\u4f20\u89c6\u9891\u5c01\u9762

\n

\u200b

\n

\u597d\u7684\u6807\u9898\u53ef\u4ee5\u83b7\u5f97\u66f4\u591a\u7684\u63a8\u8350\u53ca\u5173\u6ce8\u8005

\n

\u5728\u201c \u7740\u8272\u5668\u201d\u4e0b\u62c9\u83dc\u5355\u4e2d\uff0c\u9009\u62e9\u201c HDRP\u201d>\u201cLitTessellation\u201d \u8fd9\u4e2a\u7535\u9540\u6750\u8d28\u7684\u5c5e\u6027\u5982\u4e0b\uff1a\u9996\u5148\u5b83\u7684 Surface types \u662f Transparent \u7684\uff0c\u7136\u540e\u5462\uff0c\u5b83\u7684 Material types \u9009\u62e9\u5230 Iridescence\uff0cIridescence \u4e0b\u7684 Lit Shader \u4f1a\u751f\u6210\u4e00\u7ec4 Iridescence \u8bbe\u7f6e\uff0c\u5f69\u8679\u8272\u7684\u906e\u7f69\u8d34\u56fe\u548c\u53c2\u6570\u8c03\u8282\uff0c\u8fd8\u6709\u5c31\u662f\u5f69\u8679\u8272\u7684\u906e\u7f69\u539a\u5ea6\u548c\u53c2\u6570\u8c03\u8282\u3002

\n

\"image\"

\n

\u2014 \u5e03\u6599 \u2014

\n

\"image\"

\n

\"\u89c6\u9891\u5c01\u9762\"

\n

\u4e0a\u4f20\u89c6\u9891\u5c01\u9762

\n

\u200b

\n

\u597d\u7684\u6807\u9898\u53ef\u4ee5\u83b7\u5f97\u66f4\u591a\u7684\u63a8\u8350\u53ca\u5173\u6ce8\u8005

\n

\u5728\u201c \u7740\u8272\u5668\u201d\u4e0b\u62c9\u83dc\u5355\u4e2d\uff0c\u9009\u62e9\u201c HDRP\u201d>\u201cLit\u201d \u8fd9\u4e2a\u5e03\u6599\u6750\u8d28\u7684\u5c5e\u6027\u5982\u4e0b\uff1a\u9996\u5148\u5b83\u7684 Surface types \u662f Opaque \u7684\uff0c\u7136\u540e\u5462\uff0c\u5b83\u7684 Material types \u9009\u62e9\u5230 Anisotropy\uff0cAnisotropy \u4e0b\u7684 Lit Shader \u4f1a\u5728 Surface Inputs \u4e0b\u751f\u6210\u4e00\u4e2a Tangent Map \uff08\u5207\u7ebf\u8d34\u56fe\uff09\u7684\u63a5\u53e3\u4ee5\u53ca Anisotropy \u53c2\u6570\u8bbe\u7f6e\u6761\u4ee5\u53ca Anisotropy \u8d34\u56fe\u63a5\u53e3\u3002

\n

\"image\"

\n

\u2014 \u7ed2\u6bdb \u2014

\n

\"image\"

\n

\"\u89c6\u9891\u5c01\u9762\"

\n

\u4e0a\u4f20\u89c6\u9891\u5c01\u9762

\n

\u200b

\n

\u597d\u7684\u6807\u9898\u53ef\u4ee5\u83b7\u5f97\u66f4\u591a\u7684\u63a8\u8350\u53ca\u5173\u6ce8\u8005

\n

\u5728\u201c \u7740\u8272\u5668\u201d\u4e0b\u62c9\u83dc\u5355\u4e2d\uff0c\u9009\u62e9\u201c HDRP\u201d>\u201cLitTessellation\u201d \u8fd9\u4e2a\u7ed2\u6bdb\u6750\u8d28\u7684\u5c5e\u6027\u5982\u4e0b\uff1a\u9996\u5148\u5b83\u7684 Surface types \u662f Opaque \u7684\uff0c\u7136\u540e\u5462\uff0c\u5b83\u7684 Material types \u9009\u62e9\u5230 Anisotropy\uff0c\u7136\u540e\u901a\u8fc7 Hight Map \u7684\u66f2\u9762\u7ec6\u5206\uff0c\u8ba9\u6750\u8d28\u6709\u7ed2\u6bdb\u7684\u611f\u89c9~\u3002

\n

\"image\"

\n

\u2014 \u5206\u5c42\u6750\u8d28 \u2014

\n

\"image\"

\n

\"\u89c6\u9891\u5c01\u9762\"

\n

\u4e0a\u4f20\u89c6\u9891\u5c01\u9762

\n

\u200b

\n

\u597d\u7684\u6807\u9898\u53ef\u4ee5\u83b7\u5f97\u66f4\u591a\u7684\u63a8\u8350\u53ca\u5173\u6ce8\u8005

\n

\u5728\u201c \u7740\u8272\u5668\u201d\u4e0b\u62c9\u83dc\u5355\u4e2d\uff0c\u9009\u62e9\u201c HDRP\u201d>\u201cLayeredLit\u201d \u5728\u4f7f\u7528 LayeredLit \u4e4b\u540e\uff0c\u4f1a\u6bd4 Lit \u591a\u4e00\u884c Layer \u76f8\u5173\u7684\u8bbe\u7f6e\uff0c\u53ef\u4ee5\u5728 Layer Mask \u4e0a\u6dfb\u52a0\u4e00\u5f20\u6709 RGBA \u901a\u9053\u7684 Mask \u8d34\u56fe\uff0c\u5c06 Layer Count \u8bbe\u7f6e\u6210\u56db\u4e2a\u901a\u9053\uff0c\u8fd9\u6837\uff0cLayer List \u5c31\u4f1a\u51fa\u73b0 4 \u4e2a\u6750\u8d28\u7684\u63a5\u53e3\uff0c\u4f60\u53ef\u4ee5\u76f4\u63a5\u62d6\u5165\u5df2\u7ecf\u8bbe\u7f6e\u597d\u7684\u6750\u8d28\uff08\u4fee\u6539\u8fd9\u4e9b\u6750\u8d28\u7684\u53c2\u6570\u5e76\u4e0d\u4f1a\u5f71\u54cd\u539f\u6709\u7684\u8fd9\u4e9b\u6750\u8d28\uff09\uff0c\u6216\u8005\u76f4\u63a5\u5728\u4e0b\u9762\u56db\u4e2a Layer \u91cc\u9762\u8bbe\u7f6e\u4e5f\u53ef\u4ee5\u7684\u3002

\n

\"image\"

\n

\u8fd9\u662f\u6211\u5728\u4f7f\u7528\u7684\u8fd9\u5f20 MASK \u8d34\u56fe\uff0c\u663e\u793a\u5728 PS \u4e2d\u7684\u901a\u9053\u89c6\u56fe\uff0c\u8fd9\u6837\u770b\u5c31\u5f88\u6e05\u6670\u660e\u767d\u4e86\uff0c\u767d\u8272\u4ee3\u8868\u6bcf\u4e00\u4e2a\u901a\u9053\u7684\u663e\u793a\u533a\u57df\uff0c\u628a\u6240\u6709\u7684\u767d\u8272\u90e8\u5206\u7ec4\u5408\u5728\u4e00\u8d77\u65f6\u5019\uff0c\u5c31\u80fd\u6210\u4e3a\u4e00\u5f20\u5b8c\u6574\u7684\u8d34\u56fe\u3002HDRP \u5728 Main Layer \u4e4b\u4e0a\u6309\u987a\u5e8f\u6e32\u67d3\u7b2c 1 \u5c42\uff0c\u7b2c 2 \u5c42\u548c\u7b2c 3 \u5c42\uff0c\u901a\u8fc7 Layering Options \u91cc\u7684 Opacity \u4e5f\u53ef\u4ee5\u8ba9\u5c42\u7ea7\u4e4b\u95f4\u7684\u6750\u8d28\u76f8\u4e92\u6df7\u5408\u3002

\n

\"image\"

\n

\u2014 \u5206\u5c42 Planar\u2014 \u8fd9\u662f Layered Lit \u7684\u62d3\u5c55\u529f\u80fd\uff0c\u5c06 Base UV Mapping \u8bbe\u7f6e\u4e3a Planar\uff0c\u5c06\u8d34\u56fe\u7684 World Scale \u8bbe\u7f6e\u4fdd\u6301\u548c\u5730\u5f62\u6216\u8005\u5176\u4ed6 Object \u7684\u8d34\u56fe\u4e00\u81f4\uff0c\u8fd9\u6837\u7684\u8bdd\uff0c\u6bd4\u5982\uff0c\u5728\u505a\u5ba4\u5916\u573a\u666f\u7684\u65f6\u5019\uff0c\u6709\u6811\u6839\u6216\u8005\u77f3\u5757\u4ec0\u4e48\u7684\uff0c\u63d2\u5728\u5730\u5f62\u4e0a\u9762\u7684\u60c5\u51b5\u65f6\uff0c\u5c31\u80fd\u548c\u5730\u5f62 Terrain \u5b8c\u7f8e\u7684\u7ed3\u5408\u4e86\u3002

\n

\"image\"

\n

\u597d\u4e86\uff0c\u8fd9\u6b21\u7684 Lit Shader \u7684\u57fa\u672c\u529f\u80fd\u4ecb\u7ecd\u5c31\u5230\u8fd9\u91cc\u5566~

\n

\u539f\u6587\u94fe\u63a5\uff1ahttps://connect.unity.com/p/hdrp-pbr-lit-shader-yi-ji-chu-yong-fa-pian?app=true

\n

\u53d1\u73b0\u66f4\u591a\u5e72\u8d27\u8d44\u6e90\uff0c\u6b22\u8fce\u6233\u4e0a\u65b9\u94fe\u63a5\uff0c\u4e0b\u8f7d Unity \u5b98\u65b9 app!

\n" }, { "author": { "url": "member/unn", "name": "unn", "avatar": "https://cdn.v2ex.com/gravatar/cfff9ca626c77fa9bdd8a8e7eb3048d0?s=73&d=retro" }, "url": "t/639847", "title": "\u5982\u4f55\u5c06 Unity \u4ee5\u5e93\u5f62\u5f0f\u96c6\u6210\u5230\u539f\u751f iOS \u548c Android \u5e94\u7528", "id": "t/639847", "date_published": "2020-01-22T05:53:56+00:00", "content_html": "

\u672c\u6587\u8f6c\u81ea Unity Connect

\n

\u4ece Unity 2019.3.a2 \u5f00\u59cb\uff0c\u6211\u4eec\u901a\u8fc7\u628a Unity \u8fd0\u884c\u65f6\u7ec4\u4ef6\u548c\u5185\u5bb9\u96c6\u6210\u5230\u539f\u751f\u5e73\u53f0\u9879\u76ee\uff0c\u5728\u539f\u751f\u5e94\u7528\u4e2d\u5c06 Unity \u4f5c\u4e3a\u5e93\u4f7f\u7528\u3002

\n

\u672c\u6587\u5c06\u5206\u4eab\u5982\u4f55\u5c06 Unity \u4ee5\u5e93\u5f62\u5f0f\u96c6\u6210\u5230\u539f\u751f iOS \u548c Android \u5e94\u7528\u3002\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\uff0c\u8bf7\u9605\u8bfb\uff1a\u300a\u5728\u539f\u751f iOS \u6216 Android \u5e94\u7528\u4e2d\u5c06 Unity \u4f5c\u4e3a\u5e93\u4f7f\u7528\u300b\u3002

\n

\u8bf7\u8bbf\u95ee\u4e91\u76d8\u4e0b\u8f7d\u793a\u4f8b\u9879\u76ee

\n

\u4e0b\u8f7d\u94fe\u63a5: https://pan.baidu.com/s/1JFWjbrh2x-qAsCzMwLywLA

\n

\u63d0\u53d6\u7801: 9a71

\n

iOS\n\u8bf7 iOS \u5f00\u53d1\u8005\u4f7f\u7528 Unity 2019.3.a2 \u53ca\u66f4\u9ad8\u7248\u672c\uff0c\u4ee5\u53ca Xcode 9.4 \u53ca\u66f4\u9ad8\u7248\u672c\u3002

\n

\u4e0b\u8f7d Unity 2019.3.a2\uff1ahttps://unity3d.com/alpha/2019.3

\n

1\u3001\u4e0b\u8f7d\u548c\u89e3\u538b\u9879\u76ee

\n

\u6211\u4eec\u4f1a\u628a\u8be5 Unity \u9879\u76ee\u52a0\u5165\u5230\u539f\u751f iOS \u5e94\u7528\uff0cAssets/Plugins/iOS \u6587\u4ef6\u5939\u4e2d\u7684\u6587\u4ef6\u7528\u4e8e\u4f7f Unity \u64ad\u653e\u5668\u548c\u539f\u751f\u5e94\u7528\u8fdb\u884c\u901a\u4fe1\u3002

\n

\u6211\u4eec\u63d0\u4f9b\u4e86\u4e00\u4e2a\u7b80\u5355\u7684 Xcode \u5355\u89c6\u56fe\u5e94\u7528\uff0c\u8be5\u9879\u76ee\u62e5\u6709 UI\uff0c\u53ef\u4ee5\u4f7f\u7528 UnityFrameworkLoad()\u52a0\u8f7d\u64ad\u653e\u5668\u3002

\n

\u4e3a\u4e86\u65b9\u4fbf\u8d77\u89c1\uff0c\u6211\u4eec\u628a\u4e8c\u4e2a\u9879\u76ee\u89e3\u538b\u5230\u76f8\u540c\u6587\u4ef6\u5939\u4e0b\u3002

\n

\"image\"

\n

2\u3001\u751f\u6210 iOS \u7684 Xcode \u9879\u76ee

\n

\u6211\u4eec\u6309\u6b63\u5e38\u64cd\u4f5c\u751f\u6210 Xcode \u9879\u76ee\u5373\u53ef\u3002

\n

\u9996\u5148\u5728 Unity \u7f16\u8f91\u5668\u6253\u5f00 UnityProject \u9879\u76ee\uff0c\u9009\u62e9 Menu -> Window -> Package Manager\uff0c\u56e0\u4e3a 2.0.8 \u7248\u672c\u4e0d\u517c\u5bb9\u4f7f\u7528 Unity \u4f5c\u4e3a\u5e93\uff0c\u6240\u4ee5\u8981\u79fb\u9664 Ads \u8d44\u6e90\u5305\uff0c\u6216\u66f4\u65b0 Ads \u8d44\u6e90\u5305\u5230 v 3.*\u7248\u672c\u3002

\n

\u9009\u62e9 Menu -> Edit -> Player Settings -> Player -> iOS \u8bbe\u7f6e\u6807\u7b7e\u9875 -> Identification Section\uff0c\u8bbe\u7f6e\u6709\u6548\u7684 Bundle Identification \u548c Signing Team ID\uff0c\u4ee5\u907f\u514d\u540e\u7eed\u6b65\u9aa4\u51fa\u73b0 Xcode \u7b7e\u540d\u95ee\u9898\u3002

\n

\u6253\u5f00 Menu -> File -> Builds Settings\uff0c\u5728\u6b64\u9009\u62e9\u5e76\u5207\u6362\u5e73\u53f0\u4e3a iOS\u3002\u5c06 UnityProject \u9879\u76ee\u6784\u5efa\u5230 iosBuild \u6587\u4ef6\u5939\u3002

\n

\"image\"

\n

3\u3001\u8bbe\u7f6e Xcode \u5de5\u4f5c\u7a7a\u95f4

\n

Xcode \u5de5\u4f5c\u7a7a\u95f4\u5141\u8bb8\u540c\u65f6\u5904\u7406\u591a\u4e2a\u9879\u76ee\uff0c\u5e76\u7ed3\u5408\u5b83\u4eec\u7684\u7ed3\u679c\u3002 \u6211\u4eec\u5728 Xcode \u6253\u5f00 NativeiOSApp.xcodeproj\u3002\u9009\u62e9 File -> New -> Workspace\uff0c\u521b\u5efa\u5de5\u4f5c\u7a7a\u95f4\uff0c\u628a\u5b83\u4fdd\u5b58\u5728 UaaLExample/both.xcworkspace\u3002

\n

\"image\"

\n

\u5173\u95ed NativeiOSApp.xcodeproj \u9879\u76ee\uff0c\u6b64\u540e\u7684\u6b65\u9aa4\u4f1a\u5728\u521a\u521b\u5efa\u7684\u5de5\u4f5c\u7a7a\u95f4\u9879\u76ee\u5b8c\u6210\u3002

\n

\u9009\u62e9 File -> Add Files to \u201cboth\u201d\uff0c\u628a NativeiOSApp.xcodeproj \u548c\u7b2c 2 \u6b65\u751f\u6210\u7684 Unity-iPhone.xcodeproj \u6dfb\u52a0\u5230\u76f8\u540c\u7b49\u7ea7\u7684\u5de5\u4f5c\u7a7a\u95f4\u3002

\n

\"image\"

\n

4\u3001\u6dfb\u52a0 UnityFramework.framework

\n

\u6211\u4eec\u4ee5\u6846\u67b6\u7684\u5f62\u5f0f\u6dfb\u52a0 Unity \u64ad\u653e\u5668\u5230 NativeiOSApp\uff0c\u5b83\u76ee\u524d\u4e0d\u4f1a\u6539\u53d8 NativeiOSApp \u7684\u884c\u4e3a\u3002

\n

\u9996\u5148\u4ece NativeiOSApp \u9879\u76ee\u9009\u62e9 NativeiOSApp \u76ee\u6807\u3002\u5728 General -> Embedded Binaries \u4e2d\u6309\u4e0b+\u6309\u94ae\u3002\u9009\u62e9 Unity-iPhone/Products/UnityFramework.framework\u3002

\n

\u6211\u4eec\u4ece Linked Frameworks and Libraries \u79fb\u9664 UnityFramework.framework\uff0c\u9009\u4e2d\u8be5\u6761\u76ee\u5e76\u6309\u4e0b-\u6309\u94ae\u5373\u53ef\u3002

\n

\"image\"

\n

5\u3001\u516c\u5f00 NativeCallProxy.h

\n

\u539f\u751f\u5e94\u7528\u4f1a\u5b9e\u73b0\u4e0b\u9762\u6587\u4ef6\u5b9a\u4e49\u7684 NativeCallsProtocol\u3002

\n

\u9996\u5148\u627e\u5230\u5e76\u9009\u62e9 Unity-iPhone / Libraries / Plugins / iOS / NativeCallProxy.h\u3002

\n

\u7136\u540e\u5728 Target Membership \u4e2d\u52fe\u9009 UnityFramework\uff0c\u901a\u8fc7 UnityFramework \u53f3\u4fa7\u7684\u4e0b\u62c9\u56fe\u6807\uff0c\u628a\u6807\u5934\u53ef\u89c1\u6027\u8bbe\u4e3a Public\u3002

\n

\"image\"

\n

6\u3001\u4f7f Data \u6587\u4ef6\u5939\u6210\u4e3a UnityFramework \u7684\u4e00\u90e8\u5206

\n

\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0cData \u6587\u4ef6\u5939\u662f Unity-iPhone \u76ee\u6807\u7684\u4e00\u90e8\u5206\uff0c\u6211\u4eec\u4f1a\u901a\u8fc7\u4fee\u6539\u5b83\uff0c\u4f7f\u6240\u6709\u5185\u5bb9\u5c01\u88c5\u5230\u5355\u4e2a\u6846\u67b6\u6587\u4ef6\u4e2d\u3002

\n

\u6211\u4eec\u628a Data \u6587\u4ef6\u5939\u7684 Target Membership \u6539\u4e3a UnityFramework\u3002

\n

\"image\"

\n

\u5728\u4e4b\u524d\u7684\u6539\u52a8\u540e\uff0c\u4e3a\u4e86\u4f7f Unity-iPhone \u9879\u76ee\u7ee7\u7eed\u5de5\u4f5c\uff0cUnity \u64ad\u653e\u5668\u9700\u8981\u901a\u8fc7\u4ece Unity-iPhone/MainApp/main.mm \u8fdb\u884c\u8c03\u7528\uff0c\u6307\u5411 Data \u6587\u4ef6\u5939\u6240\u5904\u7684\u65b0\u4f4d\u7f6e\u3002

\n

[ufw setDataBundleId: \"com.unity3d.framework\"];

\n

\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\u4e0d\u652f\u6301\u6309\u9700\u4f7f\u7528\u8d44\u6e90\u3002\u4e3a\u4e86\u4f7f\u5b83\u4eec\u6b63\u5e38\u5de5\u4f5c\uff0c\u6211\u4eec\u4e0d\u4f1a\u4f7f\u7528\u524d\u9762\u7684\u8c03\u7528\uff0c\u56e0\u4e3a\u9ed8\u8ba4\u60c5\u51b5\u4e0b Data \u6587\u4ef6\u5939\u4f4d\u4e8e mainBundle\uff0c\u6240\u4ee5\u6211\u4eec\u8981\u590d\u5236 Data \u6587\u4ef6\u5939\u5230\u539f\u751f\u5e94\u7528\uff0c\u5e76\u8df3\u8fc7\u524d\u9762\u7684\u8c03\u7528\u3002

\n

\"image\"

\n

\u8fd0\u884c \u6240\u6709\u5185\u5bb9\u5df2\u7ecf\u51c6\u5907\u597d\u9488\u5bf9\u4e8c\u4e2a\u9879\u76ee\u8fdb\u884c\u6784\u5efa\uff0c\u8fd0\u884c\u548c\u8c03\u8bd5\uff0c\u5373\uff1aUnity-iPhone \u9879\u76ee\u548c NativeiOSApp \u9879\u76ee\uff0c\u9009\u62e9 Scheme \u4e3a NativeiOSApp \u6216 Unity-iPhone\u3002

\n

\"image\"

\n

\u5982\u679c\u4e00\u5207\u987a\u5229\uff0c\u6211\u4eec\u53ef\u4ee5\u8fd0\u884c NativeiOSApp\u3002

\n

\"image\"

\n

\u5b8c\u6574\u9879\u76ee\u8bf4\u660e \u5728\u96c6\u6210\u6b65\u9aa4\u4e2d\u9047\u5230\u95ee\u9898\uff0c\u4f60\u53ef\u4ee5\u5c1d\u8bd5\u5df2\u7ecf\u51c6\u5907\u597d\u6784\u5efa\u548c\u90e8\u7f72\u7684\u5b8c\u6574\u9879\u76ee\uff0c\u53ea\u9700\u8981\u4fee\u590d Xcode \u7684\u7b7e\u540d\u5373\u53ef\u3002

\n\n

\u8bf7\u4e0b\u8f7d\u5e76\u89e3\u538b\u5b8c\u6574\u9879\u76ee\u6587\u4ef6\uff0c\u5728 Xcode \u6253\u5f00 both.xcworkspace\uff0c\u8fd0\u884c NativeiOSApp Scheme\u3002

\n

\u5173\u952e\u8981\u70b9

\n

Unity \u64ad\u653e\u5668\u7531 UnityFramework \u5bf9\u8c61\u63a7\u5236\u3002\u4e3a\u4e86\u83b7\u53d6\u8be5\u5bf9\u8c61\uff0c\u6211\u4eec\u8981\u8c03\u7528 UnityFrameworkLoad\uff0c\u5b83\u4f1a\u52a0\u8f7d UnityFramework.framework\uff0c\u7136\u540e\u8fd4\u56de\u5355\u4e2a\u5b9e\u4f8b\u5230 UnityFramework \u7c7b\uff0c\u8bf7\u89c2\u5bdf Unity-iPhone/UnityFramework/UnityFramework.h\uff0c\u4e86\u89e3\u5b83\u7684 API\u3002

\n

\u8bf7\u5728 NativeiOSApp/NativeiOSApp/MainViewController.mm \u6587\u4ef6\u4e2d\u6216 Unity-iPhone/MainApp/main.mm \u6587\u4ef6\u4e2d\u89c2\u5bdf UnityFrameworkLoad\u3002

\n
 #include <UnityFramework/UnityFramework.h>\n\nUnityFramework* UnityFrameworkLoad()\n{\n NSString* bundlePath = nil;\n bundlePath = [[NSBundle mainBundle] bundlePath];\n bundlePath = [bundlePath stringByAppendingString: @\"/Frameworks/UnityFramework.framework\"];\n\n NSBundle* bundle = [NSBundle bundleWithPath: bundlePath];\n if ([bundle isLoaded] == false) [bundle load];\n\n UnityFramework* ufw = [bundle.principalClass getInstance];\n if (![ufw appController])\n {\n // \u9996\u6b21\u521d\u59cb\u5316 Unity\n [ufw setExecuteHeader: &_mh_execute_header]; \n\n // \u540c\u6b65 Data \u6587\u4ef6\u5939\u7684 Target Membership \u8bbe\u7f6e\n [ufw setDataBundleId: \"com.unity3d.framework\"] \n\n }\n return ufw;\n}\n\n
\n

Android

\n

\u8bf7 Android \u5f00\u53d1\u8005\u4f7f\u7528 Unity 2019.3.a2 \u53ca\u66f4\u9ad8\u7248\u672c\uff0c\u4ee5\u53ca Android Studio 3.3.2 \u53ca\u66f4\u9ad8\u7248\u672c\u3002

\n

1\u3001\u4e0b\u8f7d\u548c\u89e3\u538b\u9879\u76ee

\n

\u8bf7\u4e0b\u8f7d Unity \u9879\u76ee\uff0c\u8be5\u9879\u76ee\u662f\u8981\u52a0\u5165\u539f\u751f Android \u5e94\u7528\u7684\u793a\u4f8b Assets/Plugins/Android \u6587\u4ef6\u5939\u4e2d\u6709\u6269\u5c55 UnityPlayerActivity \u7684 OverrideUnityActivity \u6587\u4ef6\u3002

\n

\u6211\u4eec\u63d0\u4f9b\u7684\u539f\u751f Android \u9879\u76ee\u662f\u6765\u81ea Android Studio \u6a21\u677f\u7684 Basic Activity \u5e94\u7528\u7a0b\u5e8f\uff0c\u6211\u4eec\u4f1a\u628a\u524d\u9762\u7684 Unity \u9879\u76ee\u52a0\u5165\u5230\u8fd9\u91cc\u3002\u8be5\u9879\u76ee\u6709 UI \u548c MainUnityActivity \u6765\u6269\u5c55 OverrideUnityActivity\uff0c\u53ef\u4ee5\u4f7f\u7528 Intent \u542f\u52a8 MainUnityActivity\u3002

\n

\u4e3a\u4e86\u65b9\u4fbf\u8d77\u89c1\uff0c\u6211\u4eec\u628a\u4e8c\u4e2a\u9879\u76ee\u89e3\u538b\u5230\u76f8\u540c\u6587\u4ef6\u5939\u4e0b\u3002

\n

\"image\"

\n

2\u3001\u751f\u6210 Android \u5e73\u53f0\u7684 Gradle \u9879\u76ee

\n

\u6211\u4eec\u5728 Unity \u7f16\u8f91\u5668\u6253\u5f00 UnityProject \u9879\u76ee\uff0c\u70b9\u51fb Menu -> File -> Build Settings \u6253\u5f00 Build Settings\u3002

\n

\u9009\u62e9\u5e76\u5207\u6362\u4e3a Android Platform\uff0c\u52fe\u9009 Export Project \u9009\u9879\u3002

\n

\"image\"

\n

\u6211\u4eec\u628a UnityProject \u5bfc\u51fa\u5230 androidBuild \u6587\u4ef6\u5939\uff0c\u8be5\u6587\u4ef6\u5939\u7ed3\u6784\u5982\u4e0b\u56fe\u6240\u793a\u3002

\n

\"image\"

\n

3\u3001\u628a Unity Library \u6a21\u5757\u6dfb\u52a0\u5230 NativeAndroidApp

\n

\u73b0\u5728\u628a androidBuild/unityLibrary \u6a21\u5757\u6dfb\u52a0\u7ed9 Android Studio \u4e2d\u7684 NativeAndroidApp Gradle \u9879\u76ee\uff1a

\n

\u6211\u4eec\u5728 Android Studio \u6253\u5f00 NativeAndroidApp\uff0c\u7136\u540e\u6253\u5f00 settings.gradle \u6587\u4ef6\u3002\u5728\u8be5\u6587\u4ef6\u672b\u5c3e\uff0c\u6dfb\u52a0\u6307\u5411 unityLibrary \u7684\u65b0\u9879\u76ee\u3002

\n
 include ':unityLibrary'\nproject(':unityLibrary').projectDir=new File('..\\\\UnityProject\\\\androidBuild\\\\unityLibrary') \n
\n

\"image\"

\n

\u6253\u5f00 build.gradle \u6587\u4ef6\uff0c\u628a\u4e0b\u9762\u4ee3\u7801\u6dfb\u52a0\u5230 dependencies \u4ee3\u7801\u5757\u3002

\n
implementation project(':unityLibrary')\n\n
\n

\"image\"

\n

\u6253\u5f00 build.gradle \u6587\u4ef6\uff0c\u628a\u4e0b\u9762\u4ee3\u7801\u6dfb\u52a0\u5230 allprojects{repositories{\u4ee3\u7801\u5757\u3002

\n
flatDir {\n dirs \"${project(':unityLibrary').projectDir}/libs\"\n}\n\n
\n

\"image\"

\n

Gradle \u6587\u4ef6\u5df2\u7ecf\u4fee\u6539\uff0c\u5355\u51fb Sync Now\u3002

\n

\"image\"

\n

\u5982\u679c\u4e00\u5207\u987a\u5229\uff0c\u6211\u4eec\u4f1a\u770b\u5230 unityLibrary \u6a21\u5757\u6dfb\u52a0\u5230 Android \u89c6\u56fe\u4e2d\u3002

\n

\"image\"

\n

\u8fd0\u884c \u73b0\u5728\u5df2\u7ecf\u51c6\u5907\u597d\u8fdb\u884c\u6784\u5efa\uff0c\u8fd0\u884c\u548c\u8c03\u8bd5\u3002

\n

\"image\"

\n

\u5982\u679c\u4e00\u5207\u987a\u5229\uff0c\u6211\u4eec\u5e94\u8be5\u53ef\u4ee5\u8fd0\u884c NativeAndroidApp\u3002

\n

\"image\"

\n

\u8bf7\u6ce8\u610f\uff1a\u5728\u5e94\u7528\u7a0b\u5e8f\u5b89\u88c5\u5230\u8bbe\u5907\u540e\uff0c\u4f1a\u51fa\u73b0\u4e8c\u4e2a\u542f\u52a8\u5e94\u7528\u7a0b\u5e8f\u7684\u56fe\u6807\uff0c\u8bf7\u628a<intent-filter>...</intent-filter>\u4ece unityLibrary \u7684 AndroidManifest.xml \u53bb\u6389\uff0c\u4ec5\u4fdd\u7559\u96c6\u6210\u7248\u672c\u3002

\n

\u5b8c\u6574\u9879\u76ee\u8bf4\u660e

\n

\u5982\u679c\u5728\u96c6\u6210\u6b65\u9aa4\u4e2d\u9047\u5230\u95ee\u9898\uff0c\u4f60\u53ef\u4ee5\u5c1d\u8bd5\u5df2\u7ecf\u51c6\u5907\u597d\u6784\u5efa\u548c\u90e8\u7f72\u7684\u5b8c\u6574\u9879\u76ee\u3002\u8bf7\u4e0b\u8f7d\u5e76\u89e3\u538b\u5b8c\u6574\u9879\u76ee\u6587\u4ef6\uff0c\u5728 Android Studio \u6253\u5f00 NativeAndroidApp\u3002

\n

\u5c0f\u7ed3

\n

\u5982\u4f55\u5c06 Unity \u4ee5\u5e93\u5f62\u5f0f\u96c6\u6210\u5230\u539f\u751f iOS \u548c Android \u5e94\u7528\u4e3a\u5927\u5bb6\u4ecb\u7ecd\u5230\u8fd9\u91cc\uff0c\u8bf7\u4e0b\u8f7d\u793a\u4f8b\u9879\u76ee\u52a8\u624b\u64cd\u4f5c\u8d77\u6765\u5427\u3002

\n

\u539f\u6587\u94fe\u63a5\uff1ahttps://connect.unity.com/p/ru-he-jiang-unityyi-ku-xing-shi-ji-cheng-dao-yuan-sheng-ioshe-androidying-yong?app=true\n\u66f4\u591a Unity \u5e72\u8d27\u8d44\u6e90\uff0c\u8bf7\u6233\u4e0a\u65b9\u94fe\u63a5\u4e0b\u8f7d Unity \u5b98\u65b9 app\u3002

\n" }, { "author": { "url": "member/unn", "name": "unn", "avatar": "https://cdn.v2ex.com/gravatar/cfff9ca626c77fa9bdd8a8e7eb3048d0?s=73&d=retro" }, "url": "t/639657", "title": "\u5982\u4f55\u5728 Timeline \u4e2d\u521b\u5efa\u81ea\u5b9a\u4e49\u8f68\u9053\uff1f", "id": "t/639657", "date_published": "2020-01-21T06:01:28+00:00", "content_html": "

\u672c\u6587\u8f6c\u81ea Unity Connect \u535a\u4e3b \u5927\u667a

\n

\u7528\u8fc7\u4e00\u6bb5\u65f6\u95f4 Timeline \u540e\uff0c\u6211\u95ee\u5927\u667a\uff1a\u201cTimeline \u4e2d\u53ea\u6709\u8fd9\u4e48\u51e0\u4e2a\u8f68\u9053\u4e48\uff1f\u6211\u53d1\u73b0\u6709\u7684\u9700\u6c42\u8fd9\u4e9b\u8f68\u9053\u6839\u672c\u6ca1\u529e\u6cd5\u6ee1\u8db3\uff0c\u4f7f\u7528\u4e4b\u524d\u5b66\u8fc7\u7684 Playable Track \u4e5f\u5f88\u9ebb\u70e6\uff0c\u8fd8\u6709\u5176\u4ed6\u529e\u6cd5\u4e48\uff1f\u201d

\n

\u7528\u8fc7\u4e00\u6bb5\u65f6\u95f4 Timeline \u540e\uff0c\u6211\u95ee\u5927\u667a\uff1a\u201cTimeline \u4e2d\u53ea\u6709\u8fd9\u4e48\u51e0\u4e2a\u8f68\u9053\u4e48\uff1f\u6211\u53d1\u73b0\u6709\u7684\u9700\u6c42\u8fd9\u4e9b\u8f68\u9053\u6839\u672c\u6ca1\u529e\u6cd5\u6ee1\u8db3\uff0c\u4f7f\u7528\u4e4b\u524d\u5b66\u8fc7\u7684 Playable Track \u4e5f\u5f88\u9ebb\u70e6\uff0c\u8fd8\u6709\u5176\u4ed6\u529e\u6cd5\u4e48\uff1f\u201d\n\u5927\u667a\uff1a\u201c\u4f60\u9047\u5230\u4e86\u4ec0\u4e48\u95ee\u9898\u5462\uff1f\u201d\n\u5c0f\u65b0\uff1a\u201c\u4e4b\u524d\u54b1\u4eec\u5b66\u7684\u90a3\u4e2a Playable \u8f68\u9053\u5176\u4e2d\u4e00\u4e2a\u95ee\u9898\u662f\uff1a\u6bcf\u6b21\u6dfb\u52a0\u81ea\u5b9a\u4e49 clip \u65f6\uff0c\u90fd\u9700\u8981\u7ed9\u5b83\u6307\u5b9a Light \u7ec4\u4ef6\uff0c\u5982\u679c Clip \u5f88\u591a\uff0c\u4f1a\u975e\u5e38\u9ebb\u70e6\u3002\u201d\n\u5927\u667a\uff1a\u201c\u8fd9\u4e2a\u8fd8\u597d\uff0c\u4e0d\u7b97\u4e2a\u5927\u95ee\u9898\uff0c\u591a\u9009\u5c31\u80fd\u4e00\u6b21\u641e\u5b9a\u3002\u4e0d\u8fc7\u4f60\u53ef\u80fd\u66f4\u9700\u8981\u7684\u662f\u81ea\u5b9a\u4e49\u8f68\u9053\u3002\u4f7f\u7528\u81ea\u5b9a\u4e49\u8f68\u9053\u6709\u51e0\u4e2a\u597d\u5904\uff1a

\n

\u53ef\u4ee5\u53d1\u6325\u4f60\u7684\u8111\u6d1e\uff0c\u7528\u4ee3\u7801\u5b9e\u73b0\u51fa\u65e0\u9650\u7684\u53ef\u80fd\n\u53ef\u4ee5\u89e3\u51b3\u8f68\u9053\u7684\u7ed1\u5b9a\uff08\u5982\u4e0b\u56fe\u4e2d\u7684 Bound object \uff09\u95ee\u9898\uff0c\u53ea\u9700\u8981\u7ed1\u5b9a\u4e00\u6b21\uff0c\u8f68\u9053\u4e0a\u7684\u6240\u6709 Clip \u90fd\u53ef\u4ee5\u8bbf\u95ee\u3002\u6bd4\u5982 Animation Track\u3001Activation Track \u90fd\u662f\u8fd9\u6837\u7684\u3002\nPlayable Track \u4e0a\u5982\u679c\u6df7\u7528\u5f88\u591a\u7c7b\u578b\u7684 Clip \u65f6\uff0c\u6700\u540e\u4f1a\u5f88\u6df7\u4e71\uff0c\u4e5f\u4e0d\u76f4\u89c2\u3002\u81ea\u5b9a\u4e49\u8f68\u9053\u53ef\u4ee5\u76f4\u89c2\u5730\u5c06\u4e0d\u540c\u7528\u9014\u7684\u8f68\u9053\u533a\u5206\u5f00\u3002

\n

\u8f68\u9053\u7684\u7ed3\u6784\u56fe\n\u90a3\u6211\u4eec\u6765\u770b\u770b\u5982\u4f55\u628a\u4e4b\u524d\u5b66\u4e60 Playable \u8f68\u9053\u65f6\u7684\u81ea\u5b9a\u4e49 Light Clip \u6539\u6210\u81ea\u5b9a\u4e49\u8f68\u9053\uff0c\u7136\u540e\u7ed1\u5b9a Light \u7ec4\u4ef6\u3002\n\u6ce8\u610f\u4e0b\u9762\u662f\u57fa\u4e8e\u4e4b\u524d\u7684 Playable \u8f68\u9053\u8fd9\u4e00\u8282\u5b66\u4e60\u7684\uff0c\u5982\u679c\u8fd8\u6ca1\u5b66\u4e60\uff0c\u5efa\u8bae\u5148\u53bb\u5b66\u4e60 Playable \u8f68\u9053\u3002

\n

\u81ea\u5b9a\u4e49\u8f68\u9053

\n

\u9996\u5148\u9700\u8981\u521b\u5efa\u4e00\u4e2a\u81ea\u5b9a\u4e49\u8f68\u9053\u7684\u811a\u672c\uff0c\u7ee7\u627f TrackAsset\uff1a\nusing UnityEngine;\nusing UnityEngine.Timeline;

\n

[TrackClipType(typeof(LightControlAsset))]\n[TrackBindingType(typeof(Light))]\npublic class LightControlTrack : TrackAsset {}\n\u8fd9\u6bb5\u4ee3\u7801\u7528\u4e86\u4e24\u4e2a Attribute\uff1a\nTrackClipType \u6307\u5b9a\u4e86\u8f68\u9053\u63a5\u6536\u7684 PlayableAsset \u7c7b\u578b\uff1b\nTrackBindingType \u6307\u5b9a\u4e86\u8f68\u9053\u8981\u6c42\u7ed1\u5b9a\u7684\u5bf9\u8c61\u7c7b\u578b\u3002\n\u73b0\u5728\u8fd8\u9700\u8981\u4fee\u6539 PlayableAsset \u548c PlayableBehaviour\uff0c\u4e5f\u5c31\u662f\u4e4b\u524d\u7684 LightControlAsset \u548c LightControlBehaviour\u3002\nLightControlBehaviour \u7684\u4ee3\u7801\u5982\u4e0b\uff1a\nusing UnityEngine;\nusing UnityEngine.Playables;

\n

public class LightControlBehaviour : PlayableBehaviour\n{\n//public Light light = null; \u4e0d\u518d\u9700\u8981\u5b83\u4e86\npublic Color color = Color.white;\npublic float intensity = 1f;

\n

public override void ProcessFrame(Playable playable, FrameData info, object playerData)\n{\nLight light = playerData as Light; // \u8fd9\u4e2a\u5730\u65b9\u6709\u53d8\u5316

\n
 if (light != null)\n {\n light.color = color;\n light.intensity = intensity;\n }\n
\n

}\n}\nPlayableBehaviour \u4e2d\u5c31\u4e0d\u518d\u9700\u8981 Light \u6210\u5458\u53d8\u91cf\u4e86\uff0c\u56e0\u4e3a\u53ef\u4ee5\u4ece\u65b9\u6cd5\u7684 playerData \u4e2d\u83b7\u53d6\u5230\uff0c\u8f6c\u6362\u6210\u5bf9\u5e94\u7684\u7c7b\u578b\u5373\u53ef\u3002\nusing UnityEngine;\nusing UnityEngine.Playables;

\n

public class LightControlAsset : PlayableAsset\n{\n//public ExposedReference<light> light; \u4e0d\u9700\u8981\u5b83\u4e86\npublic Color color = Color.white;\npublic float intensity = 1f;</light>

\n

public override Playable CreatePlayable (PlayableGraph graph, GameObject owner)\n{\nvar playable = ScriptPlayable<lightcontrolbehaviour>.Create(graph);</lightcontrolbehaviour>

\n
 var lightCOntrolBehaviour= playable.GetBehaviour();\n //lightControlBehaviour.light = light.Resolve(graph.GetResolver());\n lightControlBehaviour.color = color;\n lightControlBehaviour.intensity = intensity;\n\n return playable; \n
\n

}\n}\nPlayableAsset \u4e2d\u4e5f\u4e0d\u9700\u8981\u518d\u4fdd\u7559 ExposedReference<light>\u4e86\uff0c\u8f68\u9053\u4f1a\u76f4\u63a5\u63d0\u4f9b\u8fd9\u4e2a Light \u5bf9\u8c61\u3002\n\u5728 Timeline \u4e2d\u6dfb\u52a0\n\u73b0\u5728\u5c31\u53ef\u4ee5\u5728 Timeline \u4e2d\u76f4\u63a5\u6dfb\u52a0 Light Control Track \u4e86\u3002</light>

\n

\u6dfb\u52a0 Track \u540e\uff0c\u9700\u8981\u8bbe\u7f6e\u7ed1\u5b9a\u7684\u5bf9\u8c61\u3002\u8fd9\u6837\u6bcf\u4e2a Clip \u90fd\u53ef\u4ee5\u83b7\u53d6\u5230\u8fd9\u4e2a\u7ed1\u5b9a\u7684\u5bf9\u8c61\u3002\n\u5c31\u53ef\u4ee5\u50cf\u5185\u7f6e\u7684 Track \u4e00\u6837\u4f7f\u7528\u5566\uff01\n\u603b\u7ed3\n\u81ea\u5b9a\u4e49\u8f68\u9053\u53ef\u4ee5\u652f\u6301\u4f60\u4efb\u610f\u53d1\u6325\uff0c\u751a\u81f3\u53ef\u4ee5\u8ba9 Timeline \u53d8\u6210\u4e00\u4e2a\u975e\u7ebf\u6027\u8fd0\u884c\uff0c\u53ef\u4ea4\u4e92\u7684\u5e8f\u5217\u52a8\u753b\uff0c\u662f\u4e0d\u662f\u53c8\u52fe\u8d77\u4e86\u4f60\u7684\u5174\u8da3\uff1f\u90a3\u5c31\u5feb\u6765\u8ddf\u6211\u5c0f\u65b0\u4e00\u8d77\u6765\u5427\u3002\n[\u6269\u5c55\u5b66\u4e60] \u5bf9 Timeline&Cinemachine \u611f\u5174\u8da3\u7684\u7ae5\u978b\uff1a\u66f4\u591a\u6559\u7a0b\u5728\u6d2a\u6d41\u5b66\u5802\u516c\u4f17\u53f7\u56de\u590d timeline \u83b7\u53d6\uff0c\u514d\u8d39\u83b7\u53d6\u56fe\u6587\u624b\u518c\uff0c\u66f4\u6709\u89c6\u9891\u6559\u7a0b\u3002

\n

\u539f\u6587\u94fe\u63a5\uff1a https://connect.unity.com/p/ru-he-zai-timelinezhong-chuang-jian-zi-ding-yi-gui-dao?app=true\n\u66f4\u591a Unity \u7cbe\u5f69\u5185\u5bb9\uff0c\u8bf7\u6233\u4e0a\u65b9\u94fe\u63a5\uff0c\u4e0b\u8f7d Unity \u5b98\u65b9 app\uff0c\u5728\u7ebf\u8ba8\u8bba\uff0c\u6280\u672f\u7b54\u7591\uff0c\u5e72\u8d27\u6ee1\u6ee1\uff01

\n" }, { "author": { "url": "member/unn", "name": "unn", "avatar": "https://cdn.v2ex.com/gravatar/cfff9ca626c77fa9bdd8a8e7eb3048d0?s=73&d=retro" }, "url": "t/639426", "title": "\u5199\u7ed9 Unity \u5f00\u53d1\u8005\u7684 iOS \u5185\u5b58\u8c03\u8bd5\u6307\u5357", "id": "t/639426", "date_published": "2020-01-20T05:29:54+00:00", "content_html": "

\u804a\u804a Unity \u7a0b\u5e8f\u5458\u53ef\u80fd\u4f1a\u9047\u5230\u7684 iOS \u5185\u5b58\u95ee\u9898\u3002iOS \u7684\u5185\u5b58\u7ba1\u7406\u673a\u5236\u662f\u4ec0\u4e48\uff1f\u600e\u4e48\u67e5\u770b\u67d0\u4e00\u5757\u5f88\u5927\u7684\u5185\u5b58\u5206\u914d\u7684\u5806\u6808\u8c03\u7528\uff1f\u6258\u7ba1\u5185\u5b58\u662f\u5982\u4f55\u5206\u914d\u7684\uff1f\u6233\u3002\n0x00 \u524d\u8a00

\n

\u5de5\u4f5c\u7684\u8fc7\u7a0b\u4e2d\uff0c\u5e38\u5e38\u4f1a\u53d1\u73b0\u6709\u5c0f\u4f19\u4f34\u5bf9 Unity \u7684 Profiler \u63d0\u4f9b\u7684\u5185\u5b58\u6570\u636e\u4e0e\u67d0\u4e9b\u539f\u751f\u5e73\u53f0 Profiler \u5de5\u5177\uff0c\u4f8b\u5982 iOS \u7cfb\u7edf\u548c Xcode\uff0c\u6240\u63d0\u4f9b\u7684\u5185\u5b58\u6570\u636e\u6709\u5dee\u5f02\u800c\u611f\u5230\u597d\u5947\u3002\u800c\u4e14\u5927\u5bb6\u5bf9\u5982\u4f55\u89e3\u8bfb\u539f\u751f\u5e73\u53f0\u5de5\u5177\u7684\u6570\u636e\u66f4\u52a0\u611f\u5174\u8da3\uff0c\u540c\u6837\u4f8b\u5982 iOS \u7cfb\u7edf\u548c Xcode\u3002\u6700\u8fd1\u6b63\u597d\u770b\u4e86\u4e00\u4e2a\u6765\u81ea Unite Copenhagen \u9898\u4e3a Developing and optimizing a procedural game | The Elder Scrolls Blades - Unite Copenhagen \u7684\u6f14\u8bb2\uff0c\u5176\u4e2d\u5c31\u6d89\u53ca\u5230\u4e86\u4e00\u4e9b\u5173\u4e8e iOS \u5185\u5b58\u7684\u8bdd\u9898(\u867d\u7136\u5e76\u4e0d\u662f\u5f88\u8be6\u7ec6)\u3002\u6b63\u597d\u4e5f\u7ed3\u5408\u5de5\u4f5c\u4e2d\u7684\u4e00\u4e9b\u7ecf\u9a8c\uff0c\u5199\u4e00\u7bc7\u6587\u7ae0\u6765\u8ba8\u8bba\u4e00\u4e0b\u4e00\u4e2a Unity \u5f00\u53d1\u8005\u5982\u4f55\u5904\u7406\u548c iOS \u5185\u5b58\u6709\u5173\u7684\u95ee\u9898\u3002\u4e3b\u8981\u5185\u5bb9\u5305\u62ec\u89e3\u6790 iOS \u7cfb\u7edf\u7684\u5185\u5b58\u7ba1\u7406\uff0c\u4f7f\u7528 Instrument \u67e5\u770b Unity \u6e38\u620f\u7684\u5185\u5b58\u72b6\u51b5\uff0c\u4f7f\u7528\u547d\u4ee4\u884c\u5de5\u5177\u6df1\u5165\u6316\u6398 Unity \u6e38\u620f\u7684\u5185\u5b58\u95ee\u9898\u4ee5\u53ca\u6587\u672b\u5c0f\u5f69\u86cb\u3002\n0x01 iOS \u7684\u5185\u5b58\u7ba1\u7406 - Unity Profiler \u7edf\u8ba1\u9519\u4e86\u5417\uff1f

\n

\u9996\u5148\uff0c\u6211\u60f3\u5f3a\u8c03\u7684\u4e00\u70b9\u662f\uff0cProfiler \u5de5\u5177\u6240\u63d0\u4f9b\u7684\u5185\u5b58\u6570\u636e\u53ea\u662f\u4e00\u4e2a\uff08\u7ec4\uff09\u6570\u5b57\uff0c\u800c\u4e14\u4e0d\u540c\u7684\u5de5\u5177\u5b58\u5728\u6709\u4e0d\u540c\u7edf\u8ba1\u5185\u5b58\u7684\u7b56\u7565\u3002\u56e0\u6b64\uff0c\u4e00\u4e2a\u91cd\u8981\u7684\u95ee\u9898\u662f\u6211\u4eec\u770b\u5230\u7684\u6570\u636e\u7a76\u7adf\u662f\u5982\u4f55\u83b7\u53d6\u7684\uff1f\n\u800c\u6839\u636e\u6240\u4f7f\u7528\u7684\u5de5\u5177\u4e0d\u540c\uff0c\u8be5\u5de5\u5177\u7528\u4e8e\u67e5\u627e\u6570\u636e\u7684\u7b56\u7565\u4ee5\u53ca\u5f00\u53d1\u4eba\u5458\u5b9e\u9645\u8981\u67e5\u627e\u7684\u5185\u5bb9\uff0c\u6700\u540e\u7684\u7ed3\u679c\u4e5f\u6709\u53ef\u80fd\u662f\u4e0d\u4e00\u6837\u7684\u3002\u56e0\u6b64\uff0c\u5982\u679c\u8981\u5bfb\u627e\u4e00\u4e2a\u6570\u5b57\u6765\u6c47\u603b\u67d0\u4e2a\u5e94\u7528\u6216\u8005\u6e38\u620f\u7684\u6240\u6709\u5185\u5b58\u4fe1\u606f\uff0c\u90a3\u4e48\u53ef\u80fd\u662f\u628a\u95ee\u9898\u60f3\u7b80\u5355\u4e86\uff0c\u6216\u8005\u8bf4\u5ffd\u7565\u4e86\u7cfb\u7edf\u7684\u590d\u6742\u6027\u3002\u4f8b\u5982\uff0c\u4e0d\u540c\u7248\u672c\u7684 iOS \u5176\u5bf9\u5185\u5b58\u5f00\u9500\u7684\u7edf\u8ba1\u90fd\u662f\u6709\u533a\u522b\u7684\u2014\u2014\u5728 iOS12 \u4e0a\u8fd0\u884c\u7684 metal app \u7684\u5185\u5b58\u5728 Xcode memory gauge \u7684\u7edf\u8ba1\u662f\u9ad8\u4e8e iOS11 \u7684\uff0c\u8fd9\u540c\u6837\u662f\u7531\u4e8e\u82f9\u679c\u6539\u53d8\u4e86\u5bf9\u5185\u5b58\u7684\u7edf\u8ba1\u7b56\u7565\uff0c\u5f88\u591a\u4e4b\u524d\u6ca1\u6709\u88ab\u7edf\u8ba1\u7684\u5185\u5b58\u5982\u4eca\u4e5f\u88ab\u8ba1\u7b97\u5230\u4e86\u5185\u5b58\u5f00\u9500\u4e2d\u3002\u800c\u540c\u6837\u90fd\u662f iOS\uff0cXcode memory gauge \u7684\u7edf\u8ba1\u548c Instrument \u4e2d\u7684\u7edf\u8ba1\u4e5f\u6709\u53ef\u80fd\u4e0d\u5b8c\u5168\u4e00\u81f4\uff0c\u800c\u65e9\u671f Instrument \u7684 Allocation \u5219\u4e3b\u8981\u7528\u6765\u7edf\u8ba1 heap \u5185\u5b58\uff0c\u53ea\u80fd\u8bf4\u6839\u636e\u5404\u81ea\u5de5\u5177\u7684\u7edf\u8ba1\u89c4\u5219\uff0c\u5927\u5bb6\u90fd\u662f\u6b63\u786e\u7684\u3002\u56e0\u6b64\uff0c\u628a\u65f6\u95f4\u6d6a\u8d39\u5728\u5bf9\u6bd4\u4e0d\u540c\u5de5\u5177\u7684\u6570\u636e\u4e0a\u8fd8\u4e0d\u5982\u4ee5\u4e00\u4e2a\u5de5\u5177\u4f5c\u4e3a\u6807\u5c3a\u6765\u8861\u91cf\u5185\u5b58\u5f00\u9500\u6216\u8005\u662f\u5224\u65ad\u5185\u5b58\u7684\u4f18\u5316\u662f\u5426\u6709\u6548\u3002\nThe accounting for purgeable, nonvolatile memory changed beginning in iOS 12 and tvOS 12. In iOS 11 and tvOS 11, allocations with this memory storage mode\u2014commonly used by Metal apps to store buffers, textures, and state objects\u2014weren\u2019t counted toward an app\u2019s memory limit and weren\u2019t presented in tools like Xcode memory gauge.\n\u6240\u4ee5\uff0c\u4e86\u89e3\u64cd\u4f5c\u7cfb\u7edf\u662f\u5982\u4f55\u7ba1\u7406\u5185\u5b58\u5c31\u53d8\u5f97\u5341\u5206\u91cd\u8981\uff0c\u5bf9\u4e8e\u5982\u4f55\u89e3\u8bfb Profiler \u5de5\u5177\u63d0\u4f9b\u7684\u6570\u636e\u4e5f\u5f88\u6709\u5e2e\u52a9\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u5148\u6765\u8ba8\u8bba\u4e00\u4e0b iOS \u7cfb\u7edf\u5bf9\u5185\u5b58\u7684\u7ba1\u7406\u673a\u5236\uff0c\u4e4b\u540e\u518d\u6765\u5206\u522b\u770b\u770b Xcode \u6293\u53d6\u7684\u5185\u5b58\u6570\u636e\u548c Unity \u6293\u53d6\u7684\u5185\u5b58\u6570\u636e\u3002\n\u9996\u5148\uff0c\u6bcf\u4e00\u4e2a\u8fdb\u7a0b\u90fd\u4f1a\u6709\u4e00\u4e2a\u5730\u5740\u7a7a\u95f4\u3002\u5176\u8303\u56f4\u7531\u6307\u9488 size \u652f\u6301\uff0c\u6bd4\u5982 32bit \u6216 64bit\u3002\u5e76\u4e14\u5730\u5740\u7a7a\u95f4\u9996\u5148\u4f1a\u5206\u4e3a\u591a\u4e2a\u533a\u57df\uff08 regions \uff09\uff0c\u7136\u540e\u5c06\u8fd9\u4e9b\u533a\u57df\u7ec6\u5206\u4e3a 4KB \uff08\u65e9\u671f\u7248\u672c\uff09\u6216 16KB \uff08 A7 \u4e4b\u540e\uff09\u4e3a\u5355\u4f4d\u7684 page\uff0c\u8fd9\u4e9b page \u7ee7\u627f\u4e86\u8be5 region \u7684\u5404\u79cd\u5c5e\u6027\uff0c\u4f8b\u5982\u662f\u5426\u662f\u53ea\u8bfb\u3001\u53ef\u8bfb\u5199\u7b49\u7b49\u3002\u5f53\u7136\uff0c\u6709\u4e9b page \u53ef\u80fd\u5b58\u653e\u7684\u6570\u636e\u6bd4\u8fd9\u4e2a page \u7684\u5c3a\u5bf8\u8981\u5c0f\uff0c\u6709\u7684\u6570\u636e\u53ef\u80fd\u9700\u8981\u597d\u51e0 page \u624d\u80fd\u5b58\u653e\uff0c\u4f46\u662f\u7cfb\u7edf\u7684\u5185\u5b58\u5355\u4f4d\u662f 16kb \u7684 page\uff0c\u6240\u4ee5\u7cfb\u7edf\u7edf\u8ba1\u7684\u5185\u5b58\u5f00\u9500\u7ea6\u7b49\u4e8e page \u7684\u6570\u91cf x page \u7684\u5927\u5c0f\u3002\n\u5f53\u7136\uff0c\u7cfb\u7edf\u8fd8\u6709\u771f\u5b9e\u7684\u7269\u7406\u5185\u5b58\u3002\nVirtual memory vs Resident memory

\n

ref: WWDC 2013\n\u901a\u8fc7\u865a\u62df\u5185\u5b58\u4f7f\u6211\u4eec\u80fd\u591f\u5efa\u7acb\u4ece\u8be5\u5730\u5740\u7a7a\u95f4\u5230\u771f\u5b9e\u7269\u7406\u5185\u5b58\u7684\u6620\u5c04\uff0c\u8fd9\u70b9\u6211\u60f3\u8fd9\u4e9b\u5927\u5bb6\u5e94\u8be5\u90fd\u77e5\u9053\u3002\u800c\u6620\u5c04\u5176\u5b9e\u662f\u4e00\u4e2a\u5f88\u6709\u8da3\u7684\u4e8b\u60c5\u3002\u56e0\u4e3a\u4ece\u6bcf\u4e00\u4e2a app \u8fdb\u7a0b\u7684\u89d2\u5ea6\u6765\u770b\uff0c\u5b83\u62e5\u6709\u6240\u6709\u7684\u5185\u5b58\uff0c\u5373\u865a\u62df\u5185\u5b58\uff0c\u4f46\u4e8b\u5b9e\u4e0a\u53ea\u6709\u4e00\u90e8\u5206\u865a\u62df\u5185\u5b58\u88ab\u6620\u5c04\u5230\u4e86\u771f\u5b9e\u7684\u7269\u7406\u5185\u5b58\u4e0a\uff0c\u8fd9\u90e8\u5206\u88ab\u6620\u5c04\u5230\u7269\u7406\u5185\u5b58\u7684\u90e8\u5206\u5c31\u662f\u6240\u8c13\u7684 Resident memory\u3002\n\u5c31\u50cf\u4e0a\u9762\u8fd9\u4e2a\u56fe\u4e2d\u63cf\u8ff0\u7684\u4e00\u6837\uff0c\u4e00\u4e2a app \u5206\u914d\u4e86\u5185\u5b58\uff0c\u53ef\u4ee5\u770b\u5230\u5728\u865a\u62df\u5185\u5b58\u4e0a\u5206\u914d\u4e86 4 \u4e2a region\uff0c\u5176\u4e2d\u7b2c 3 \u4e2a region \u5305\u62ec\u4e86 13 \u4e2a page\u3002 \u4f46\u6b64\u65f6\uff0c\u771f\u6b63\u6620\u5c04\u5230\u7269\u7406\u5185\u5b58\u4e0a\u7684\u53ea\u6709 6 \u4e2a page\u3002\u800c\u865a\u62df\u5185\u5b58\u5230\u771f\u5b9e\u7269\u7406\u5185\u5b58\u7684\u6620\u5c04\u53d1\u751f\u5728\u5bf9\u5185\u5b58\u7684\u7b2c\u4e00\u6b21\u4f7f\u7528\u65f6\uff0c\u6bd4\u5982\u4ece\u5185\u5b58\u4e2d\u8bfb\u53d6\u6570\u636e\u6216\u662f\u5411\u5185\u5b58\u4e2d\u5199\u6570\u636e\u3002Resident memory \u540c\u6837\u4e5f\u662f Virtual memory\uff0c\u53ea\u4e0d\u8fc7\u8fd9\u90e8\u5206 Virtual memory \u5df2\u7ecf\u6620\u5c04\u5230\u4e86\u771f\u5b9e\u7684\u7269\u7406\u5185\u5b58\u3002 \u6211\u60f3\u5927\u5bb6\u53ef\u80fd\u90fd\u901a\u8fc7 XCode \u6216\u8005 Instrument \u7684\u7edf\u8ba1\u770b\u5230\u8fc7\u7c7b\u4f3c\u7684\u6570\u636e\uff0c\u4f8b\u5982 Instrument \u7684 VM Tracker \u4e2d\u5c31\u5206\u522b\u5217\u51fa\u4e86 Resident \u548c Virtual Size\u3002\nDirty memory vs Clean memory

\n

page \u6709\u53ef\u80fd\u662f dirty \u7684\u4e5f\u6709\u53ef\u80fd\u662f clean \u7684\u3002\u8981\u5982\u4f55\u533a\u5206 dirty \u548c clean \u5462\uff1f\u7b80\u5355\u7684\u8bf4\uff0cdirty \u7684\u9875\u5c31\u662f\u6211\u4eec\u7684 app \u6216\u8005\u6e38\u620f\u5bf9\u8fd9\u4e2a page \u7684\u5185\u5bb9\u8fdb\u884c\u4e86\u4fee\u6539\u5373\u5206\u914d\u4e86\u5185\u5b58\u540c\u65f6\u4e5f\u4fee\u6539\u4e86\u5185\u5b58\u7684\u5185\u5bb9\uff0c\u5e38\u89c1\u7684\u5c31\u662f malloc \u5728 heap \u4e0a\u5206\u914d\u7684\u5185\u5b58\u3002\u8fd9\u90e8\u5206\u5185\u5b58\u662f\u4e0d\u80fd\u88ab\u56de\u6536\u7684\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u6570\u636e\u663e\u7136\u9700\u8981\u88ab\u4fdd\u5b58\u5728\u5185\u5b58\u4e2d\u4ee5\u4fdd\u8bc1\u7a0b\u5e8f\u6b63\u5e38\u7684\u8fd0\u884c\u3002\n\u800c clean \u7684\u9875\u5219\u662f\u6ca1\u6709\u5bf9\u5176\u5185\u5bb9\u8fdb\u884c\u4fee\u6539\uff0c\u53ef\u4ee5\u88ab\u7cfb\u7edf\u6536\u56de\u548c\u91cd\u65b0\u521b\u5efa\u7684\u3002\u4f8b\u5982\u5185\u5b58\u6620\u5c04\u6587\u4ef6\uff08 Memory-mapped file \uff09\uff0c\u5982\u679c\u64cd\u4f5c\u7cfb\u7edf\u9700\u8981\u66f4\u591a\u7684\u5185\u5b58\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u5c06\u5176\u4e22\u5f03\u3002\u56e0\u4e3a\u7cfb\u7edf\u603b\u662f\u53ef\u4ee5\u4ece\u78c1\u76d8\u4e2d\u91cd\u65b0\u52a0\u8f7d\u5b83\uff0c\u521b\u5efa\u5185\u5b58\u7a7a\u95f4\u548c\u78c1\u76d8\u4e0a\u6587\u4ef6\u7684\u6620\u5c04\u5173\u7cfb\u3002clean \u7684\u5185\u5b58\u662f\u53ef\u4ee5\u88ab\u91ca\u653e\u548c\u91cd\u65b0\u521b\u5efa\u7684\u3002\u4f46\u662f\u53ef\u4ee5\u770b\u5230\uff0c\u867d\u7136 Memory-mapped file \u5e76\u6ca1\u6709\u6d88\u8017\u771f\u5b9e\u7684\u7269\u7406\u5185\u5b58\uff0c\u4f46\u662f\u5b83\u6d88\u8017\u4e86\u8fdb\u7a0b\u7684\u865a\u62df\u5185\u5b58\u3002\n\u9664\u6b64\u4e4b\u5916\u8fd8\u6709\u53ef\u6267\u884c\u6587\u4ef6\u7684__TEXT \u6bb5\u4ee5\u53ca\u4e00\u4e9b framework \u7684 DATA CONST \u6bb5\uff0c\u4e5f\u4f1a\u5f52\u4e3a clean memory\u3002\n\u5728 WWDC2018 \u4e0a\uff0ciOS \u7684\u5f00\u53d1\u4eba\u5458\u4e3e\u4e86\u4e00\u4e2a\u5f88\u5f62\u8c61\u7684\u4f8b\u5b50\u3002\u5373\u5206\u914d 20,000 \u4e2a integers \u7ec4\u6210\u7684 array\uff0c\u6b64\u65f6\u4f1a\u6709 page \u88ab\u521b\u5efa\uff0c\u5982\u679c\u53ea\u5bf9\u7b2c\u4e00\u4e2a\u5143\u7d20\u548c\u6700\u540e\u4e00\u4e2a\u5143\u7d20\u8d4b\u503c\uff0c\u5219\u7b2c\u4e00\u4e2a page \u548c\u6700\u540e\u4e00\u4e2a page\u2014\u2014\u5373\u9996\u5c3e\u5143\u7d20\u6240\u5728\u7684 page\u2014\u2014\u4f1a\u53d8\u6210 dirty\uff0c\u4f46\u662f\u9996\u5c3e\u4e4b\u95f4\u7684 page \u4ecd\u7136\u662f clean\uff0c\u5373\u53ea\u5206\u914d\u4e86\u5185\u5b58\u800c\u6ca1\u6709\u4fee\u6539\u6216\u5199\u6570\u636e\u3002

\n

ref: WWDC 2018\nCompressed memory

\n

\u5f53\u5185\u5b58\u5403\u7d27\u65f6\uff0c\u4f1a\u56de\u6536 clean page\u3002\u800c dirty page \u662f\u4e0d\u80fd\u88ab\u56de\u6536\u7684\uff0c\u90a3\u4e48\u5982\u679c dirty memory \u8fc7\u591a\u4f1a\u5982\u4f55\u5462\uff1f\u5728 iOS7 \u4e4b\u524d\uff0c\u5982\u679c\u8fdb\u7a0b\u7684 dirty memory \u8fc7\u9ad8\u5219\u7cfb\u7edf\u4f1a\u76f4\u63a5\u7ec8\u6b62\u8fdb\u7a0b\u3002iOS7 \u4e4b\u540e\uff0c\u5f15\u5165\u4e86 Compressed Memory \u7684\u673a\u5236\u3002\u7531\u4e8e iOS \u6ca1\u6709\u4f20\u7edf\u610f\u4e49\u4e0a\u7684 disk swap \u673a\u5236\uff08 mac OS \u6709\uff09\uff0c\u56e0\u6b64\u6211\u4eec\u5728\u82f9\u679c\u7684 Profiler \u5de5\u5177\u4e2d\u770b\u5230\u7684 Swapped Size \u6307\u7684\u5176\u5b9e\u5c31\u662f Compressed Memory\u3002\niOS7 \u4e4b\u540e\uff0c\u64cd\u4f5c\u7cfb\u7edf\u53ef\u4ee5\u901a\u8fc7\u5185\u5b58\u538b\u7f29\u5668\u6765\u5bf9 dirty \u5185\u5b58\u8fdb\u884c\u538b\u7f29\u3002\u9996\u5148\uff0c\u9488\u5bf9\u90a3\u4e9b\u6709\u4e00\u6bb5\u65f6\u95f4\u6ca1\u6709\u88ab\u8bbf\u95ee\u7684 dirty pages \uff08\u591a\u4e2a page \uff09\uff0c\u5185\u5b58\u538b\u7f29\u5668\u4f1a\u5bf9\u5176\u8fdb\u884c\u538b\u7f29\u3002\u4f46\u662f\uff0c\u5728\u8fd9\u5757\u5185\u5b58\u518d\u6b21\u88ab\u8bbf\u95ee\u65f6\uff0c\u5185\u5b58\u538b\u7f29\u5668\u4f1a\u5bf9\u5b83\u89e3\u538b\u4ee5\u6b63\u786e\u7684\u8bbf\u95ee\u3002\u4e3e\u4e2a\u4f8b\u5b50\uff0c\u67d0\u4e2a Dictionary \u4f7f\u7528\u4e86 3 \u4e2a page \u7684\u5185\u5b58\uff0c\u5982\u679c\u4e00\u6bb5\u65f6\u95f4\u6ca1\u6709\u88ab\u8bbf\u95ee\u540c\u65f6\u5185\u5b58\u5403\u7d27\uff0c\u5219\u7cfb\u7edf\u4f1a\u5c1d\u8bd5\u5bf9\u5b83\u8fdb\u884c\u538b\u7f29\u4ece 3 \u4e2a page \u538b\u7f29\u4e3a 1 \u4e2a page \u4ece\u800c\u91ca\u653e\u51fa 2 \u4e2a page \u7684\u5185\u5b58\u3002\u4f46\u662f\u5982\u679c\u4e4b\u540e\u9700\u8981\u5bf9\u5b83\u8fdb\u884c\u8bbf\u95ee\uff0c\u5219\u5b83\u5360\u7528\u7684 page \u53c8\u4f1a\u53d8\u4e3a 3 \u4e2a\u3002\nUnity Profiler \u9519\u4e86\u5417\uff1f

\n

\u53ef\u4ee5\u770b\u5230\uff0c\u4ece\u64cd\u4f5c\u7cfb\u7edf\u5185\u5b58\u7ba1\u7406\u7684\u89d2\u5ea6\u6765\u770b\uff0c\u4e00\u4e2a\u8fdb\u7a0b\u7684\u5185\u5b58\u5176\u5b9e\u662f\u5341\u5206\u590d\u6742\u7684\u3002\u800c Unity \u8bb0\u5f55\u7684\u5185\u5b58\u6570\u636e\uff0c\u4ee5\u201cReserved Total - Unity\u201d\u4e3a\u4f8b\uff0c\u5219\u4e3b\u8981\u6765\u81ea\u5f15\u64ce\u5185 MemoryManager \u7684\u8bb0\u5f55\u3002MemoryManager \u4f1a\u6839\u636e\u4e0d\u540c\u7684\u60c5\u51b5\u8c03\u7528\u5bf9\u5e94\u7684 Allocator \u6765\u8fdb\u884c\u5f15\u64ce\u7684\u5185\u5b58\u5206\u914d\u3002

\n

\u4f8b\u5982\u6211\u4eec\u53ef\u4ee5\u4ee5 Unity 3D Game Kit \u8fd9\u4e2a\u514d\u8d39\u9879\u76ee\u4e3a\u4f8b\uff0c\u4f7f\u7528 Instrument \u6765\u67e5\u770b\u4e00\u4e0b\u5b83\u7684\u5185\u5b58\u5206\u914d\u3002

\n

\u53ef\u4ee5\u770b\u5230 MemoryManager \u8c03\u7528\u4e86 UnityDefaultAllocator\u3002 \u800c\u4e0b\u56fe\u7684\u8fd9\u4e2a\u5206\u914d\u5219\u4f7f\u7528\u4e86 IphoneNewLabelAllocator \u6765\u5206\u914d\u5185\u5b58\u3002

\n

\u4e5f\u5c31\u662f\u8bf4 Unity \u7684\u4ee3\u7801\u5206\u914d\u7684\u5185\u5b58\uff0cUnity \u662f\u4f1a\u8fdb\u884c\u8bb0\u5f55\u7684\u3002\u4f46\u662f\u6211\u4eec\u53ef\u4ee5\u770b\u5230\u9664\u4e86 Unity \u7684\u4ee3\u7801\u672c\u8eab\u5206\u914d\u7684\u5185\u5b58\uff0c\u8fd8\u6709\u5f88\u591a framework \u6216\u8005\u7b2c\u4e09\u65b9 library \u4e5f\u4f1a\u5206\u914d\u5185\u5b58\u3002\u4f46\u662f\u8fd9\u90e8\u5206\u5185\u5b58\uff0cUnity \u7684 Profiler \u662f\u4e0d\u4f1a\u8bb0\u5f55\u7684\u3002\n0x02 \u4f7f\u7528 Instrument \u8c03\u8bd5 Unity \u6e38\u620f\u7684\u5185\u5b58

\n

\u8fd9\u90e8\u5206\u6211\u63a8\u8350 Valentin Simonov \u7684\u8fd9\u7bc7\u6587\u7ae0 Understanding iOS Memory (WiP)\uff0c\u5bf9\u4f7f\u7528 Instrument \u8c03\u8bd5\u5185\u5b58\u4ecb\u7ecd\u7684\u5341\u5206\u6e05\u6670\u3002\n0x03 \u4f7f\u7528\u547d\u4ee4\u884c\u5de5\u5177\u6df1\u5165\u6316\u6398\u5185\u5b58\u95ee\u9898

\n

\u9664\u4e86\u4f7f\u7528 Instrument \u6765\u8c03\u67e5\u5185\u5b58\u95ee\u9898\u4e4b\u5916\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u901a\u8fc7\u5f88\u68d2\u7684 Xcode memory debugger \u5de5\u5177\u6765\u67e5\u627e\u5185\u5b58\u95ee\u9898\u3002\u5c24\u5176\u662f\u5c06 Memgraph \u5bfc\u51fa\u540e\uff0c\u8fd8\u53ef\u4ee5\u501f\u52a9\u5404\u79cd\u547d\u4ee4\u884c\u5de5\u5177\u6765\u8f85\u52a9\u8c03\u67e5\u4ee5\u83b7\u53d6\u66f4\u591a\u4fe1\u606f\u3002

\n

\u800c\u4e14\u6709\u65f6\u5927\u5bb6\u4e5f\u4f1a\u62b1\u6028\u8bf4\u5728 Xcode \u7684 Memory Report \u9875\u9762\u770b\u5230\u7684\u5185\u5b58\u6570\u636e\u6709\u65f6\u5019\u4e0d\u4ec5\u548c Unity Profiler \u4e0d\u4e00\u6837\uff0c\u6709\u65f6\u751a\u81f3\u548c Instrument \u7b49\u82f9\u679c\u81ea\u5df1\u7684\u6027\u80fd\u5de5\u5177\u6570\u503c\u4e5f\u4e0d\u4e00\u6837\u3002\u4e0a\u6587\u5df2\u7ecf\u8bf4\u8fc7\u4e86\uff0c\u4e0d\u540c\u7684\u5de5\u5177\u6709\u4e0d\u540c\u7684\u6570\u636e\u662f\u6b63\u5e38\u7684\u3002\u4f46\u662f\u6211\u4eec\u540c\u6837\u53ef\u4ee5\u901a\u8fc7 Memgraph \u548c\u547d\u4ee4\u884c\u5de5\u5177\u6765\u67e5\u770b\u4e00\u4e0b\uff0cMemory Report \u7684\u6570\u636e\u4fa7\u91cd\u4ec0\u4e48\u5185\u5bb9\u3002\n\u8fd8\u662f\u4ee5 Unity 3D Kit \u8fd9\u4e2a\u5de5\u7a0b\u4f5c\u4e3a\u6f14\u793a\uff0c\u6d4b\u8bd5\u8bbe\u5907\u4e3a iPhone X\uff0c\u4e0d\u8fc7\u5728\u5f00\u59cb\u4e4b\u524d\u6211\u4eec\u9996\u5148\u9700\u8981\u5f00\u542f Scheme -> Run -> Diagnostics -> Malloc Stack \u9009\u9879\u3002

\n

\u8fd0\u884c\u6e38\u620f\u540e\u4ece\u4e3b\u83dc\u5355\u70b9\u51fb\u5f00\u59cb\u6e38\u620f\u52a0\u8f7d\u7b2c\u4e00\u4e2a\u573a\u666f\uff0c\u6211\u4eec\u53ef\u4ee5\u5728 Memory Report \u4e2d\u770b\u5230\u6b64\u65f6\u7684\u5185\u5b58\u5df2\u7ecf\u8fbe\u5230\u4e86 1.48G \u3002\u4f46\u662f Memory Report \u4e2d\u5b83\u7684\u5185\u5b58\u523b\u5ea6\u4ecd\u7136\u5728\u7eff\u8272\u90e8\u5206\uff0c\u6240\u4ee5\u5b9e\u4e8b\u6c42\u662f\u7684\u8bb2 Memory Report \u7684\u523b\u5ea6\u5e76\u4e0d\u662f\u4e00\u4e2a\u597d\u7684\u4f18\u5316\u5efa\u8bae\uff0c\u56e0\u4e3a\u8fd9\u4e2a\u5185\u5b58\u5f00\u9500\u5728 iphone7 \u4e0a\u5c31\u76f4\u63a5\u4f1a\u5bfc\u81f4\u6e38\u620f\u88ab\u7cfb\u7edf\u4e2d\u6b62\u3002

\n

Animation Leak?

\n

\u6211\u4eec\u76f4\u63a5\u8fdb\u5165\u5230 Xcode memory debugger\uff0c\u5982\u679c\u60f3\u8981\u5728\u8fd9\u91cc\u68c0\u67e5\u662f\u5426\u6709\u5185\u5b58 leak \u7684\u95ee\u9898\uff0c\u53ef\u4ee5\u70b9\u51fb Filter \u4e2d\u7684\u9009\u9879\u3002\u8fd9\u91cc\u6709\u4e00\u4e2a\u5e38\u89c1\u7684\u5047\u201cleak\u201d\u60c5\u51b5\u3002

\n

\u5982\u679c\u6211\u4eec\u770b\u4e00\u4e0b\u5b83\u7684\u5806\u6808\u4fe1\u606f\u7684\u8bdd\uff0c\u5927\u591a\u662f\u548c Animation \u6709\u5173\u7684\u3002\u8fd9\u91cc\u6211\u54a8\u8be2\u4e86\u4e00\u4e0b\u8fd9\u4e2a\u529f\u80fd\u7684\u5f00\u53d1\u8005\uff0c\u786e\u8ba4\u8fd9\u662f\u4e00\u4e2a\u82f9\u679c\u7684\u8bef\u62a5\uff0cUnity \u8fd8\u662f\u4f1a\u6b63\u5e38\u91ca\u653e\u8fd9\u90e8\u5206\u5185\u5b58\u7684\u3002\u5f53\u7136\u5982\u679c\u5927\u5bb6\u9047\u5230\u5176\u4ed6\u5947\u602a\u7684\u548c\u5f15\u64ce\u6709\u5173\u7684 leak\uff0c\u53ef\u4ee5\u6309\u7167\u8fd9\u7bc7\u6587\u7ae0\u7684\u4ecb\u7ecd\u7ed9 Unity \u63d0\u4ea4 Bug Report\u3002\nhttps://blogs.unity3d.com/2016/08/24/attaching-your-project-to-a-bug-report/\n\u4e4b\u540e\u6211\u4eec\u53ef\u4ee5\u5c06\u6b64\u65f6\u7684\u6570\u636e\u5bfc\u51fa\u4e3a.memgraph \u6587\u4ef6\u3002\u63a5\u4e0b\u6765\u5c31\u53ef\u4ee5\u4f7f\u7528\u4e00\u4e9b\u547d\u4ee4\u884c\u5de5\u5177\u6765\u5904\u7406\u8fd9\u4e9b\u6570\u636e\u4e86\u3002

\n

VMMAP Summary

\n

\u7b2c\u4e00\u4e2a\u547d\u4ee4\u884c\u5de5\u5177\u662f vmmap\uff0c\u4f7f\u7528\u5b83\u6211\u4eec\u53ef\u4ee5\u67e5\u770b\u5f53\u524d\u7684\u865a\u62df\u5185\u5b58\u7684\u6570\u636e\u3002\n\u9996\u5148\u62ff\u5230\u4e00\u4e2a memgraph \u6587\u4ef6\u65f6\uff0c\u6211\u4eec\u53ef\u4ee5\u8003\u8651\u4f7f\u7528\u8fd9\u4e2a\u6307\u4ee4\u540c\u65f6\u52a0\u4e0a--summary \u6807\u8bb0\u6765\u8f93\u51fa\u5f53\u524d\u865a\u62df\u5185\u5b58\u7684\u4e00\u4e2a\u603b\u89c8\u3002\nvmmap --summary Unity3DKit_ipx.memgraph\n\u7ec8\u7aef\u7684\u8f93\u51fa\u5982\u4e0b\u56fe\u6240\u793a\uff1a

\n

\u6211\u4eec\u53ef\u4ee5\u53d1\u73b0\u4e00\u4e9b\u6709\u8da3\u7684\u5730\u65b9\u3002\u9996\u5148\u6709\u524d 4 \u5217\u662f\u6211\u4eec\u4e4b\u524d\u8ba8\u8bba\u8fc7\u7684\u5185\u5bb9\uff1aVIRTUAL SIZE\u3001RESIDENT SIZE\u3001DIRTY SIZE\u3001SWAPPED SIZE\u3002\u5206\u522b\u8868\u793a\u865a\u62df\u5185\u5b58\u7684\u5927\u5c0f\uff0c\u6620\u5c04\u5230\u7269\u7406\u5185\u5b58\u7684\u5927\u5c0f\uff0cDirty \u5185\u5b58\u7684\u5927\u5c0f\u4ee5\u53ca Compressed \u5185\u5b58\u7684\u5927\u5c0f\u3002 \u6211\u4eec\u53ef\u4ee5\u770b\u5230 TOTAL \u7684\u90e8\u5206\uff0c\u8fd9\u4e2a\u6e38\u620f\u8fdb\u7a0b\u5206\u914d\u4e86 2.7G \u7684\u865a\u62df\u5185\u5b58\u5176\u4e2d\u6709 1.6G \u6620\u5c04\u5230\u4e86\u7269\u7406\u5185\u5b58\u4e0a\uff0c\u800c DIRTY SIZE \u7684\u503c\u662f 1.4G\u2014\u2014\u8fd9\u4e2a\u503c\u5f88\u63a5\u8fd1 Memory Report \u4e2d\u7684\u6570\u503c\uff0c\u800c SWAPPED SIZE \u7684\u6570\u503c\u4e3a 52mb\uff0c\u6839\u636e\u82f9\u679c\u5de5\u7a0b\u5e08\u5728 WWDC2018 \u4e0a\u7684\u6f14\u8bb2\uff0c\u8fd9\u4e2a\u503c\u662f\u538b\u7f29\u524d\u7684\u5185\u5b58\u800c\u4e0d\u662f\u538b\u7f29\u540e\u7684\u5185\u5b58\u3002\u56e0\u6b64\u6211\u4eec\u4e3b\u8981\u6765\u5173\u6ce8 DIRTY SIZE \u8fd9\u4e00\u9879\u3002\nIOKit

\n

\u5176\u6b21\u6211\u4eec\u53ef\u4ee5\u770b\u5230 IOKit \u7684\u5f00\u9500\u6700\u5927\uff0c\u5b83\u7684\u865a\u62df\u5185\u5b58\u4e0d\u4ec5\u8fbe\u5230\u4e86 832.5mb \uff0c\u800c\u4e14\u5b9e\u9645\u6620\u5c04\u5230\u7269\u7406\u5185\u5b58\u4e0a\u7684\u7a7a\u95f4\u4e5f\u8fbe\u5230\u4e86 750.4mb \u3002\u8fd9\u90e8\u5206\u4e3b\u8981\u662f\u4e00\u4e9b\u548c GPU \u76f8\u5173\u7684\u4e00\u4e9b\u5185\u5b58\uff0c\u4f8b\u5982 render targets, textures, meshes, compiled shaders \u7b49\u7b49\u3002\u800c\u8fd9\u4e2a\u6d4b\u8bd5\u9879\u76ee\u4e5f\u7684\u786e\u662f mesh\u3001texture \u7684\u5185\u5b58\u5360\u7528\u5f88\u5927\u3002\nMALLOC \u548c Heap

\n

\u518d\u6b21\uff0c\u6211\u4eec\u53ef\u4ee5\u770b\u5230 MALLOC_**\u5206\u914d\u4e86\u5f88\u591a\u5185\u5b58\u3002\u8fd9\u90e8\u5206\u5185\u5b58\u4e3b\u8981\u662f\u8c03\u7528 Malloc \u8fdb\u884c\u5206\u914d\u7684\uff0c\u5176\u4e2d\u5373\u5305\u62ec Unity \u7684\u539f\u751f\u4e5f\u5c31\u662f C++\u4ee3\u7801\u7684\u5206\u914d\u4e5f\u5305\u62ec\u7b2c\u4e09\u65b9\u5e93\u548c\u7cfb\u7edf\u4f7f\u7528 Malloc \u5206\u914d\u7684\u5185\u5b58\uff0c\u8fd9\u90e8\u5206\u5185\u5b58\u5728\u6240\u8c13\u7684 Heap \u4e0a\uff0c\u5728\u8fd9\u51e0\u884c\u7684\u540e\u9762\u53ef\u4ee5\u770b\u5230\u201csee MALLOC ZONE table below\u201d\uff0c\u4e5f\u5c31\u662f\u53ef\u4ee5\u5728\u4e0b\u9762\u770b\u5230\u5404\u4e2a heap zone \u7684\u4e00\u4e2a\u5f52\u7c7b\u3002\u5728\u8fd9\u91cc\u6211\u4eec\u53ef\u4ee5\u5229\u7528\u7b2c\u4e8c\u4e2a\u547d\u4ee4\u884c\u5de5\u5177 heap \u6765\u68c0\u67e5\u4e00\u4e0b Heap \u5185\u5b58\u7684\u5185\u5bb9\u3002\nheap --sortBySize Unity3DKit_ipx.memgraph\n\u4f7f\u7528 heap \u6307\u4ee4\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u6dfb\u52a0--sortBySize \u6807\u5fd7\u6765\u5bf9\u6570\u636e\u8fdb\u884c\u6392\u5e8f\uff08\u9ed8\u8ba4\u6309\u7167\u7c7b\u578b\u5b9e\u4f8b\u7684\u6570\u91cf\u8fdb\u884c\u6392\u5e8f\uff09\u3002

\n

\u53ef\u4ee5\u770b\u5230 Heap \u7684\u7edd\u5927\u90e8\u5206\u5185\u5b58\u90fd\u88ab non-object \u5360\u7528\u4e86\uff0c\u8fbe\u5230\u4e86\u8fd1 700mb\uff0c\u800c\u5b9e\u9645\u7684 object \u7684\u5185\u5b58\u5206\u914d\u5176\u5b9e\u90fd\u662f\u5f88\u5c0f\u7684\uff0c\u6bd4\u5982\u7c7b GpuProgramMetal \u7684\u5b9e\u4f8b\u6709 573 \u4e2a\uff0c\u4f46\u662f\u5185\u5b58\u5176\u5b9e\u53ea\u5360\u7528\u4e86 223kb\u3002\u6b64\u65f6\u5927\u5bb6\u4e00\u5b9a\u5bf9 non-object \u7684\u5185\u5bb9\u5f88\u611f\u5174\u8da3\uff0c\u4e0d\u8fc7\u5728\u8fd9\u4e2a\u9875\u9762\u91cc\u4f3c\u4e4e\u4e5f\u770b\u4e0d\u5230\u592a\u591a\u7684\u5185\u5bb9\u3002\u6240\u4ee5\u63a5\u4e0b\u6765\u6211\u4eec\u53ef\u4ee5\u6dfb\u52a0--showSize \u6807\u5fd7\uff0c\u5c06\u5408\u5e76\u5728\u4e00\u8d77\u7684\u6570\u636e\u6309\u7167 size \u8fdb\u884c\u5206\u7ec4\u3002\nheap --showSize --sortBySize Unity3DKit_ipx.memgraph\n\u8fd9\u6837\u5c31\u6e05\u6670\u591a\u4e86\u3002

\n

\u53ef\u4ee5\u770b\u5230 non-object \u8fd9\u4e00\u7c7b\u4e2d\uff0c\u6392\u540d\u6700\u9ad8\u7684\u51e0\u5757\u5185\u5b58\u5206\u914d\u7684\u5c3a\u5bf8\u5206\u522b\u662f 1 \u4e2a 31mb\u30013 \u4e2a 10mb \u4ee5\u53ca 1 \u4e2a 8.4mb \uff0c\u8fd9\u6837\u6211\u4eec\u5c31\u786e\u5b9a\u4e86\u8fd9\u4e2a\u65f6\u5019\u7684\u8c03\u67e5\u65b9\u5411\u3002\n\u5f53\u7136\uff0cheap \u6307\u4ee4\u8fd8\u63d0\u4f9b\u4e86\u66f4\u591a\u7684\u529f\u80fd\uff0c\u6bd4\u5982\u90a3\u4e9b\u6709 Class Name \u7684\u5bf9\u8c61\u5206\u914d\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7 ClassName \u5339\u914d\u7684\u65b9\u5f0f\u83b7\u53d6\u6bcf\u4e00\u4e2a\u8be5\u7c7b\u578b\u5b9e\u4f8b\u7684\u5185\u5b58\u5730\u5740\u3002\u6b64\u65f6\u9700\u8981-addresses \u6807\u7b7e\u5373\u53ef\u3002\u6bd4\u5982\u6211\u4eec\u8f93\u51fa Unity \u7684 GpuProgramMetal \u7c7b\u7684\u6240\u6709\u5b9e\u4f8b\u7684\u5730\u5740\u4fe1\u606f\uff0c\u53ef\u4ee5\u770b\u5230\u5176\u5b9e\u8fd9\u4e2a\u7c7b\u7684\u5b9e\u4f8b\u672c\u8eab\u5e76\u4e0d\u5927\uff0c\u4f46\u662f\u5b83\u5f15\u7528\u7684\u771f\u6b63\u7684 shader \u8d44\u6e90\u5219\u53ef\u80fd\u662f\u5185\u5b58\u5f00\u9500\u7684\u5927\u6237\u4e4b\u4e00\u3002\nheap -addresses GpuProgramMetal Unity3DKit_ipx.memgraph

\n

\u540c\u65f6\uff0c\u6709\u4e86\u5404\u4e2a\u5bf9\u8c61\u6240\u5728\u7684\u5185\u5b58\u5730\u5740\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u901a\u8fc7\u4e0b\u9762\u8981\u63d0\u5230\u7684 malloc_history \u547d\u4ee4\u6765\u67e5\u627e\u5b83\u4eec\u662f\u600e\u4e48\u6765\u7684\u3002\u4f46\u662f\u73b0\u5728\u6211\u4eec\u8fd8\u662f\u628a\u76ee\u5149\u8f6c\u5411\u5185\u5b58\u5206\u914d\u6bd4\u8f83\u5927\u7684\u76ee\u6807\u5427\u3002\n\u6b64\u65f6\u8fd4\u56de\u7ec8\u7aef\uff0c\u7ee7\u7eed\u8f93\u51fa\u865a\u62df\u5185\u5b58\u7684\u4fe1\u606f\uff0c\u4e0d\u8fc7\u8fd9\u6b21\u6211\u4eec\u53ea\u5173\u6ce8 MALLOC_LARGE \u7684\u5206\u914d\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u501f\u52a9 grep \u6765\u8fc7\u6ee4\u51fa\u6211\u4eec\u7684\u76ee\u6807\u3002\nvmmap -verbose Unity3DKit_ipx.memgraph | grep \"MALLOC_LARGE\"\n\u8fd9\u6b21\u8f93\u51fa\u4e86 MALLOC_LARGE \u7c7b\u578b\u4e0b\u7684\u5185\u5b58\u4fe1\u606f\uff0c\u5305\u62ec\u5b83\u7684\u5730\u5740\u3001\u5c3a\u5bf8\u4ee5\u53ca\u6240\u5728 Heap Zone \u7b49\u7b49\u4fe1\u606f\u3002\u6211\u4eec\u53ef\u4ee5\u5728\u8fd9\u91cc\u627e\u5230\u6211\u4eec\u7684\u76ee\u6807\uff0c\u4e00\u4e2a 30mb\u30013 \u4e2a 10mb \u4ee5\u53ca\u4e00\u4e2a 8mb \u7684\u5185\u5b58\u5206\u914d\u3002

\n

\u63a5\u4e0b\u6765\u6211\u4eec\u5c31\u6765\u770b\u4e00\u4e0b\u5206\u914d\u5b83\u4eec\u7684\u5806\u6808\u8c03\u7528\u5427\u3002\u8fd9\u91cc\u6211\u4eec\u4f1a\u4f7f\u7528 malloc_history \u547d\u4ee4\uff0c\u540c\u65f6\u52a0\u4e0a--fullStacks \u6807\u5fd7\u6765\u8f93\u51fa\u5806\u6808\u4fe1\u606f\u3002\nmalloc_history Unity3DKit_ipx.memgraph --fullStacks 0x0000000127c60000\n\u53ef\u4ee5\u770b\u5230\u8fd9 30mb \u7684\u5206\u914d\u662f\u4e3a\u4e86\u7ed9 FMOD \u5206\u914d\u5185\u5b58\u6c60\u3002

\n

\u53e6\u5916 3 \u4e2a 10mb \u7684\u5206\u914d\uff0c\u540c\u6837\u4e5f\u662f\u505a\u7c7b\u4f3c\u7684\u4e8b\u60c5\u3002\u53ef\u89c1\u8fd9\u4e2a\u9879\u76ee\u4f7f\u7528\u7684\u58f0\u97f3\u8d44\u6e90\u5f88\u591a\u3002\u6700\u540e\u6211\u4eec\u6765\u770b\u4e00\u4e0b\u8fd9\u4e2a 8mb \u7684\u5206\u914d\u662f\u4ece\u54ea\u91cc\u6765\u7684\u3002\nmalloc_history Unity3DKit_ipx.memgraph --fullStacks 0x0000000113400000

\n

\u53ef\u4ee5\u770b\u5230\u662f\u5f00\u542f\u591a\u7ebf\u7a0b\u6e32\u67d3\u65f6\uff0cUnity \u521b\u5efa CommandQueue \u65f6\u5206\u914d\u7684\u5185\u5b58\u3002\nVM_ALLOC == Mono Size?

\n

\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u53ef\u4ee5\u770b\u5230 vmmap \u2013summary \u8f93\u51fa\u7684\u7ed3\u679c\u4e2d\uff0c\u6709\u4e00\u9879\u53eb\u505a VM_ALLOC\u3002\u6839\u636e Valentin Simonov \u7684\u8bf4\u6cd5\uff0cVM_ALLOC \u5bf9\u5e94\u7684\u662f Mono \u5185\u5b58\u4e5f\u5c31\u662f\u6258\u7ba1\u5185\u5b58\u7684\u5927\u5c0f\u3002\u7a76\u7adf\u662f\u5426\u5982\u6b64\u5462\uff1f\u6211\u4eec\u540c\u6837\u53ef\u4ee5\u901a\u8fc7\u4e0a\u9762\u7684\u65b9\u5f0f\uff0c\u6765\u67e5\u770b\u4e00\u4e0b VM_ALLOC \u90e8\u5206\u7684\u5185\u5b58\u5206\u914d\u5806\u6808\u3002 \u9996\u5148\u6211\u4eec\u8fd8\u662f\u901a\u8fc7 vmmap \u548c grep \u6765\u8fc7\u6ee4\u51fa VM_ALLOC \u90e8\u5206\u7684\u5185\u5b58\u4fe1\u606f\u3002\nvmmap -verbose Unity3DKit_ipx.memgraph | grep \"VM_ALLOC\"\n\u53ef\u4ee5\u770b\u5230\u8fd9\u90e8\u7684\u5185\u5b58\u5206\u914d\u5e76\u4e0d\u591a\uff0c\u6211\u4eec\u540c\u6837\u9009\u62e9 2 \u5757\u5206\u914d\u6700\u5927\u7684\u5185\u5b58\u4e0b\u624b\u3002

\n

\u6211\u4eec\u9996\u5148\u4f7f\u7528 malloc_history \u6765\u67e5\u770b\u4e00\u4e0b 3m \u90e8\u5206\u7684\u8c03\u7528\u5806\u6808\u3002\nmalloc_history Unity3DKit_ipx.memgraph --fullStacks 0x0000000152bd4000

\n

\u6211\u4eec\u53ef\u4ee5\u770b\u5230\u8fd9 3m \u7684\u5185\u5b58\u662f C#\u811a\u672c\u4e2d\u8c03\u7528\u4e86 SimplFXSynth \u7684 RenderAudio \u65b9\u6cd5\u800c\u89e6\u53d1\u4e86 GC \u5206\u914d\uff0c\u6258\u7ba1\u5806\u8fdb\u884c\u4e86\u6269\u5bb9\u3002\u9488\u5bf9\u811a\u672c\u4e2d\u7684\u65b9\u6cd5\u5b9a\u4f4d\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7 RuntimeInvoker \u8fd9\u4e2a\u7b26\u53f7\u6765\u5b9a\u4f4d\u5b83\u5728\u5806\u6808\u4e2d\u7684\u4f4d\u7f6e\u3002

\n

\u6709\u8da3\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u518d\u6765\u770b\u770b 1mb \u7684\u8fd9\u5757\u5185\u5b58\u662f\u600e\u4e48\u5206\u914d\u7684\u3002\nmalloc_history Unity3DKit_ipx.memgraph --fullStacks 0x0000000150084000\n\u8fd9\u6b21\u662f\u7531\u4e8e Unity \u7684 ScriptingGCHandle::Acquire \u65b9\u6cd5\u5728\u6258\u7ba1\u5806\u4e0a\u8fdb\u884c\u4e86\u5185\u5b58\u5206\u914d\u3002

\n

\u53ef\u89c1\uff0cVM_ALLOC \u8fd9\u90e8\u5206\u5185\u5b58\u4e3b\u8981\u5bf9\u5e94\u4e86 Unity \u7684 Mono \u6258\u7ba1\u5806\u7684\u5185\u5b58\u800c\u4e14\u8fd9\u4e2a\u9879\u76ee\u7684 Mono \u5185\u5b58\u5e76\u4e0d\u5927\u3002\u800c\u5177\u4f53\u662f\u54ea\u4e2a\u51fd\u6570\u89e6\u53d1\u4e86 GC \u5206\u914d\uff0c\u5219\u53ef\u4ee5\u901a\u8fc7 malloc_history \u6765\u67e5\u770b\u3002\nCommand Summary

\n

\u81f3\u6b64\uff0c\u4f7f\u7528\u547d\u4ee4\u884c\u8c03\u8bd5\u548c\u67e5\u627e iOS \u5e73\u53f0\u4e0a\u5185\u5b58\u95ee\u9898\u5c31\u4ecb\u7ecd\u5b8c\u4e86\u3002\u7b80\u5355\u6765\u4e2a\u5c0f\u7ed3\uff0c\u62ff\u5230\u4e00\u4e2a Unity \u6e38\u620f\u7684\u5185\u5b58.Memgraph \u6587\u4ef6\u4e4b\u540e\uff0c\u53ef\u4ee5\u5148\u901a\u8fc7 vmmap --summary \u6765\u67e5\u770b\u4e00\u4e0b\u5185\u5b58\u7684\u5168\u666f\u56fe\u3002\u5bf9\u4e8e heap \u4e5f\u5c31\u662f malloc \u5206\u914d\u7684\u5185\u5b58\uff0c\u53ef\u4ee5\u8fdb\u4e00\u6b65\u901a\u8fc7 heap \u6307\u4ee4\u6765\u8fdb\u4e00\u6b65\u5206\u6790\u3002 \u800c\u4e00\u65e6\u83b7\u53d6\u4e86\u76ee\u6807\u5bf9\u8c61\u7684\u5185\u5b58\u5730\u5740\u4e4b\u540e\uff0c\u5c31\u53ef\u4ee5\u4f7f\u7528 malloc_history \u6307\u4ee4\u6765\u83b7\u53d6\u5206\u914d\u8fd9\u5757\u5185\u5b58\u7684\u5806\u6808\u4fe1\u606f\u4e86\u3002\u5f53\u7136\u524d\u63d0\u662f\u8981\u5f00\u542f Malloc Stack \u7684\u9009\u9879\u3002\u4e4b\u540e\uff0c\u53ef\u4ee5\u505a\u4e00\u4e2a\u81ea\u52a8\u5316\u7684\u5206\u6790\u5de5\u5177\uff0c\u5bf9\u6570\u636e\u8fdb\u884c\u5904\u7406\u548c\u8f93\u51fa\u6765\u5b9a\u4f4d\u5185\u5b58\u95ee\u9898\u3002

\n

0x04 \u5c0f\u5f69\u86cb

\n

Unity 3D Game Kit \u662f\u4e00\u4e2a\u5f88\u68d2\u7684 Unity \u7684\u5b66\u4e60\u5de5\u7a0b\u3002\u5b83\u7684\u6559\u5b66\u9875\u9762\u53ef\u4ee5\u67e5\u770b\u8fd9\u91cc\uff1a https://learn.unity.com/tutorial/3d-game-kit-reference-guide#5c7f8528edbc2a002053b73f

\n

iOS13 \u4e4b\u540e\u63d0\u4f9b\u4e86\u4e00\u4e2a\u65b0\u7684 API-os_proc_available_memory\uff0c\u5229\u7528\u8fd9\u4e2a API \u6211\u4eec\u53ef\u4ee5\u83b7\u53d6\u5f53\u524d\u8fd9\u4e2a\u8fdb\u7a0b\u8fd8\u80fd\u83b7\u53d6\u591a\u5c11\u5185\u5b58\u7684\u9884\u4f30\u503c\u3002\u55ef\uff0c\u602a\u4e0d\u5f97\u6211\u7684 iphone7 \u8dd1\u4e0d\u52a8\u8fd9\u4e2a\u9879\u76ee\u3002

\n

\u539f\u6587\u94fe\u63a5\uff1a https://connect.unity.com/p/xie-gei-unitykai-fa-zhe-de-iosnei-cun-diao-shi-zhi-nan?app=true\n\u66f4\u591a\u5e72\u8d27\u8d44\u6e90\u5b66\u4e60\uff0c\u6233\u4e0a\u65b9\u94fe\u63a5\u4e0b\u8f7d Unity \u5b98\u65b9 app\uff0c\u5728\u7ebf\u6280\u672f\u4e92\u52a8\u7b54\u7591\uff0c\u7ed3\u8bc6\u66f4\u591a Unity \u5c0f\u4f19\u4f34\uff0c\u4ea4\u53cb\u5b66\u4e60\u4e24\u4e0d\u8bef\uff01

\n" }, { "author": { "url": "member/unn", "name": "unn", "avatar": "https://cdn.v2ex.com/gravatar/cfff9ca626c77fa9bdd8a8e7eb3048d0?s=73&d=retro" }, "url": "t/639131", "title": "Unity3D \u5e38\u7528\u63d2\u4ef6\u6c47\u603b", "id": "t/639131", "date_published": "2020-01-19T05:20:28+00:00", "content_html": "

\u672c\u6587\u8f6c\u81ea Unity Connect \u535a\u4e3b AnimeKing

\n

Unity Asset Store \u4e0a\u6709\u5927\u91cf\u7684\u4f18\u8d28\u7684\u827a\u672f\u5bb6\u4e0e\u5f00\u53d1\u8005\u63d0\u4f9b\u7684\u8d44\u6e90\u3002\u6211\u4eec\u4e5f\u8bb8\u9700\u8981\u62e9\u6728\u800c\u6816\uff0c\u597d\u7684\u8d44\u6e90\u7ecf\u5f97\u8d77\u65f6\u95f4\u7684\u6c89\u6ca6\u3002\u4e0b\u9762\u6211\u4eec\u4e00\u8d77\u6765\u770b\u770b\u8fd9\u4e9b\u4f18\u79c0\u7684\u4e4b\u7269\u3002\n\u4e00\u3001\u529f\u80fd\u6027\u63d2\u4ef6\n1\u3001Obfuscator \u53ef\u4ee5\u4fdd\u62a4\u6e38\u620f\u4ee3\u7801\u548c\u6e38\u620f\u8d44\u6e90\uff0c\u9632\u6b62\u88ab\u9006\u5411\u5de5\u7a0b\u7834\u89e3\u3002\nhttps://assetstore.unity.com/packages/tools/utilities/obfuscator-48919?aid=1101l4bPZ&utm_source=aff

\n

2\u3001UFPS \u662f\u5236\u4f5c\u7b2c\u4e00\u4eba\u79f0\u8bbe\u8ba1\u6e38\u620f\u7684\u5fc5\u5907\u63d2\u4ef6\uff0c\u5f00\u53d1\u8005\u65e0\u9700\u91cd\u9020\u8f6e\u5b50\uff0c\u4e0a\u624b\u5f88\u5feb\u3002\nhttps://assetstore.unity.com/packages/templates/systems/ufps-ultimate-fps-106748?aid=1101l4bPZ&utm_source=aff

\n

3\u3001Lip Sync Pro \u662f\u4e00\u6b3e\u5236\u4f5c\u5507\u8bed\u540c\u6b65&\u9762\u90e8\u52a8\u753b\u7684\u63d2\u4ef6\u3002\nhttps://assetstore.unity.com/packages/tools/animation/lipsync-pro-32117?aid=1101l4bPZ&utm_source=aff

\n

4\u3001Edy's Vehicle Physics \u8fd9\u6b3e\u63d2\u4ef6\u53ef\u4ee5\u4e3a\u8d5b\u8f66\u7c7b\u6e38\u620f\u63d0\u4f9b\u5404\u79cd\u903c\u771f\u7684\u771f\u5b9e\u7269\u7406\u6548\u679c\uff0c\u5236\u4f5c\u8d5b\u8f66\u7c7b\u7684\u6e38\u620f\u53ef\u4ee5\u8003\u8651\u4e00\u4e0b\u8fd9\u6b3e\u63d2\u4ef6\u3002\nhttps://assetstore.unity.com/packages/tools/physics/edy-s-vehicle-physics-403?aid=1101l4bPZ&utm_source=aff

\n

5\u3001Editor Console Pro \u662f\u4e00\u6b3e\u53ef\u4ee5\u53d6\u4ee3 Unity \u539f\u751f\u63a7\u5236\u53f0\u7f16\u8f91\u5668\u7684\u63d2\u4ef6\uff0c\u751f\u4ea7\u529b\u63d0\u5347\u5fc5\u5907\u63d2\u4ef6\u3002\nhttps://assetstore.unity.com/packages/tools/utilities/editor-console-pro-11889?aid=1101l4bPZ&utm_source=aff

\n

6\u3001A* Pathfinding Project Pro \u662f\u4e00\u6b3e AI \u5bfb\u8def\u63d2\u4ef6\uff0c\u5f00\u53d1\u8005\u53ef\u4ee5\u81ea\u5b9a\u4e49 AI \u7684\u5bfb\u8def\u884c\u4e3a\u3002\nhttps://assetstore.unity.com/packages/tools/ai/a-pathfinding-project-pro-87744?aid=1101l4bPZ&utm_source=aff

\n

7\u3001Stan's Assets \u6240\u6709\u8d44\u6e90\u94fe\u63a5\nhttps://blog.csdn.net/game_builder/article/details/93143186\nStan\u2019s Assets \u63d0\u4f9b\u4e86\u548c iOS\u3001\u5b89\u5353\u7b49\u5e73\u53f0\u4ea4\u4e92\u7684\u63d2\u4ef6\uff0c\u8fd8\u6709\u4f7f\u7528 Admob \u7684\u63d2\u4ef6\u3002\u6709\u4e86 Stan's Assets \u7684\u63d2\u4ef6\uff0c\u4f60\u5b8c\u5168\u4e0d\u9700\u8981\u4e86\u89e3\u4efb\u4f55 iOS \u6216\u8005\u5b89\u5353\u5f00\u53d1\uff0c\u5c31\u53ef\u4ee5\u4f7f\u7528 iOS \u548c\u5b89\u5353\u7684\u5404\u79cd\u7279\u6027\u3002\u5f00\u53d1\u8005\u5fc5\u5907\u63d2\u4ef6\uff0c\u800c\u4e14\u51e0\u5e74\u6765\u4ed6\u4eec\u4e00\u76f4\u5728\u7ef4\u62a4\u66f4\u65b0\u3002\u5f3a\u70c8\u63a8\u8350\u3002\nA \uff09 Ultimate Mobile Pro \uff08\u5305\u542b\u4e0e iOS \u548c\u5b89\u5353\u4ea4\u4e92\u7684\u63d2\u4ef6\uff0c\u540c\u65f6\u5305\u542b Admob \u63d2\u4ef6\uff0c\u968f\u610f\u5207\u6362 iOS \u548c\u5b89\u5353\u90e8\u7f72\uff0c\u4e0d\u9700\u8981\u66f4\u6539\u4efb\u4f55\u4ee3\u7801\uff09\nhttps://assetstore.unity.com/packages/tools/integration/ultimate-mobile-pro-130345?aid=1101l4bPZ&utm_source=aff

\n

B \uff09 iOS Native Pro(Ultimate Mobile Pro \u7684\u5b50\u96c6\uff0c\u5305\u542b\u548c iOS \u4ea4\u4e92\u7684\u63d2\u4ef6 )\nhttps://assetstore.unity.com/packages/tools/integration/ios-native-pro-119175?aid=1101l4bPZ&utm_source=aff

\n

C \uff09 Android Native Pro((Ultimate Mobile Pro \u7684\u5b50\u96c6\uff0c\u5305\u542b\u548c\u5b89\u5353\u4ea4\u4e92\u7684\u63d2\u4ef6\uff0c\u542b\u5b89\u5353\u7248\u4f7f\u7528 Admob \u7684\u63d2\u4ef6 )\nhttps://assetstore.unity.com/packages/tools/integration/android-native-pro-125691?aid=1101l4bPZ&utm_source=aff

\n

D \uff09 Google Mobile Ads SDK \uff08 Ultimate Mobile Pro \u7684\u5b50\u96c6\uff0c\u63d0\u4f9b iOS,wp8 \u548c\u5b89\u5353\u4f7f\u7528 Admob \u7684\u63d2\u4ef6 \uff09 [\u5df2\u4e0b\u67b6]\n\u4e8c\u3001\u97f3\u9891\u63d2\u4ef6\n1\u3001Koreographer Professional Edition - Asset Store\uff1a\u662f\u5236\u4f5c\u97f3\u4e50\u8282\u62cd\u7c7b\u6e38\u620f\u7684\u5fc5\u5907\u795e\u5668\uff01\nhttps://assetstore.unity.com/packages/tools/audio/koreographer-professional-edition-44270?aid=1101l4bPZ&utm_source=aff

\n

13\uff1aMaster Audio: AAA Sound - Asset Store\uff1a\u662f Unity \u6e38\u620f\u5f00\u53d1\u7684\u7ec8\u6781\u97f3\u9891\u89e3\u51b3\u65b9\u6848\u3002\nhttps://assetstore.unity.com/packages/tools/audio/master-audio-aaa-sound-5607?aid=1101l4bPZ&utm_source=aff

\n

\u4e09\u3001\u865a\u62df\u73b0\u5b9e\u63d2\u4ef6\n1\u3001Final IK - Asset Store\uff1a\u662f\u4e00\u4e2a\u53cd\u5411\u52a8\u529b\u63a7\u5236\u63d2\u4ef6\u3002\u76f8\u6bd4\u8f83 unity \u7684\u81ea\u5e26 IK \u7cfb\u7edf\uff0cFinal IK \u8bbe\u7f6e\u66f4\u52a0\u65b9\u4fbf\uff0c\u7528\u9014\u66f4\u5e7f\u3002\u6709\u5f88\u591a\u60c5\u666f\u5316\u7684\u5e94\u7528\uff0c\u5982\u9488\u5bf9\u548c\u7269\u4f53\u4ea4\u4e92\u7684\u52a8\u4f5c\u7cfb\u7edf\u3002\u5982\u679c\u80fd\u4f7f\u7528\u597d Final IK \u63d2\u4ef6\uff0c\u5c31\u53ef\u4ee5\u4f7f\u7528\u5c11\u91cf\u7684\u56fa\u5b9a\u52a8\u753b\uff0c\u5728\u6b64\u57fa\u7840\u4e0a\u878d\u5408 IK \u52a8\u4f5c\uff0c\u505a\u51fa\u5343\u53d8\u4e07\u5316\u7684\u4ea4\u4e92\u52a8\u4f5c\u3002\nhttps://assetstore.unity.com/packages/tools/animation/final-ik-14290?aid=1101l4bPZ&utm_source=aff

\n

2\u3001PuppetMaster - Asset Store\nhttps://assetstore.unity.com/packages/tools/physics/puppetmaster-48977?aid=1101l4bPZ&utm_source=aff

\n

3\u3001VR Panorama 360 PRO Renderer - Asset Store\uff1a\u53ef\u4ee5\u5e2e\u52a9\u5f00\u53d1\u8005\u5728 Unity \u5185\u90e8\u6e32\u67d3 4K360\u00b0\u5168\u666f\u89c6\u9891\u3002\nhttps://assetstore.unity.com/packages/tools/video/vr-panorama-360-pro-renderer-35102?aid=1101l4bPZ&utm_source=aff

\n

4\u3001Curved UI - VR Ready Solution To Bend / Warp Your Canvas! - Asset Store \u662f\u4e00\u6b3e\u5236\u4f5c VR \u6e38\u620f\u7684 UI \u7684\u63d2\u4ef6\u3002\nhttps://assetstore.unity.com/packages/tools/gui/curved-ui-vr-ready-solution-to-bend-warp-your-canvas-53258?aid=1101l4bPZ&utm_source=aff

\n

\u56db\u3001\u7d20\u6750\u3001\u52a8\u753b\u8bbe\u8ba1\u7c7b\u63d2\u4ef6\n1\u3001Amplify Shader Editor - Asset Store\uff1a\u662f\u4e00\u6b3e\u57fa\u4e8e\u8282\u70b9\u7684\u53ef\u89c6\u5316 shader \u5236\u4f5c\u63d2\u4ef6\u3002\nhttps://assetstore.unity.com/packages/tools/visual-scripting/amplify-shader-editor-68570?aid=1101l4bPZ&utm_source=aff

\n

2\u3001Colorful FX - Asset Store\uff1a\u5305\u542b\u4e86\u5927\u91cf\u7684\u53ef\u5b9a\u5236\u7684 FX \u6548\u679c\u548c\u5168\u5c4f\u7684 camera \u6e32\u67d3\u6548\u679c\u3002\u5bf9\u8272\u5f69\u7ea0\u6b63\u548c\u56fe\u50cf\u540e\u671f\u5904\u7406\u6709\u5f88\u5927\u4f5c\u7528\u3002\nhttps://assetstore.unity.com/packages/vfx/shaders/fullscreen-camera-effects/colorful-fx-44845?aid=1101l4bPZ&utm_source=aff

\n

3\u3001Mega-Fiers - Asset Store\uff1a\u662f\u4e00\u4e2a\u53ef\u4ee5\u8ba9 Mesh \u53d1\u751f\u7684\u5f62\u53d8\u7684\u63d2\u4ef6\u3002\nhttps://assetstore.unity.com/packages/tools/modeling/mega-fiers-644?aid=1101l4bPZ&utm_source=aff

\n

4\u3001Surforge - Asset Store\uff1a\u80fd\u591f\u5e2e\u4f60\u5728 Unity \u5185\u90e8\u5feb\u901f\u5236\u4f5c 3D \u6a21\u578b\u7684 texture\u3002\nhttps://assetstore.unity.com/packages/tools/utilities/surforge-79171

\n

5\u3001NGUI: Next-Gen UI - Asset Store\uff1aUnity \u4e2d\u5236\u4f5c UI \u7684\u6700\u5f3a\u63d2\u4ef6\uff0c\u5f53\u7136\u73b0\u5728 Unity \u6709\u81ea\u5df1\u7684 UGUI \u4e86\u3002\nhttps://assetstore.unity.com/packages/tools/gui/ngui-next-gen-ui-2413?aid=1101l4bPZ&utm_source=aff

\n

6\u3001Octave3D-Level Design - Asset Store\uff1a\u5e2e\u52a9 Unity \u5f00\u53d1\u8005\u5236\u4f5c\u5173\u5361\u3002\nhttps://assetstore.unity.com/packages/tools/level-design/octave3d-level-design-45021?aid=1101l4bPZ&utm_source=aff

\n

7\u3001UBER - Standard Shader Ultra - Asset Stor\uff1a\u53ef\u4ee5\u5e2e\u52a9\u5f00\u53d1\u8005\u5236\u4f5c 3A \u7ea7\u522b\u7684 shader\u3002\nhttps://assetstore.unity.com/packages/vfx/shaders/uber-standard-shader-ultra-39959?aid=1101l4bPZ&utm_source=aff

\n

8\u3001UMotion Pro - Animation Editor - Asset Store\n\uff1a\u662f Unity \u4e2d\u4e00\u6b3e\u975e\u5e38\u4f18\u79c0\u7684\u52a8\u753b\u5236\u4f5c\u63d2\u4ef6\u3002\nhttps://assetstore.unity.com/packages/tools/animation/umotion-pro-animation-editor-95991?aid=1101l4bPZ&utm_source=aff

\n

9\u3001Behavior Designer - Behavior Trees for Everyone - Asset Store\uff1a\u53ef\u4ee5\u5e2e\u52a9 Unity \u5f00\u53d1\u8005\u5236\u4f5c AI \u7684\u884c\u4e3a\u6811\u3002\nhttps://assetstore.unity.com/packages/tools/visual-scripting/behavior-designer-behavior-trees-for-everyone-15277?aid=1101l4bPZ&utm_source=aff

\n

11\u3001Mesh Baker - Asset Store\uff1a\u53ef\u4ee5\u7528\u6765\u5408\u5e76 Mesh \u548c Materials\uff0c\u8fd9\u6837\u53ef\u4ee5\u964d\u4f4e\u6e38\u620f\u5bf9\u5185\u5b58\u548c\u663e\u5361\u7684\u6d88\u8017\u3002\nhttps://assetstore.unity.com/packages/tools/modeling/mesh-baker-5017?aid=1101l4bPZ&utm_source=aff

\n

\u4e94\u3001\u5236\u4f5c 2D \u6e38\u620f\u7684\u63d2\u4ef6\n1\u3001Rex Engine: Classic 2D Platformer Engine - Asset Store\uff1a\u662f\u4e00\u6b3e\u5728 Unity \u5185\u90e8\u4e13\u95e8\u5236\u4f5c 2D \u5e73\u53f0\u6e38\u620f\u7684\u6e38\u620f\u5f15\u64ce\u3002\nhttps://assetstore.unity.com/packages/templates/systems/rex-engine-advanced-2d-game-engine-92333

\n

2\u3001Platformer PRO 2 - Asset Store\uff1a\u662f\u4e00\u6b3e\u5236\u4f5c 2D/2.5D \u7684\u5e73\u53f0\u6e38\u620f\u5f15\u64ce\uff0c\u5185\u90e8\u96c6\u6210\u4e86\u5927\u91cf\u529f\u80fd\uff0c\u5305\u62ec\u8df3\u8dc3\u7b49\u8fd0\u52a8\u7cfb\u7edf\u3002\nhttps://assetstore.unity.com/packages/templates/systems/platformer-pro-2-140510?aid=1101l4bPZ&utm_source=aff

\n

3\u3001Corgi Engine - 2D + 2.5D Platformer - Asset Store\uff1a\u662f\u4e00\u6b3e\u5236\u4f5c 2D/2.5D \u7684\u5e73\u53f0\u6e38\u620f\u5f15\u64ce\uff0c\u5185\u90e8\u96c6\u6210\u4e86\u82e5\u5e72\u6709\u8da3\u7684\u6e38\u620f\uff0cCorgi Engine \u5f25\u8865\u4e86 Unity \u5236\u4f5c 2D \u6e38\u620f\u7684\u77ed\u677f\u3002\nhttps://assetstore.unity.com/packages/templates/systems/corgi-engine-2d-2-5d-platformer-26617?aid=1101l4bPZ&utm_source=aff

\n

4\u3001TopDown Engine - Asset Store\uff1aTopDown Engine \u548c Corgi Engine \u6765\u81ea\u540c\u4e00\u5f00\u53d1\u8005\uff0c\u662f\u5236\u4f5c 2D/3D \u52a8\u4f5c\u7c7b\u6e38\u620f\u7684\u6700\u4f73\u5f15\u64ce\u3002\nhttps://assetstore.unity.com/packages/templates/systems/topdown-engine-89636?aid=1101l4bPZ&utm_source=aff

\n

6\u3001DOTween Pro - Asset Store\uff1aDOTween Pro \u662f\u4e00\u6b3e\u5236\u4f5c\u52a8\u753b\u548c\u6e10\u53d8\u72b6\u6001\u7684\u63d2\u4ef6\u3002\nhttps://assetstore.unity.com/packages/tools/visual-scripting/dotween-pro-32416?aid=1101l4bPZ&utm_source=aff

\n

7\u3001Fingers - Touch Gestures for Unity - Asset Store\uff1aFingers Touch Gestures \u662f\u4e00\u6b3e\u5904\u7406\u5904\u7406\u624b\u52bf\u8f93\u5165\u7684\u63d2\u4ef6\uff0c\u5bf9\u624b\u673a\u6e38\u620f\u5236\u4f5c\u5f88\u6709\u5fc5\u8981\u3002\nhttps://assetstore.unity.com/packages/tools/input-management/fingers-touch-gestures-for-unity-41076?aid=1101l4bPZ&utm_source=aff

\n

\u516d\u3001\u73af\u5883\u3001\u5730\u5f62&\u4e16\u754c\u6784\u5efa\u7c7b\u63d2\u4ef6\n1\u3001World Creator Professional - Asset Store\uff1aWorld Creator \u662f\u4e00\u6b3e\u5236\u4f5c 3D \u771f\u5b9e\u5730\u5f62\u7684\u7684\u4e13\u4e1a\u63d2\u4ef6\u3002\nhttps://assetstore.unity.com/packages/tools/terrain/world-creator-professional-55073?aid=1101l4bPZ&utm_source=aff

\n

2\u3001TerrainComposer 2 - Asset Store\uff1aTerrainComposer 2 \u662f\u4e00\u6b3e\u5229\u7528\u8282\u70b9\u5236\u4f5c\u5730\u5f62\u7684\u63d2\u4ef6\u3002\u5f00\u53d1\u8005\u7528\u5b83\u53ef\u4ee5\u5f88\u5bb9\u6613\u7684\u5236\u4f5c\u60ca\u8273\u7684\u5730\u5f62\u3002\nhttps://assetstore.unity.com/packages/tools/terrain/terrain-composer-2-65563

\n

3\u3001Fantasy Environment - Asset Store\uff1aFantasy Environment \u5305\u542b\u4e86\u5927\u91cf\u7684\u5e7b\u60f3\u98ce\u683c\u7684\u6e38\u620f\u7d20\u6750\u3002\nhttps://assetstore.unity.com/packages/3d/environments/polyquest-worlds-full-pack-vol-1-74631?aid=1101l4bPZ&utm_source=aff

\n

4\u3001Polyquest Worlds Full Pack Vol.1 - Asset Store\uff1aPolyquest Worlds \u5305\u542b\u4e86\u8d85\u591a\u3001\u8d85\u9ad8\u8d28\u91cf\u7684 Low Poly \u98ce\u683c\u7d20\u6750\uff0c\u624b\u673a\u6e38\u620f\u548c VR \u6e38\u620f\u90fd\u80fd\u5f88\u597d\u7684\u8fd0\u884c\u8be5\u63d2\u4ef6\u91cc\u7684\u7d20\u6750\u3002\nhttps://assetstore.unity.com/packages/3d/environments/polyquest-worlds-full-pack-vol-1-74631?aid=1101l4bPZ&utm_source=aff

\n

5\u3001MapMagic World Generator - Asset Store\uff1aMapMagic World Generator \u4e5f\u662f\u4e00\u6b3e\u57fa\u4e8e\u8282\u70b9\u5236\u4f5c\u5730\u5f62\u7684\u63d2\u4ef6\u3002\nhttps://assetstore.unity.com/packages/tools/terrain/mapmagic-world-generator-56762?aid=1101l4bPZ&utm_source=aff

\n

6\u3001Gaia - Asset Store\uff1aGaia \u662f\u4e00\u6b3e\u4e00\u7ad9\u5f0f\u5730\u5f62\u5236\u4f5c\u63d2\u4ef6\u3002\nhttps://assetstore.unity.com/packages/tools/terrain/gaia-terrain-scene-generator-42618

\n

\u539f\u6587\u94fe\u63a5\uff1a https://connect.unity.com/p/unity3d-chang-yong-cha-jian-hui-zong-1?app=true\n\u66f4\u591a\u5e72\u8d27\u8d44\u6e90\uff0c\u8bf7\u6233\u4e0a\u65b9\u94fe\u63a5\uff0c\u4e0b\u8f7d Unity \u5b98\u65b9 app \uff01

\n" }, { "author": { "url": "member/unn", "name": "unn", "avatar": "https://cdn.v2ex.com/gravatar/cfff9ca626c77fa9bdd8a8e7eb3048d0?s=73&d=retro" }, "url": "t/638732", "title": "\u5728 Unity \u5b9e\u73b0\u6e38\u620f\u547d\u4ee4\u6a21\u5f0f", "id": "t/638732", "date_published": "2020-01-17T06:20:45+00:00", "content_html": "

\u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u5728 Unity \u901a\u8fc7\u4f7f\u7528\u547d\u4ee4\u6a21\u5f0f\u5b9e\u73b0\u56de\u653e\u529f\u80fd\uff0c\u64a4\u9500\u529f\u80fd\u548c\u91cd\u505a\u529f\u80fd\uff0c\u4f60\u53ef\u4ee5\u4f7f\u7528\u8be5\u65b9\u6cd5\u6765\u5f3a\u5316\u81ea\u5df1\u7684\u7b56\u7565\u7c7b\u6e38\u620f\u3002

\n

\u539f\u535a\u5730\u5740\uff1ahttps://www.raywenderlich.com/3067863-implementing-the-command-pattern-in-unity

\n

\u539f\u6587\u94fe\u63a5\uff1ahttps://connect.unity.com/p/zai-unityshi-xian-you-xi-ming-ling-mo-shi?app=true

\n

\u4f5c\u8005\uff1aNajmm Shora \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\uff1a20 \u5206\u949f

\n

Unity \u7248\u672c\uff1aUnity 2019.1

\n

\u4f60\u662f\u5426\u60f3\u77e5\u9053\u300a\u8d85\u7ea7\u98df\u8089\u7537\u5b69\u300b(Super Meat Boy)\u7b49\u6e38\u620f\u662f\u5982\u4f55\u5b9e\u73b0\u56de\u653e\u529f\u80fd\u7684\uff1f\u5176\u4e2d\u4e00\u79cd\u65b9\u6cd5\u662f\u6267\u884c\u548c\u73a9\u5bb6\u5b8c\u5168\u76f8\u540c\u7684\u8f93\u5165\u64cd\u4f5c\uff0c\u8fd9\u6837\u610f\u5473\u7740\u8f93\u5165\u9700\u8981\u4fdd\u5b58\u8d77\u6765\u3002\u547d\u4ee4\u6a21\u5f0f\u53ef\u4ee5\u5b9e\u73b0\u8be5\u529f\u80fd\uff0c\u4ee5\u53ca\u66f4\u591a\u5176\u5b83\u529f\u80fd\u3002

\n

\u5982\u679c\u5e0c\u671b\u5728\u7b56\u7565\u6e38\u620f\u91cc\u5b9e\u73b0\u64a4\u9500\u548c\u91cd\u505a\u529f\u80fd\uff0c\u547d\u4ee4\u6a21\u5f0f\u4e5f\u975e\u5e38\u5b9e\u7528\u3002

\n

\u5728\u672c\u6559\u7a0b\u4e2d\uff0c\u6211\u4eec\u4f1a\u4f7f\u7528 C#\u5b9e\u73b0\u547d\u4ee4\u6a21\u5f0f\uff0c\u7136\u540e\u4f7f\u7528\u547d\u4ee4\u6a21\u5f0f\u6765\u904d\u5386 3D \u8ff7\u5bab\u4e2d\u7684\u673a\u5668\u4eba\uff08 bot\uff0c \u6587\u4e2d bot\uff0c\u673a\u5668\u4eba\u4ea4\u66ff\u51fa\u73b0\uff0c\u8bf7\u6574\u7406\u4e00\u4e0b\uff09\u89d2\u8272\u3002\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u4f1a\u5b66\u4e60\u5230\u4ee5\u4e0b\u5185\u5bb9\uff1a

\n\n

\u5907\u6ce8\uff1a\u9605\u8bfb\u672c\u6587\u9700\u8981\u719f\u6089 Unity \u7684\u4f7f\u7528\uff0c\u5e76\u4e14\u62e5\u6709\u5bf9 C#\u6709\u4e00\u5b9a\u7684\u4e86\u89e3\u3002\u672c\u6559\u7a0b\u4f7f\u7528 Unity 2019.1 \u548c C# 7\u3002

\n

\u51c6\u5907\u8fc7\u7a0b

\n

\u8ddf\u968f\u672c\u6559\u7a0b\u8fdb\u884c\u5b66\u4e60\u65f6\uff0c\u8bf7\u4e0b\u8f7d\u6587\u672b\u94fe\u63a5\u7684\u9879\u76ee\u7d20\u6750\u6587\u4ef6\u3002\u89e3\u538b\u6587\u4ef6\uff0c\u5728 Unity \u4e2d\u6253\u5f00 Starter \u9879\u76ee\u3002

\n

\u6253\u5f00 RW/Scenes \u6587\u4ef6\u5939\uff0c\u6253\u5f00 Main \u573a\u666f\u3002\u6211\u4eec\u4f1a\u6ce8\u610f\u5230\uff0c\u573a\u666f\u4e2d\u6709\u4e00\u4e2a\u8ff7\u5bab\u548c\u673a\u5668\u4eba\uff0c\u65c1\u8fb9\u6709\u7ec8\u7aef UI \u663e\u793a\u6307\u4ee4\u3002\u5730\u9762\u4e0a\u6709\u7f51\u683c\uff0c\u5f53\u73a9\u5bb6\u5728\u8ff7\u5bab\u4e2d\u79fb\u52a8\u673a\u5668\u4eba\u65f6\uff0c\u8fd9\u4e9b\u7f51\u683c\u6709\u52a9\u4e8e\u73a9\u5bb6\u8fdb\u884c\u89c2\u5bdf\u3002

\n

\u5355\u51fb Play \u6309\u94ae\u540e\uff0c\u6211\u4eec\u53d1\u73b0\u6307\u4ee4\u4e0d\u4f1a\u8fdb\u884c\u5de5\u4f5c\uff0c\u8fd9\u662f\u56e0\u4e3a\u6211\u4eec\u8fd8\u6ca1\u6dfb\u52a0\u8be5\u529f\u80fd\uff0c\u6211\u4eec\u5c06\u5728\u6559\u7a0b\u4e2d\u6dfb\u52a0\u529f\u80fd\u3002 \u573a\u666f\u4e2d\u6700\u6709\u8da3\u7684\u90e8\u5206\u662f Bot \u6e38\u620f\u5bf9\u8c61\uff0c\u5728\u5c42\u7ea7\u7a97\u53e3\u5355\u51fb\u9009\u4e2d\u8be5\u5bf9\u8c61\u3002

\n

\u5728\u68c0\u89c6\u7a97\u53e3\u67e5\u770b\u8be5\u5bf9\u8c61\uff0c\u6211\u4eec\u770b\u5230\u5b83\u5e26\u6709 Bot \u7ec4\u4ef6\u3002\u6211\u4eec\u4f1a\u5728\u53d1\u51fa\u8f93\u5165\u547d\u4ee4\u65f6\u4f7f\u7528\u8be5\u7ec4\u4ef6\u3002

\n

\u4e86\u89e3 Bot \u5bf9\u8c61\u7684\u903b\u8f91

\n

\u6253\u5f00 RW/Scripts \u6587\u4ef6\u5939\uff0c\u5728\u4ee3\u7801\u7f16\u8f91\u5668\u6253\u5f00 Bot \u811a\u672c\u3002\u6211\u4eec\u4e0d\u5fc5\u4e86\u89e3 Bot \u811a\u672c\u4f1a\u505a\u4ec0\u4e48\uff0c\u4f46\u8981\u6ce8\u610f\u5176\u4e2d\u7684 Move \u65b9\u6cd5\u548c Shoot \u65b9\u6cd5\u3002\u6211\u4eec\u4e5f\u4e0d\u7528\u77e5\u9053\u4e8c\u4e2a\u65b9\u6cd5\u4e2d\u7684\u4ee3\u7801\u4f5c\u7528\uff0c\u4f46\u9700\u8981\u4e86\u89e3\u5982\u4f55\u4f7f\u7528\u4e8c\u4e2a\u65b9\u6cd5\u3002

\n

\u6211\u4eec\u53d1\u73b0\uff0cMove \u65b9\u6cd5\u4f1a\u63a5\u6536\u4e00\u4e2a\u7c7b\u578b\u4e3a CardinalDirection \u7684\u8f93\u5165\u53c2\u6570\u3002CardinalDirection \u662f\u4e00\u4e2a\u679a\u4e3e\uff0c\u7c7b\u578b\u4e3a CardinalDirection \u7684\u679a\u4e3e\u5bf9\u8c61\u53ef\u4ee5\u4e3a Up\uff0cDown\uff0cRight \u6216 Left\u3002\u6839\u636e\u6240\u9009\u7684 CardinalDirection \u4e0d\u540c\uff0c\u673a\u5668\u4eba\u4f1a\u5728\u7f51\u683c\u4e0a\u671d\u7740\u5bf9\u5e94\u65b9\u5411\u79fb\u52a8\u4e00\u4e2a\u7f51\u683c\u3002

\n

Shoot \u65b9\u6cd5\u53ef\u4ee5\u8ba9\u673a\u5668\u4eba\u53d1\u5c04\u70ae\u5f39\uff0c\u6467\u6bc1\u9ec4\u8272\u7684\u5899\u4f53\uff0c\u4f46\u5bf9\u5176\u5b83\u5899\u4f53\u6beb\u65e0\u4f5c\u7528\u3002

\n

\u73b0\u5728\u67e5\u770b ResetToLastCheckpoint \u65b9\u6cd5\uff0c\u4e3a\u4e86\u4e86\u89e3\u5b83\u7684\u529f\u80fd\uff0c\u6211\u4eec\u8981\u89c2\u5bdf\u8ff7\u5bab\u3002\u5728\u8ff7\u5bab\u4e2d\uff0c\u6709\u4e00\u4e9b\u70b9\u88ab\u79f0\u4e3a\u68c0\u67e5\u70b9\u3002\u4e3a\u4e86\u901a\u8fc7\u8ff7\u5bab\uff0c\u673a\u5668\u4eba\u5e94\u8be5\u5230\u8fbe\u7eff\u8272\u68c0\u67e5\u70b9\u3002

\n

\u5728\u673a\u5668\u4eba\u7a7f\u8fc7\u65b0\u68c0\u67e5\u70b9\u65f6\uff0c\u8be5\u70b9\u4f1a\u6210\u4e3a\u673a\u5668\u4eba\u7684\u6700\u540e\u68c0\u67e5\u70b9\u3002ResetToLastCheckpoint \u65b9\u6cd5\u4f1a\u91cd\u7f6e\u673a\u5668\u4eba\u7684\u4f4d\u7f6e\u5230\u6700\u540e\u68c0\u67e5\u70b9\u3002

\n

\u6211\u4eec\u76ee\u524d\u65e0\u6cd5\u4f7f\u7528\u8fd9\u4e9b\u65b9\u6cd5\uff0c\u4f46\u6211\u4eec\u5f88\u5feb\u5c31\u4f1a\u7528\u5230\u4e86\u3002\u9996\u5148\uff0c\u6211\u4eec\u8981\u4ecb\u7ecd\u547d\u4ee4\u8bbe\u8ba1\u6a21\u5f0f\u3002

\n

\u547d\u4ee4\u8bbe\u8ba1\u6a21\u5f0f\u4ecb\u7ecd

\n

\u547d\u4ee4\u6a21\u5f0f\u662f Erich Gamma\u3001Richard Helm\u3001Ralph Johnson \u548c John Vlissides \u7f16\u5199\u7684\u300a\u8bbe\u8ba1\u6a21\u5f0f\uff1a\u53ef\u590d\u7528\u9762\u5411\u5bf9\u8c61\u8f6f\u4ef6\u7684\u57fa\u7840\u300b\uff08 Design Patterns: Elements of Reusable Object-Oriented Software \uff09

\n

\u4e66\u4e2d\u4ecb\u7ecd\u7684 23 \u79cd\u8bbe\u8ba1\u6a21\u5f0f\u4e4b\u4e00\u3002 \u4e66\u4e2d\u5199\u9053\uff1a\u547d\u4ee4\u6a21\u5f0f\u628a\u8bf7\u6c42\u5c01\u88c5\u4e3a\u5bf9\u8c61\uff0c\u4ece\u800c\u5141\u8bb8\u6211\u4eec\u4f7f\u7528\u4e0d\u540c\u7684\u8bf7\u6c42\uff0c\u961f\u5217\u6216\u65e5\u5fd7\u8bf7\u6c42\uff0c\u6765\u53c2\u6570\u5316\u5904\u7406\u5176\u5b83\u5bf9\u8c61\uff0c\u5e76\u652f\u6301\u53ef\u64a4\u9500\u7684\u64cd\u4f5c\u3002

\n

\u8fd9\u4e2a\u5b9a\u4e49\u786e\u5b9e\u5bf9\u8bfb\u8005\u6765\u8bf4\u5e76\u4e0d\u53cb\u597d\uff0c\u6211\u4eec\u4e0b\u9762\u8be6\u7ec6\u8bb2\u89e3\u4e00\u4e0b\u3002 \u5c01\u88c5\u662f\u6307\u65b9\u6cd5\u8c03\u7528\u5c01\u88c5\u4e3a\u5bf9\u8c61\u7684\u8fc7\u7a0b\u3002

\n

\u53c2\u6570\u5316\u5176\u5b83\u5bf9\u8c61\u6307\u7684\u662f\uff1a\u5c01\u88c5\u7684\u65b9\u6cd5\u53ef\u4ee5\u6839\u636e\u8f93\u5165\u53c2\u6570\u6765\u5904\u7406\u591a\u4e2a\u5bf9\u8c61\u3002\n\u8bf7\u6c42\u7684\u961f\u5217\u6307\u7684\u662f\uff1a\u5f97\u5230\u7684\u201c\u547d\u4ee4\u201d\u53ef\u4ee5\u5728\u6267\u884c\u524d\u548c\u5176\u5b83\u547d\u4ee4\u4e00\u8d77\u5b58\u50a8\u3002

\n

\u201cundoable\u201d\uff08\u53ef\u64a4\u9500\uff09\u5728\u6b64\u4e0d\u662f\u6307\u65e0\u6cd5\u5b9e\u73b0\u7684\u4e1c\u897f\uff0c\u800c\u662f\u6307\u53ef\u4ee5\u901a\u8fc7\u64a4\u9500\u529f\u80fd\u6062\u590d\u7684\u64cd\u4f5c\u3002

\n

\u90a3\u4e48\u8fd9\u4e9b\u5185\u5bb9\u600e\u4e48\u7528\u4ee3\u7801\u8868\u793a\u5462\uff1f

\n

\u7b80\u5355\u6765\u8bf4\uff0cCommand \u7c7b\u4f1a\u6709 Execute \u65b9\u6cd5\uff0c\u8be5\u65b9\u6cd5\u53ef\u4ee5\u63a5\u6536\u547d\u4ee4\u5904\u7406\u7684\u5bf9\u8c61\uff0c\u8be5\u5bf9\u8c61\u53eb Receiver\uff0c\u7528\u4f5c\u8f93\u5165\u53c2\u6570\u3002\u56e0\u6b64\uff0cExecute \u65b9\u6cd5\u4f1a\u7531 Command \u7c7b\u8fdb\u884c\u5c01\u88c5\u3002

\n

\u6700\u540e\uff0c\u4e3a\u4e86\u6267\u884c\u547d\u4ee4\uff0cExecute \u65b9\u6cd5\u9700\u8981\u8fdb\u884c\u8c03\u7528\u3002\u89e6\u53d1\u6267\u884c\u8fc7\u7a0b\u7684\u7c7b\u53eb\u4f5c Invoker\u3002

\n

\u73b0\u5728\uff0c\u8be5\u9879\u76ee\u5305\u542b\u540d\u53eb BotCommand \u7684\u7a7a\u7c7b\u3002\u5728\u4e0b\u4e2a\u90e8\u5206\uff0c\u6211\u4eec\u4f1a\u5b8c\u6210\u8981\u6c42\uff0c\u5b9e\u73b0\u4e4b\u524d\u7684\u529f\u80fd\uff0c\u8ba9 Bot \u5bf9\u8c61\u53ef\u4ee5\u4f7f\u7528\u547d\u4ee4\u6a21\u5f0f\u6267\u884c\u52a8\u4f5c\u3002

\n

\u79fb\u52a8 Bot \u5bf9\u8c61

\n

\u5b9e\u73b0\u547d\u4ee4\u6a21\u5f0f

\n

\u5728\u8fd9\u90e8\u5206\uff0c\u6211\u4eec\u4f1a\u5b9e\u73b0\u547d\u4ee4\u6a21\u5f0f\u3002\u5b9e\u73b0\u8be5\u6a21\u5f0f\u6709\u591a\u79cd\u65b9\u6cd5\u3002\u672c\u6559\u7a0b\u4f1a\u4ecb\u7ecd\u5176\u4e2d\u4e00\u79cd\u65b9\u6cd5\u3002

\n

\u9996\u5148\u6253\u5f00 RW/Scripts \u6587\u4ef6\u5939\uff0c\u5728\u7f16\u8f91\u5668\u6253\u5f00 BotCommand \u811a\u672c\u3002BotCommand \u7c7b\u6b64\u65f6\u5e94\u8be5\u662f\u7a7a\u767d\u7684\uff0c\u6211\u4eec\u4f1a\u7ed9\u5b83\u52a0\u5165\u4ee3\u7801\u3002

\n

\u5728\u8be5\u7c7b\u4e2d\u7c98\u8d34\u4e0b\u5217\u4ee3\u7801\uff1a

\n
//1\nprivate readonly string commandName;\n\n//2\npublic BotCommand(ExecuteCallback executeMethod, string name)\n{\n Execute = executeMethod;\n commandName = name;\n}\n\n//3\npublic delegate void ExecuteCallback(Bot bot);\n\n//4\npublic ExecuteCallback Execute { get; private set; }\n\n//5\npublic override string ToString()\n{\n return commandName;\n}\n
\n

\u4e0b\u9762\u8bb2\u89e3\u8fd9\u4e9b\u4ee3\u7801\u3002

\n
    \n
  1. \n

    commandName \u53d8\u91cf\u7528\u4e8e\u5b58\u50a8\u7528\u6237\u53ef\u4ee5\u7406\u89e3\u7684\u547d\u4ee4\u540d\u79f0\u3002\u5b83\u5bf9\u4e8e\u8be5\u6a21\u5f0f\u5e76\u4e0d\u91cd\u8981\uff0c\u4f46\u662f\u6211\u4eec\u4f1a\u5728\u540e\u9762\u9700\u8981\u5230\u5b83\u3002

    \n
  2. \n
  3. \n

    BotCommand \u6784\u9020\u51fd\u6570\u4f1a\u63a5\u6536\u4e00\u4e2a\u51fd\u6570\u548c\u4e00\u4e2a\u5b57\u7b26\u4e32\u3002\u5b83\u4f1a\u5e2e\u52a9\u6211\u4eec\u8bbe\u7f6e Command \u5bf9\u8c61\u7684 Execute \u65b9\u6cd5\u548c\u540d\u79f0\u3002

    \n
  4. \n
  5. \n

    ExecuteCallback \u59d4\u6258\u4f1a\u5b9a\u4e49\u5c01\u88c5\u65b9\u6cd5\u7684\u7c7b\u578b\u3002\u5c01\u88c5\u65b9\u6cd5\u4f1a\u8fd4\u56de void \u7c7b\u578b\uff0c\u63a5\u6536\u7c7b\u578b\u4e3a Bot \uff08\u5373\u5e26\u6709 Bot \u7ec4\u4ef6\uff09\u7684\u5bf9\u8c61\u4f5c\u4e3a\u8f93\u5165\u53c2\u6570\u3002

    \n
  6. \n
  7. \n

    Execute \u5c5e\u6027\u4f1a\u5f15\u7528\u5c01\u88c5\u65b9\u6cd5\u3002\u6211\u4eec\u8981\u4f7f\u7528\u5b83\u6765\u8c03\u7528\u5c01\u88c5\u65b9\u6cd5\u3002

    \n
  8. \n
  9. \n

    ToString \u65b9\u6cd5\u4f1a\u88ab\u91cd\u5199\uff0c\u8fd4\u56de commandName \u5b57\u7b26\u4e32\uff0c\u8be5\u65b9\u6cd5\u4e3b\u8981\u5728 UI \u4e2d\u4f7f\u7528\u3002

    \n
  10. \n
\n

\u4fdd\u5b58\u6539\u52a8\uff0c\u73b0\u5728\u6211\u4eec\u5df2\u7ecf\u5b9e\u73b0\u4e86\u547d\u4ee4\u6a21\u5f0f\u3002

\n

\u63a5\u4e0b\u6765\u8981\u4f7f\u7528\u547d\u4ee4\u6a21\u5f0f\u3002

\n

\u521b\u5efa\u547d\u4ee4

\n

\u4ece RW/Scripts \u6587\u4ef6\u5939\u6253\u5f00 BotInputHandler \u811a\u672c\u3002

\n

\u6211\u4eec\u4f1a\u5728\u6b64\u521b\u5efa BotCommand \u7684\u4e94\u4e2a\u5b9e\u4f8b\u3002\u8fd9\u4e9b\u5b9e\u4f8b\u4f1a\u5206\u522b\u5c01\u88c5\u65b9\u6cd5\uff0c\u4ece\u800c\u8ba9 Bot \u5bf9\u8c61\u5411\u4e0a\uff0c\u4e0b\uff0c\u5de6\uff0c\u53f3\u79fb\u52a8\uff0c\u8fd8\u53ef\u4ee5\u8ba9\u673a\u5668\u4eba\u53d1\u5c04\u70ae\u5f39\u3002

\n

\u590d\u5236\u7c98\u8d34\u4e0b\u5217\u4ee3\u7801\u5230 BotCommand \u7c7b\u4e2d\uff1a

\n
//1\nprivate static readonly BotCommand MoveUp =\n new BotCommand(delegate (Bot bot) { bot.Move(CardinalDirection.Up); }, \"moveUp\");\n\n//2\nprivate static readonly BotCommand MoveDown =\n new BotCommand(delegate (Bot bot) { bot.Move(CardinalDirection.Down); }, \"moveDown\");\n\n//3\nprivate static readonly BotCommand MoveLeft =\n new BotCommand(delegate (Bot bot) { bot.Move(CardinalDirection.Left); }, \"moveLeft\");\n\n//4\nprivate static readonly BotCommand MoveRight =\n new BotCommand(delegate (Bot bot) { bot.Move(CardinalDirection.Right); }, \"moveRight\");\n\n//5\nprivate static readonly BotCommand Shoot =\n new BotCommand(delegate (Bot bot) { bot.Shoot(); }, \"shoot\");\n
\n

\u5728\u6bcf\u4e2a\u5b9e\u4f8b\u4e2d\uff0c\u90fd\u6709\u4e00\u4e2a\u533f\u540d\u65b9\u6cd5\u4f20\u5230\u6784\u9020\u51fd\u6570\u3002\u8be5\u533f\u540d\u65b9\u6cd5\u4f1a\u5c01\u88c5\u5728\u76f8\u5e94\u547d\u4ee4\u5bf9\u8c61\u4e4b\u4e2d\u3002\u6211\u4eec\u53d1\u73b0\uff0c\u6bcf\u4e2a\u533f\u540d\u65b9\u6cd5\u7684\u7b7e\u540d\u90fd\u7b26\u5408 ExecuteCallback \u59d4\u6258\u8bbe\u7f6e\u7684\u8981\u6c42\u3002

\n

\u6b64\u5916\uff0c\u6784\u9020\u51fd\u6570\u7684\u7b2c\u4e8c\u4e2a\u53c2\u6570\u662f\u4e00\u4e2a\u5b57\u7b26\u4e32\uff0c\u8868\u793a\u7528\u4e8e\u6307\u4ee3\u547d\u4ee4\u7684\u540d\u79f0\u3002\u8be5\u540d\u79f0\u4f1a\u901a\u8fc7\u547d\u4ee4\u5b9e\u4f8b\u7684 ToString \u65b9\u6cd5\u8fd4\u56de\uff0c\u5b83\u4f1a\u5728\u540e\u9762\u4e3a UI \u4f7f\u7528\u3002

\n

\u5728\u524d\u56db\u4e2a\u5b9e\u4f8b\u4e2d\uff0c\u533f\u540d\u65b9\u6cd5\u4f1a\u5728 Bot \u5bf9\u8c61\u4e0a\u8c03\u7528 Move \u65b9\u6cd5\u3002\u8be5\u65b9\u6cd5\u6709\u591a\u79cd\u53c2\u6570\u3002

\n

\u5bf9\u4e8e MoveUp\u3001MoveDown\u3001MoveLeft \u548c MoveRight \u547d\u4ee4\uff0c\u4f20\u5165 Move \u65b9\u6cd5\u7684\u53c2\u6570\u5206\u522b\u662f CardinalDirection.Up \uff0cCardinalDirection.Down\uff0cCardinalDirection.Left \u548c CardinalDirection.Right\u3002

\n

\u8fd9\u4e9b\u53c2\u6570\u5bf9\u5e94\u7740 Bot \u5bf9\u8c61\u7684\u4e0d\u540c\u79fb\u52a8\u65b9\u5411\uff0c\u8fd9\u5728\u547d\u4ee4\u8bbe\u8ba1\u6a21\u5f0f\u90e8\u5206\u4ecb\u7ecd\u90e8\u5206\u4e2d\u63d0\u5230\u8fc7\u3002

\n

\u6700\u540e\u5728\u7b2c\u4e94\u4e2a\u5b9e\u4f8b\u4e0a\uff0c\u533f\u540d\u65b9\u6cd5\u5728 Bot \u5bf9\u8c61\u8c03\u7528 Shoot \u65b9\u6cd5\u3002\u8fd9\u4f1a\u5728\u6267\u884c\u8be5\u547d\u4ee4\u65f6\uff0c\u8ba9\u673a\u5668\u4eba\u53d1\u5c04\u70ae\u5f39\u3002

\n

\u73b0\u5728\u6211\u4eec\u521b\u5efa\u4e86\u547d\u4ee4\uff0c\u8fd9\u4e9b\u547d\u4ee4\u9700\u8981\u5728\u7528\u6237\u53d1\u51fa\u8f93\u5165\u65f6\u8fdb\u884c\u8bbf\u95ee\u3002

\n

\u4e3a\u6b64\uff0c\u6211\u4eec\u8981\u628a\u4e0b\u5217\u4ee3\u7801\u590d\u5236\u7c98\u8d34\u5230 BotInputHandler \u4e2d\uff0c\u5b83\u7684\u4f4d\u7f6e\u5728\u547d\u4ee4\u5b9e\u4f8b\u4e0b\u65b9\uff1a

\n
public static BotCommand HandleInput()\n{\n if (Input.GetKeyDown(KeyCode.W))\n {\n return MoveUp;\n }\n else if (Input.GetKeyDown(KeyCode.S))\n {\n return MoveDown;\n }\n else if (Input.GetKeyDown(KeyCode.D))\n {\n return MoveRight;\n }\n else if (Input.GetKeyDown(KeyCode.A))\n {\n return MoveLeft;\n }\n else if (Input.GetKeyDown(KeyCode.F))\n {\n return Shoot;\n }\n\n return null;\n}\n
\n

HandleInput \u65b9\u6cd5\u4f1a\u6839\u636e\u7528\u6237\u7684\u6309\u952e\uff0c\u8fd4\u56de\u5355\u4e2a\u547d\u4ee4\u5b9e\u4f8b\u3002\u7ee7\u7eed\u4e0b\u4e00\u6b65\u524d\uff0c\u4fdd\u5b58\u6539\u52a8\u5185\u5bb9\u3002

\n

\u4f7f\u7528\u547d\u4ee4

\n

\u73b0\u5728\u6211\u4eec\u8981\u4f7f\u7528\u521b\u5efa\u597d\u7684\u547d\u4ee4\u3002\u6253\u5f00 RW/Scripts \u6587\u4ef6\u5939\uff0c\u5728\u4ee3\u7801\u7f16\u8f91\u5668\u6253\u5f00 SceneManager \u811a\u672c\u3002\u5728\u8be5\u7c7b\u4e2d\uff0c\u6211\u4eec\u4f1a\u53d1\u73b0\u6709 UIManager \u7c7b\u578b\u7684 uiManager \u53d8\u91cf\u7684\u5f15\u7528\u3002

\n

UIManager \u7c7b\u4e3a\u573a\u666f\u4e2d\u7684\u7ec8\u7aef UI \u63d0\u4f9b\u4e86\u5b9e\u7528\u7684\u529f\u80fd\u6027\u65b9\u6cd5\u3002\u5728 UIManager \u7c7b\u7684\u65b9\u6cd5\u4f7f\u7528\u65f6\uff0c\u6211\u4eec\u4f1a\u4ecb\u7ecd\u65b9\u6cd5\u7684\u7528\u9014\uff0c\u4f46\u5728\u672c\u6587\u4e2d\uff0c\u6211\u4eec\u4e0d\u5fc5\u77e5\u9053\u5b83\u5185\u90e8\u7684\u5de5\u4f5c\u65b9\u5f0f\u3002

\n

\u6b64\u5916\uff0cbot \u53d8\u91cf\u5f15\u7528\u4e86\u9644\u52a0\u5230 Bot \u5bf9\u8c61\u7684 Bot \u7ec4\u4ef6\u3002

\n

\u73b0\u5728\u628a\u4e0b\u5217\u4ee3\u7801\u6dfb\u52a0\u7ed9 SceneManager \u7c7b\uff0c\u66ff\u6362\u4ee3\u7801\u6ce8\u91ca //1 \u7684\u5df2\u6709\u4ee3\u7801\uff1a

\n
//1\nprivate List<BotCommand> botCommands = new List<BotCommand>();\nprivate Coroutine executeRoutine;\n\n//2\nprivate void Update()\n{\n if (Input.GetKeyDown(KeyCode.Return))\n {\n ExecuteCommands();\n }\n else\n {\n CheckForBotCommands();\n } \n}\n\n//3\nprivate void CheckForBotCommands()\n{\n var botCommand = BotInputHandler.HandleInput();\n if (botCommand != null && executeRoutine == null)\n {\n AddToCommands(botCommand);\n }\n}\n\n//4\nprivate void AddToCommands(BotCommand botCommand)\n{\n botCommands.Add(botCommand);\n //5\n uiManager.InsertNewText(botCommand.ToString());\n}\n\n//6\nprivate void ExecuteCommands()\n{\n if (executeRoutine != null)\n {\n return;\n }\n\n executeRoutine = StartCoroutine(ExecuteCommandsRoutine());\n}\n\nprivate IEnumerator ExecuteCommandsRoutine()\n{\n Debug.Log(\"Executing...\");\n //7\n uiManager.ResetScrollToTop();\n\n //8\n for (int i = 0, count = botCommands.Count; i < count; i++)\n {\n var command = botCommands[i];\n command.Execute(bot);\n //9\n uiManager.RemoveFirstTextLine();\n yield return new WaitForSeconds(CommandPauseTime);\n }\n\n //10\n botCommands.Clear();\n\n bot.ResetToLastCheckpoint();\n\n executeRoutine = null;\n}\n
\n

\u8fd9\u91cc\u7684\u4ee3\u7801\u5f88\u591a\uff0c\u901a\u8fc7\u4f7f\u7528\u8fd9\u4e9b\u4ee3\u7801\uff0c\u6211\u4eec\u53ef\u4ee5\u5728\u6e38\u620f\u89c6\u56fe\u6b63\u5e38\u8fd0\u884c\u9879\u76ee\u3002

\n

\u4e4b\u540e\u6211\u4eec\u4f1a\u8bb2\u89e3\u8fd9\u4e9b\u4ee3\u7801\uff0c\u73b0\u5728\u5148\u4fdd\u5b58\u6539\u52a8\u3002

\n

\u8fd0\u884c\u6e38\u620f\uff0c\u6d4b\u8bd5\u547d\u4ee4\u6a21\u5f0f

\n

\u73b0\u5728\u8981\u6784\u5efa\u6240\u6709\u5185\u5bb9\uff0c\u5728 Unity \u7f16\u8f91\u5668\u6309\u4e0b Play \u6309\u94ae\u3002

\n

\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528 WASD \u6309\u952e\u8f93\u5165\u65b9\u5411\u547d\u4ee4\u3002\u8f93\u5165\u5c04\u51fb\u6a21\u5f0f\u65f6\uff0c\u4f7f\u7528 F \u952e\u3002\u6700\u540e\uff0c\u6309\u4e0b\u56de\u8f66\u952e\u6267\u884c\u547d\u4ee4\u3002

\n

\u5907\u6ce8\uff1a\u5728\u6267\u884c\u8fc7\u7a0b\u7ed3\u675f\u524d\uff0c\u6211\u4eec\u65e0\u6cd5\u8f93\u5165\u66f4\u591a\u547d\u4ee4\u3002

\n

\u73b0\u5728\u89c2\u5bdf\u4ee3\u7801\u6dfb\u52a0\u5230\u7ec8\u7aef UI \u7684\u65b9\u5f0f\u3002\u547d\u4ee4\u4f1a\u901a\u8fc7\u5b83\u4eec\u5728 UI \u4e2d\u7684\u540d\u79f0\u8868\u793a\uff0c\u8be5\u6548\u679c\u901a\u8fc7 commandName \u53d8\u91cf\u5b9e\u73b0\u3002

\n

\u6211\u4eec\u8fd8\u4f1a\u6ce8\u610f\u5230\uff0c\u5728\u6267\u884c\u524d\uff0cUI \u4f1a\u6eda\u52a8\u5230\u9876\u90e8\uff0c\u6267\u884c\u540e\u7684\u4ee3\u7801\u884c\u4f1a\u88ab\u79fb\u9664\u3002

\n

\u8be6\u7ec6\u8bb2\u89e3\u547d\u4ee4

\n

\u73b0\u5728\u6211\u4eec\u8bb2\u89e3\u5728\u4f7f\u7528\u547d\u4ee4\u90e8\u5206\u6dfb\u52a0\u7684\u4ee3\u7801\uff1a

\n
    \n
  1. \n

    botCommands \u5217\u8868\u5b58\u50a8\u4e86 BotCommand \u5b9e\u4f8b\u7684\u5f15\u7528\u3002\u8003\u8651\u5230\u5185\u5b58\uff0c\u6211\u4eec\u53ea\u53ef\u4ee5\u521b\u5efa\u4e94\u4e2a\u547d\u4ee4\u5b9e\u4f8b\uff0c\u4f46\u6709\u591a\u4e2a\u5f15\u7528\u6307\u5411\u76f8\u540c\u7684\u547d\u4ee4\u3002\u6b64\u5916\uff0cexecuteCoroutine \u53d8\u91cf\u5f15\u7528\u4e86 ExecuteCommandsRoutine\uff0c\u540e\u8005\u4f1a\u5904\u7406\u547d\u4ee4\u7684\u6267\u884c\u8fc7\u7a0b\u3002

    \n
  2. \n
  3. \n

    \u5982\u679c\u7528\u6237\u6309\u4e0b\u56de\u8f66\u952e\uff0c\u66f4\u65b0\u68c0\u67e5\u7ed3\u679c\uff0c\u6b64\u65f6\u5b83\u4f1a\u8c03\u7528 ExecuteCommands\uff0c\u5426\u5219\u4f1a\u8c03\u7528 CheckForBotCommands\u3002

    \n
  4. \n
  5. \n

    CheckForBotCommands \u4f7f\u7528\u6765\u81ea BotInputHandler \u7684 HandleInput \u9759\u6001\u65b9\u6cd5\uff0c\u68c0\u67e5\u7528\u6237\u662f\u5426\u53d1\u51fa\u8f93\u5165\u4fe1\u606f\uff0c\u6b64\u65f6\u4f1a\u8fd4\u56de\u547d\u4ee4\u3002\u8fd4\u56de\u7684\u547d\u4ee4\u4f1a\u4f20\u9012\u5230 AddToCommands\u3002\u7136\u800c\uff0c\u5982\u679c\u547d\u4ee4\u88ab\u6267\u884c\u7684\u8bdd\uff0c\u5373\u5982\u679c executeRoutine \u4e0d\u662f\u7a7a\u7684\u8bdd\uff0c\u5b83\u4f1a\u76f4\u63a5\u8fd4\u56de\uff0c\u4e0d\u628a\u4efb\u4f55\u5185\u5bb9\u4f20\u9012\u7ed9 AddToCommands\u3002\u56e0\u6b64\uff0c\u7528\u6237\u5fc5\u987b\u7b49\u5f85\u6267\u884c\u8fc7\u7a0b\u5b8c\u6210\u3002

    \n
  6. \n
  7. \n

    AddToCommands \u7ed9\u8fd4\u56de\u7684\u547d\u4ee4\u5b9e\u4f8b\u6dfb\u52a0\u4e86\u65b0\u5f15\u7528\uff0c\u8fd4\u56de\u5230 botCommands\u3002

    \n
  8. \n
  9. \n

    UIManager \u7c7b\u7684 InsertNewText \u65b9\u6cd5\u4f1a\u7ed9\u7ec8\u7aef UI \u6dfb\u52a0\u65b0\u4e00\u884c\u6587\u5b57\u3002\u8be5\u884c\u6587\u5b57\u662f\u4f5c\u4e3a\u8f93\u5165\u53c2\u6570\u4f20\u7ed9\u65b9\u6cd5\u7684\u5b57\u7b26\u4e32\u3002\u6211\u4eec\u4f1a\u5728\u6b64\u7ed9\u5b83\u4f20\u5165 commandName\u3002

    \n
  10. \n
  11. \n

    ExecuteCommands \u65b9\u6cd5\u4f1a\u542f\u52a8 ExecuteCommandsRoutine\u3002

    \n
  12. \n
  13. \n

    UIManager \u7c7b\u7684 ResetScrollToTop \u4f1a\u5411\u4e0a\u6eda\u52a8\u7ec8\u7aef UI\u3002\u5b83\u4f1a\u5728\u6267\u884c\u8fc7\u7a0b\u5f00\u59cb\u524d\u5b8c\u6210\u3002

    \n
  14. \n
  15. \n

    ExecuteCommandsRoutine \u62e5\u6709 for \u5faa\u73af\uff0c\u5b83\u4f1a\u8fed\u4ee3 botCommands \u5217\u8868\u5185\u7684\u547d\u4ee4\uff0c\u901a\u8fc7\u628a Bot \u5bf9\u8c61\u4f20\u7ed9 Execute \u5c5e\u6027\u8fd4\u56de\u7684\u65b9\u6cd5\uff0c\u9010\u4e2a\u6267\u884c\u8fd9\u4e9b\u547d\u4ee4\u3002\u5728\u6bcf\u6b21\u6267\u884c\u540e\uff0c\u6211\u4eec\u4f1a\u6dfb\u52a0 CommandPauseTimeseconds \u65f6\u957f\u7684\u6682\u505c\u3002

    \n
  16. \n
  17. \n

    UIManager \u7c7b\u7684 RemoveFirstTextLine \u65b9\u6cd5\u4f1a\u79fb\u9664\u7ec8\u7aef UI \u91cc\u7684\u7b2c\u4e00\u884c\u6587\u5b57\uff0c\u53ea\u8981\u90a3\u91cc\u4ecd\u6709\u6587\u5b57\u3002\u56e0\u6b64\uff0c\u6bcf\u4e2a\u547d\u4ee4\u6267\u884c\u540e\uff0c\u5b83\u7684\u76f8\u5e94\u540d\u79f0\u4f1a\u4ece\u7ec8\u7aef UI \u79fb\u9664\u3002

    \n
  18. \n
  19. \n

    \u6267\u884c\u6240\u6709\u547d\u4ee4\u540e\uff0cbotCommands \u4f1a\u6e05\u7a7a\uff0c\u673a\u5668\u4eba\u4f1a\u4f7f\u7528 ResetToLastCheckpoint\uff0c\u91cd\u7f6e\u5230\u6700\u540e\u68c0\u67e5\u70b9\u3002\u63a5\u7740\uff0cexecuteRoutine \u4f1a\u8bbe\u4e3a null\uff0c\u7528\u6237\u53ef\u4ee5\u7ee7\u7eed\u53d1\u51fa\u66f4\u591a\u8f93\u5165\u4fe1\u606f\u3002

    \n
  20. \n
\n

\u5b9e\u73b0\u64a4\u9500\u548c\u91cd\u505a\u529f\u80fd

\n

\u518d\u8fd0\u884c\u4e00\u6b21\u573a\u666f\uff0c\u5c1d\u8bd5\u5230\u8fbe\u7eff\u8272\u68c0\u67e5\u70b9\u3002

\n

\u6211\u4eec\u4f1a\u6ce8\u610f\u5230\uff0c\u6211\u4eec\u73b0\u5728\u65e0\u6cd5\u64a4\u9500\u8f93\u5165\u7684\u547d\u4ee4\uff0c\u8fd9\u610f\u5473\u7740\u5982\u679c\u72af\u4e86\u9519\uff0c\u6211\u4eec\u65e0\u6cd5\u540e\u9000\uff0c\u9664\u975e\u6267\u884c\u5b8c\u6240\u6709\u547d\u4ee4\u3002\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u6dfb\u52a0\u64a4\u9500\u529f\u80fd\u548c\u91cd\u505a\u529f\u80fd\u6765\u89e3\u51b3\u8be5\u95ee\u9898\u3002

\n

\u56de\u5230 SceneManager.cs \u811a\u672c\uff0c\u5728 botCommands \u7684 List \u58f0\u660e\u540e\u6dfb\u52a0\u4ee5\u4e0b\u53d8\u91cf\u58f0\u660e\uff1a

\n
private Stack<BotCommand> undoStack = new Stack<BotCommand>();\n
\n

undoStack \u53d8\u91cf\u5c5e\u4e8e\u6765\u81ea Collections \u547d\u540d\u7a7a\u95f4\u7684Stack\u7c7b\uff0c\u5b83\u4f1a\u5b58\u50a8\u64a4\u9500\u7684\u547d\u4ee4\u5f15\u7528\u3002

\n

\u73b0\u5728\uff0c\u6211\u4eec\u8981\u5206\u522b\u4e3a\u64a4\u9500\u548c\u91cd\u505a\u6dfb\u52a0 UndoCommandEntry \u548c RedoCommandEntry \u4e8c\u4e2a\u65b9\u6cd5\u3002\u5728 SceneManager \u7c7b\u4e2d\uff0c\u590d\u5236\u7c98\u8d34\u4e0b\u5217\u4ee3\u7801\u5230 ExecuteCommandsRoutine \u4e4b\u540e\uff1a

\n
private void UndoCommandEntry()\n{\n //1\n if (executeRoutine != null || botCommands.Count == 0)\n {\n return;\n }\n\n undoStack.Push(botCommands[botCommands.Count - 1]);\n botCommands.RemoveAt(botCommands.Count - 1);\n\n //2\n uiManager.RemoveLastTextLine();\n }\n\nprivate void RedoCommandEntry()\n{\n //3\n if (undoStack.Count == 0)\n {\n return;\n }\n\n var botCommand = undoStack.Pop();\n AddToCommands(botCommand);\n}\n
\n

\u73b0\u5728\u8bb2\u89e3\u8fd9\u90e8\u5206\u4ee3\u7801\uff1a

\n
    \n
  1. \n

    \u5982\u679c\u547d\u4ee4\u6b63\u5728\u6267\u884c\uff0c\u6216 botCommands \u5217\u8868\u662f\u7a7a\u7684\uff0cUndoCommandEntry \u65b9\u6cd5\u4e0d\u6267\u884c\u4efb\u4f55\u64cd\u4f5c\u3002\u5426\u5219\uff0c\u5b83\u4f1a\u628a\u6700\u540e\u8f93\u5165\u7684\u547d\u4ee4\u5f15\u7528\u63a8\u9001\u5230 undoStack \u4e0a\u3002\u8fd9\u90e8\u5206\u4ee3\u7801\u4e5f\u4f1a\u4ece botCommands \u5217\u8868\u79fb\u9664\u547d\u4ee4\u5f15\u7528\u3002

    \n
  2. \n
  3. \n

    UIManager \u7c7b\u7684 RemoveLastTextLine \u65b9\u6cd5\u4f1a\u79fb\u9664\u7ec8\u7aef UI \u7684\u6700\u540e\u4e00\u884c\u6587\u5b57\uff0c\u8fd9\u6837\u5728\u53d1\u751f\u64a4\u9500\u65f6\uff0c\u7ec8\u7aef UI \u5185\u5bb9\u7b26\u5408 botCommands \u7684\u5185\u5bb9\u3002

    \n
  4. \n
  5. \n

    \u5982\u679c undoStack \u4e3a\u7a7a\uff0cRedoCommandEntry \u4e0d\u6267\u884c\u4efb\u4f55\u64cd\u4f5c\u3002\u5426\u5219\uff0c\u5b83\u4f1a\u628a\u6700\u540e\u7684\u547d\u4ee4\u4ece undoStack \u79fb\u51fa\uff0c\u7136\u540e\u901a\u8fc7 AddToCommands \u628a\u547d\u4ee4\u6dfb\u52a0\u5230 botCommands \u5217\u8868\u3002

    \n
  6. \n
\n

\u73b0\u5728\u6211\u4eec\u6dfb\u52a0\u952e\u76d8\u8f93\u5165\u6765\u4f7f\u7528\u8fd9\u4e9b\u65b9\u6cd5\u3002\u5728 SceneManager \u7c7b\u4e2d\uff0c\u628a Update \u65b9\u6cd5\u7684\u4e3b\u4f53\u66ff\u6362\u4e3a\u4e0b\u5217\u4ee3\u7801\uff1a

\n
if (Input.GetKeyDown(KeyCode.Return))\n{\n ExecuteCommands();\n}\nelse if (Input.GetKeyDown(KeyCode.U)) //1\n{\n UndoCommandEntry();\n}\nelse if (Input.GetKeyDown(KeyCode.R)) //2\n{\n RedoCommandEntry();\n}\nelse\n{\n CheckForBotCommands();\n}\n
\n
    \n
  1. \n

    \u6309\u4e0b U \u952e\u4f1a\u8c03\u7528 UndoCommandEntry \u65b9\u6cd5\u3002

    \n
  2. \n
  3. \n

    \u6309\u4e0b R \u952e\u4f1a\u8c03\u7528 RedoCommandEntry \u65b9\u6cd5\u3002

    \n
  4. \n
\n

\u5904\u7406\u8fb9\u7f18\u60c5\u51b5

\n

\u73b0\u5728\u6211\u4eec\u5feb\u8981\u5b8c\u6210\u8be5\u6559\u7a0b\u4e86\uff0c\u5728\u5b8c\u6210\u524d\uff0c\u6211\u4eec\u8981\u786e\u5b9a\u4e8c\u4ef6\u4e8b\uff1a

\n
    \n
  1. \n

    \u8f93\u5165\u65b0\u547d\u4ee4\u65f6\uff0cundoStack \u5e94\u8be5\u88ab\u6e05\u7a7a\u3002

    \n
  2. \n
  3. \n

    \u6267\u884c\u547d\u4ee4\u524d\uff0cundoStack \u5e94\u8be5\u88ab\u6e05\u7a7a\u3002

    \n
  4. \n
\n

\u4e3a\u6b64\uff0c\u6211\u4eec\u9996\u5148\u7ed9 SceneManager \u6dfb\u52a0\u65b0\u7684\u65b9\u6cd5\u3002\u590d\u5236\u7c98\u8d34\u4e0b\u9762\u7684\u65b9\u6cd5\u5230 CheckForBotCommands \u4e4b\u540e\uff1a

\n
private void AddNewCommand(BotCommand botCommand)\n{\n undoStack.Clear();\n AddToCommands(botCommand);\n}\n
\n

\u8be5\u65b9\u6cd5\u4f1a\u6e05\u7a7a undoStack\uff0c\u7136\u540e\u8c03\u7528 AddToCommands \u65b9\u6cd5\u3002\n\u73b0\u5728\u628a CheckForBotCommands \u5185\u7684 AddToCommands \u8c03\u7528\u66ff\u6362\u4e3a\u4e0b\u5217\u4ee3\u7801\uff1a

\n
 AddNewCommand(botCommand);\n
\n

\u6700\u540e\uff0c\u590d\u5236\u7c98\u8d34\u4e0b\u5217\u4ee3\u7801\u5230 ExecuteCommands \u65b9\u6cd5\u5185\u7684 if \u8bed\u53e5\u4e2d\uff0c\u4ece\u800c\u5728\u6267\u884c\u524d\u6e05\u7a7a undoStack\uff1a

\n
 undoStack.Clear();\n
\n

\u73b0\u5728\u9879\u76ee\u7ec8\u4e8e\u5b8c\u6210\u4e86\uff01

\n

\u4fdd\u5b58\u9879\u76ee\u3002\u6784\u5efa\u9879\u76ee\uff0c\u7136\u540e\u5728 Unity \u7f16\u8f91\u5668\u5355\u51fb Play \u6309\u94ae\u3002\u8f93\u5165\u547d\u4ee4\uff0c\u6309\u4e0b U \u952e\u64a4\u9500\u547d\u4ee4\uff0c\u6309\u4e0b R \u952e\u6062\u590d\u88ab\u64a4\u9500\u7684\u547d\u4ee4\u3002

\n

\u5c1d\u8bd5\u8ba9\u673a\u5668\u4eba\u5230\u8fbe\u7eff\u8272\u68c0\u67e5\u70b9\u3002

\n

\u540e\u7eed\u5b66\u4e60

\n

\u5982\u679c\u60f3\u8981\u4e86\u89e3\u66f4\u591a\u6e38\u620f\u7f16\u7a0b\u4e2d\u7684\u8bbe\u8ba1\u6a21\u5f0f\uff0c\u5efa\u8bae\u67e5\u770b Robert Nystrom \u7684\u6e38\u620f\u7f16\u7a0b\u6a21\u5f0f\u7f51\u7ad9\u3002

\n

\u5982\u679c\u60f3\u4e86\u89e3\u66f4\u591a\u9ad8\u7ea7 C#\u65b9\u6cd5\uff0c\u53ef\u4ee5\u67e5\u770bC# Collections\uff0cLambdas\uff0cand LINQ\u8bfe\u7a0b\u3002

\n

\u6311\u6218

\n

\u5c0f\u6311\u6218\uff1a\u5c1d\u8bd5\u8fbe\u5230\u8ff7\u5bab\u7ec8\u70b9\u7684\u7eff\u8272\u68c0\u67e5\u70b9\u3002\u5982\u679c\u9047\u5230\u56f0\u96be\uff0c\u6211\u5728\u4e0b\u9762\u63d0\u4f9b\u4e86\u89e3\u51b3\u65b9\u6cd5\uff0c\u8fd9\u662f\u591a\u4e2a\u89e3\u51b3\u65b9\u6cd5\u4e4b\u4e00\u3002

\n

\u89e3\u51b3\u65b9\u6cd5\uff1a

\n\n

\u672c\u6587\u5230\u6b64\u7ed3\u675f\uff0c\u611f\u8c22\u9605\u8bfb\u3002\u5e0c\u671b\u4f60\u559c\u6b22\u8fd9\u7bc7\u6559\u7a0b\uff0c\u5982\u679c\u6709\u95ee\u9898\u6216\u8bc4\u8bba\uff0c\u8bf7\u5728\u8bc4\u8bba\u533a\u8ba8\u8bba\u3002 \u7279\u522b\u611f\u8c22\u827a\u672f\u5bb6 Lee Barkovich\u3001Jes\u00fas Lastra \u548c sunburn \u63d0\u4f9b\u672c\u9879\u76ee\u7684\u8d44\u6e90\u3002

\n

\u539f\u6587\u94fe\u63a5\uff1a https://connect.unity.com/p/zai-unityshi-xian-you-xi-ming-ling-mo-shi?app=true

\n

\u6b22\u8fce\u5927\u5bb6\u6233\u4e0a\u65b9\u94fe\u63a5\uff0c\u4e0b\u8f7d Unity \u5b98\u65b9 app\uff0c\u6280\u672f\u793e\u533a\u4e92\u52a8\u7b54\u7591\uff0c\u5e72\u8d27\u8d44\u6e90\u5b66\u4e0d\u505c\uff01

\n" }, { "author": { "url": "member/unn", "name": "unn", "avatar": "https://cdn.v2ex.com/gravatar/cfff9ca626c77fa9bdd8a8e7eb3048d0?s=73&d=retro" }, "url": "t/638437", "title": "Unity ECS(\u4e00)\u4e86\u89e3 ECS \u4e0e DOTS", "id": "t/638437", "date_published": "2020-01-16T06:08:51+00:00", "content_html": "

\u672c\u6587\u8f6c\u81ea Unity Connect \u535a\u4e3b EntherVarope

\n

ECS \u662f\u4ec0\u4e48\uff1f\u53ef\u4ee5\u505a\u4ec0\u4e48\uff1f\u4e3a\u4ec0\u4e48 ECS \u6210\u4e3a\u6211\u7684\u9009\u62e9\uff1f

\n

\u4ec0\u4e48\u662f ECS \uff08\u5b9e\u4f53\u7ec4\u4ef6\u7cfb\u7edf\uff09\uff1f

\n

\u5176\u5b9e ECS \u7684\u6982\u5ff5\u65e9\u5c31\u8bde\u751f\u4e86\uff0c\u4f46\u662f\u5b83\u662f\u56e0\u4e3a\u5b88\u671b\u5148\u950b\u624d\u9010\u6e10\u88ab\u4eba\u6240\u77e5\u3002\uff08\u66b4\u96ea\u7684\u5b88\u671b\u5148\u950b\u662f\u57fa\u4e8e ECS \u6a21\u5f0f\u8bbe\u8ba1\u7684\uff0c\u7528\u4e8e\u6539\u5584\u5728\u5927\u573a\u666f\u4e0b\u591a\u89d2\u8272\u8fd0\u7b97\u7684\u6548\u7387\uff09

\n

ECS \u662f\u4e00\u79cd\u8f6f\u4ef6\u67b6\u6784\u6a21\u5f0f\uff0c\u7531\u4e09\u4e2a\u5143\u7d20\u7ec4\u6210\uff1a\u5b9e\u4f53(Entity)\uff0c\u7ec4\u4ef6(Component)\u548c\u7cfb\u7edf(System)\uff08\u770b\u8d77\u6765\u548c MVC \u5f88\u76f8\u4f3c\uff09\u3002\u6e38\u620f\u7a0b\u5e8f\u5206\u4e3a\u8fd9\u4e09\u4e2a\u4e3b\u8981\u5143\u7d20\uff0c\u5e76\u4e14\u901a\u8fc7\u5b9a\u4e49\u6bcf\u4e2a\u7cfb\u7edf\u7684\u8d23\u4efb\u548c\u5173\u7cfb\u6765\u7ba1\u7406\u6e38\u620f\u3002

\n

\u5b9e\u4f53\u4ee3\u8868\u6e38\u620f\u4e16\u754c\u4e2d\u7684\u4e8b\u7269\u3002\u5b9e\u4f53\u672c\u8eab\u6ca1\u6709\u7279\u5b9a\u529f\u80fd\uff0c\u5b83\u4eec\u5c06\u4f1a\u88ab\u7ec4\u4ef6\u586b\u5145\u6765\u6210\u4e3a\u4e00\u4e2a\u5b9e\u4f53\u3002

\n

\u7ec4\u4ef6\u662f\u9644\u52a0\u5230\u4e8b\u7269\u7684\u6570\u636e\u3002\u91cd\u70b9\u4e0d\u662f\u5bf9\u8c61\uff0c\u800c\u662f\u6570\u636e\uff0c\u6ca1\u6709\u529e\u6cd5\u64cd\u7eb5\u5b83\u3002\u6bd4\u5982\u64cd\u4f5c\u6e38\u620f\u7684\u89d2\u8272\u65f6\uff0c\u4f4d\u7f6e\uff0c\u901f\u5ea6\u548c\u4f53\u529b\u7b49\u6bcf\u4e2a\u72b6\u6001\u90fd\u5c06\u6210\u4e3a\u4e00\u4e2a\u7ec4\u6210\u90e8\u5206\uff0c\u5e76\u4e0e\u79f0\u4e3a\u201c\u89d2\u8272\u201d\u5b9e\u4f53\u76f8\u5173\u8054\u3002\u53e6\u5916\uff0c\u5b9e\u4f53\u4e2d\u7684\u5b57\u6bb5\u4fe1\u606f\u4e5f\u88ab\u8868\u793a\u4e3a\u7ec4\u4ef6\u90e8\u5206\u3002

\n

\u7cfb\u7edf\u662f\u6e38\u620f\u4e16\u754c\u7684\u6cd5\u5219\u3002\u7ed9\u5b9a\u4e0e\u5b9e\u4f53\u5173\u8054\u7684\u67d0\u4e9b\u7ec4\u4ef6\u4f5c\u4e3a\u6570\u636e\u8f93\u5165\u6e90\uff0c\u6216\u8005\u66f4\u65b0\u67d0\u4e9b\u7ec4\u4ef6\u7684\u503c\uff08\u53ef\u80fd\u4e0e\u8f93\u5165\u7684\u7ec4\u4ef6\u76f8\u540c\uff09\u3002\u968f\u7740\u6574\u4e2a\u7cfb\u7edf\u66f4\u65b0\u6bcf\u4e00\u5e27\uff0c\u6e38\u620f\u4e16\u754c\u4e5f\u5728\u4e0d\u65ad\u8fdb\u884c\u3002\u6211\u8ba4\u4e3a\u6700\u5bb9\u6613\u60f3\u8c61\u7684\u662f\u7269\u7406\u5b9a\u5f8b\u3002\u4f8b\u5982\uff0c\u60f3\u8c61\u4e00\u4e2a\u521a\u4f53\u5b9e\u4f53\u3002\u5b83\u7684\u8fd0\u52a8\u57fa\u4e8e\u5229\u7528\u4f4d\u7f6e\u548c\u901f\u5ea6\u4e24\u4e2a\u5206\u91cf\u7684\u7cfb\u7edf\u6765\u66f4\u65b0\u5750\u6807\u3002

\n

\u7c97\u7565\u5730\u8bf4\uff0c\u7cfb\u7edf\u8d1f\u8d23\u5904\u7406\uff0c\u7ec4\u4ef6\u8d1f\u8d23\u6570\u636e\uff0c\u800c\u5b9e\u4f53\u662f\u4e00\u7ec4\u7ec4\u7684\u7ec4\u4ef6\uff0c\u7528\u4e8e\u8fc7\u6ee4\u7cfb\u7edf\u6b63\u5728\u5904\u7406\u7684\u5185\u5bb9\u3002\u7531\u4e8e\u7cfb\u7edf\u548c\u6570\u636e\u662f\u5b8c\u5168\u5206\u5f00\u7684\uff0c\u56e0\u6b64\u5b83\u4e0e\u9762\u5411\u5bf9\u8c61\u4e0d\u517c\u5bb9\u3002

\n

Unity \u4e5f\u5177\u6709\u7c7b\u4f3c\u4e8e ECS \u7684\u67b6\u6784\uff08\u81ea Unity2018.2 \u8d77\u5df2\u63d0\u4f9b ECS \uff09\u3002\u5b9e\u4f53\u662f\u5df2\u7ecf\u524a\u51cf\u5230\u6781\u9650\u7684\u6e38\u620f\u5bf9\u8c61\u529f\u80fd\uff0c\u7ec4\u4ef6\u662f\u7ec4\u4ef6\u7684\u5e8f\u5217\u5316\u6570\u636e\u90e8\u5206\uff0c\u5176\u4f59\u90e8\u5206\u662f\u7cfb\u7edf\u3002Unity ECS \u662f\u5bf9\u7eaf ECS \u7684\u6539\u8fdb\u3002

\n

ECS \u53ef\u4ee5\u505a\u4ec0\u4e48\uff1f

\n

UnityECS \u6b63\u5728\u56f4\u7ed5\u8fd9\u4e00\u8bbe\u8ba1\u6a21\u5f0f\u5f00\u53d1\u65b0\u7684\u201c\u9762\u5411\u6570\u636e\u6280\u672f\u5806\u6808\u201d(DOTS),\u5982\u679c\u7ecf\u5e38\u5173\u6ce8 Unity \u7684\u53d1\u5e03\u4f1a\uff0c\u5c31\u6216\u591a\u6216\u5c11\u5bf9\u5b83\u6709\u6240\u4e86\u89e3\u3002\u4f46\u662f\u4e8b\u5148\u5199\u5728\u524d\u8fb9\uff0cECS \u5e76\u4e0d\u80fd\u52a0\u901f\u4efb\u4f55\u7c7b\u578b\u7684\u6e38\u620f /\u7a0b\u5e8f\u3002

\n

ECS \u6709\u671b\u52a0\u901f\u6e38\u620f\u7684\u7c7b\u578b

\n

\u5f39\u5e55\u6e38\u620f\n\u6709\u6d77\u91cf\u5355\u4f4d\u7684\u5927\u578b RTS\n\u5f00\u653e\u4e16\u754c /\u6c99\u76d2\n\u96c6\u7fa4\u6a21\u62df\uff08\u4f8b\u5982\u65b0\u51fa\u7684\u201c\u52a8\u7269\u661f\u7403\u201d\uff09\n\u6b64\u7c7b\u5177\u6709\u5927\u91cf\u201c\u9075\u5faa\u540c\u4e00\u8fd0\u7b97\u89c4\u5219\u201d\u5bf9\u8c61\u7684\u7a0b\u5e8f\uff0c\u4fbf\u53ef\u4ee5\u5229\u7528 ECS \u6765\u52a0\u901f\u3002

\n

\u4e3a\u4ec0\u4e48 ECS \u6210\u4e3a\u6211\u7684\u9009\u62e9\uff1f

\n

\u7b54\u6848\u5f88\u7b80\u5355\uff1a\u56e0\u4e3a\u5b83\u5341\u5206\u7684\u5feb\uff01\u6548\u7387\u975e\u5e38\u4e4b\u9ad8\uff0c\u6bd4\u8d77\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\uff0c\u5b83\u5bf9\u5185\u5b58\u7684\u5229\u7528\u7387\u662f\u6210\u51e0\u4f55\u500d\u6570\u7684\u589e\u957f\uff0c\u8fd8\u6709\u4e00\u4e9b\u5176\u4ed6\u7684\u4f18\u70b9\uff1a

\n

\u8f7b\u677e\u5e76\u884c\u5316--------\u6e05\u6670\u7684\u7cfb\u7edf\u8f93\u5165\u8f93\u51fa\u548c\u5c0f\u7c92\u5ea6\n\u826f\u597d\u7684\u7f13\u5b58\u6548\u7387------\u901a\u8fc7\u987a\u5e8f\u8bbf\u95ee\u7ec4\u4ef6\u6570\u7ec4\u83b7\u5f97\u7a7a\u95f4\u5c40\u90e8\u6027\uff08\u52a8\u6001\u573a\u666f\u8bfb\u53d6\u5341\u5206\u65b9\u4fbf\uff09\n\u8026\u5408\u5ea6\u4f4e---------\u56e0\u4e3a\u7cfb\u7edf\u4ec5\u4ea4\u6362\u6570\u636e\n\u6613\u4e8e\u6d4b\u8bd5---------\u56e0\u4e3a\u7cfb\u7edf\u6ca1\u6709\u72b6\u6001

\n

\u5f53\u7136 ECS \u4e5f\u6709\u5b83\u81ea\u8eab\u7684\u4e00\u4e9b\u7f3a\u70b9\uff1a

\n

\u5bf9\u4e8e\u4e60\u60ef\u4e86\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u7684\u4eba\uff0c\u9700\u8981\u6539\u53d8\u7f16\u7a0b\u601d\u7ef4\u6a21\u5f0f\n\u5728 Unity \u63a8\u51fa\u5b8c\u5584\u7684\u5de5\u5177\u96c6\u524d\uff0c\u7ba1\u7406\u5185\u5b58\u662f\u4e00\u4ef6\u56f0\u96be\u7684\u4e8b\n\u81f3\u4e8e\u4e3a\u4ec0\u4e48 ECS \u5982\u6b64\u4e4b\u5feb\uff0c\u5185\u5bb9\u6bd4\u8f83\u591a\uff0c\u611f\u5174\u8da3\u7684\u53ef\u4ee5\u7ee7\u7eed\u5f80\u4e0b\u770b\uff0c\u8df3\u8fc7\u4e5f\u65e0\u59a8\u3002

\n

\u5728\u4f20\u7edf\u7684\u6d41\u7a0b\u4e2d\uff0c\u6211\u4eec\u5236\u4f5c\u7269\u4f53\uff0c\u4e3a\u5176\u6dfb\u52a0\u811a\u672c\u3002\u8fd9\u79cd\u505a\u6cd5\u6709\u4e00\u4e9b\u56fa\u6709\u7684\u7f3a\u70b9\u548c\u6027\u80fd\u7f3a\u9677\u3002\u9996\u5148\uff0c\u6570\u636e\u548c\u5904\u7406\u5b83\u4eec\u7684\u65b9\u6cd5\u662f\u7d27\u5bc6\u8026\u5408\u7684\uff0c\u4ee3\u7801\u91cd\u7528\u7387\u8f83\u4f4e\u3002\u6b64\u5916\uff0c\u7cfb\u7edf\u975e\u5e38\u4f9d\u8d56\u5f15\u7528\u7c7b\u578b\uff0c\u5f15\u7528\u9519\u8bef\u5c61\u89c1\u4e0d\u9c9c\u3002

\n

\u6700\u91cd\u8981\u7684\u662f\uff0c\u5728\u4e0a\u56fe\u7684\u793a\u4f8b\u4e2d\uff1aGun \u4e0e Player \u6240\u5f15\u7528\u7684 Transform\u3001Rigidbody\u3001Collider \u7b49\u8fd9\u4e9b\u5173\u952e\u811a\u672c\u88ab\u5206\u6563\u5728\u5806\u5185\u5b58\u4e2d\uff0c\u6570\u636e\u5c06\u4e0d\u4f1a\u8f6c\u6362\u6210\u53ef\u7531\u66f4\u5feb\u7684 SIMD \uff08\u5355\u6307\u4ee4\u591a\u6570\u636e\u6d41\uff09\u77e2\u91cf\u5355\u5143\u8fdb\u884c\u64cd\u4f5c\u7684\u5f62\u6001\u3002

\n

\u4e0a\u56fe\u663e\u793a\u4e86\u8fd9\u79cd\u6570\u636e\u5b58\u50a8\u65b9\u6cd5\u7684\u968f\u673a\u5076\u53d1\u6027\u8d28\u3002\u6bcf\u4e00\u4e2a\u5355\u5f15\u7528\uff0c\u5728\u4f7f\u7528\u65f6\u90fd\u6709\u53ef\u80fd\u4f1a\u5c06\u5176\u6240\u6709\u7684\u6210\u5458\u53d8\u91cf\u4ece\u7cfb\u7edf\u5185\u5b58\u4e2d\u5168\u90e8\u62c9\u51fa\uff0c\u4e3e\u4e2a\u4f8b\u5b50\uff0c\u5f53\u6211\u547d\u4ee4 Gun \u8fdb\u884c\u5f00\u706b\uff0c\u5b50\u5f39\u98de\u51fa\uff0c\u5bf9\u5b50\u5f39\u7684\u5750\u6807\u8fdb\u884c\u8fd0\u7b97\u8ba9\u5b83\u98de\u884c\uff0c\u8868\u9762\u4e0a\u770b\u8d77\u6765\u4ec5\u4ec5\u662f\u5bf9\u5b50\u5f39\u8fd9\u4e2a\u5bf9\u8c61\u7684 Transform \u4e2d\u7684 position \u8fdb\u884c\u4e86\u64cd\u4f5c\uff0c\u4f46\u5b9e\u9645\u4e0a\uff0c\u5b50\u5f39\u7684 rotation\uff0cgameobject \u5c5e\u6027\uff0c\u8fd8\u6709\u7b49\u7b49\u7b49\u7b49\u5176\u4ed6\u6210\u5458\u4e5f\u4e00\u5e76\u62c9\u51fa\u6765\u64cd\u4f5c\u4e86\u3002

\n

\u7eff\u8272\u5757\u8868\u793a\u5f00\u53d1\u60f3\u8c61\u4e2d\u8ba4\u4e3a\u64cd\u4f5c\u5f15\u7528\u7684\u6210\u5458\uff0c\u800c\u5b9e\u9645\u4e0a\uff0c\u786c\u4ef6\u542c\u4ece\u811a\u672c\u7684\u547d\u4ee4\u4ece\u5185\u5b58\u4e2d\u83b7\u53d6\u6570\u636e\u65f6\uff0c\u7f13\u5b58\u4e2d\u4f1a\u586b\u5145\u8bb8\u591a\u65e0\u7528\u7684\u6570\u636e\uff08\u7ea2\u8272\u7684\u5757\uff09\uff0c\u5982\u679c\u5c06\u4e3a\u8981\u79fb\u52a8\u7684 GameObject \u8bbe\u7f6e\u6210\u4e00\u4e2a\u72ec\u7acb\u7684\u53ea\u6709\u4f4d\u7f6e\u4e0e\u65cb\u8f6c\u6210\u5458\u7684\u77e9\u9635\uff0c\u90a3\u4e48\u7cfb\u7edf\u5c31\u80fd\u591f\u5728\u5f88\u77ed\u7684\u65f6\u95f4\u5185\u6267\u884c\u64cd\u4f5c\u3002

\n

\u5728 ECS \u4e2d\uff0c

\n

\u53ea\u9700\u8981\u8003\u8651\u6bcf\u4e00\u79cd GameObject \u6240\u5305\u542b\u7684\u6570\u636e\u5b9e\u4f53\uff0c\u800c\u4e0d\u7528\u8003\u8651\u81ea\u5df1\u7684\u7ec4\u4ef6\u96c6\u5408\uff08\u629b\u5f03\u4e86 Transfrom\uff0cRigidbody \u7b49\uff09\uff0c\u5c06\u5904\u7406\u4e0e\u5404\u4e2a\u5bf9\u8c61\u7c7b\u578b\u5b8c\u5168\u5206\u79bb\u3002\u5b9e\u4f53\u4ec5\u4ec5\u662f\u4e00\u4e2a\u53e5\u67c4\uff08\u6216\u8005\u8bf4\u662f\u4e00\u4e2a\u6807\u8bc6\u7b26\uff09\u6c38\u8fdc\u7d22\u5f15\u5b83\u8868\u793a\u7684\u4e0d\u540c\u6570\u636e\u7c7b\u578b\u7684\u96c6\u5408(ComponentDataGroups)\u7cfb\u7edf\u53ef\u4ee5\u901a\u8fc7\u8fd9\u4e9b\u53e5\u67c4\u6765\u5bf9\u6240\u6709\u7ec4\u4ef6\u8fdb\u884c\u8fc7\u6ee4\u548c\u64cd\u4f5c\uff0c\u800c\u4e0d\u9700\u8981\u5c06\u7cfb\u7edf\u4e0e\u5b9e\u4f53\u7c7b\u578b\u660e\u786e\u7ed3\u5408\u3002\u8fd9\u79cd\u5de5\u4f5c\u673a\u5236\u6709\u5f88\u5927\u4f18\u52bf\uff0c\u5b83\u4e0d\u4ec5\u80fd\u63d0\u9ad8\u7f13\u5b58\u6548\u7387\uff0c\u7f29\u77ed\u8bbf\u95ee\u65f6\u95f4\uff0c\u5b83\u8fd8\u652f\u6301\u73b0\u4ee3 CPU \u4e2d\u7684\u4f7f\u7528\u6570\u636e\u5bf9\u9f50\u7684\u5148\u8fdb\u6280\u672f\uff08\u81ea\u52a8\u77e2\u91cf\u5316 \u5373\uff1aSIMD \uff09\uff0c\u8fd9\u79cd\u6280\u672f\u5e26\u6765\u7684\u6548\u7387\u63d0\u5347\u662f\u6781\u4e3a\u53ef\u89c2\u7684\u3002\u5728 Unity \u7684 DOTS \u4e2d\uff0c\u8fd8\u53ef\u4ee5\u4f7f\u7528 Brust Complier \u8df3\u8fc7\u4e2d\u95f4\u8bed\u8a00\u7684\u7f16\u8bd1\uff0c\u4f7f\u5f97\u6027\u80fd\u8fdb\u4e00\u6b65\u7684\u63d0\u5347\u3002

\n

\u5173\u4e8e\u6570\u636e\u5bf9\u9f50\u4e0e SIMD

\n

\u5b9e\u9645\u7f16\u7a0b\u4e2d\uff0c\u5bf9\u5185\u5b58\u7684\u7ba1\u7406\u603b\u662f\u4e0d\u53ef\u80fd\u8fbe\u5230\u5b8c\u7f8e\u5229\u7528\uff0c\u603b\u4f1a\u6709\u6216\u591a\u6216\u5c11\u7684\u5185\u5b58\u5757\u5904\u4e8e\u95f2\u7f6e\u72b6\u6001\uff0c\u95f2\u7f6e\u5185\u5b58\u4e0d\u4ec5\u6ca1\u6709\u4efb\u4f55\u7528\u5904\uff0c\u7cfb\u7edf\u4ecd\u7136\u8981\u8bbf\u95ee\u5b83\u4eec\u589e\u5927\u8bbf\u95ee\u5f00\u9500\uff08\u6d6a\u8d39\u65f6\u95f4\uff09\u3002\u4f20\u7edf\u7684\u9762\u5411\u5bf9\u8c61\u4e0b\u867d\u7136\u964d\u4f4e\u62bd\u8c61\u95e8\u69db\u4e86\uff0c\u4f46\u662f\u5bf9\u5185\u5b58\u6765\u8bf4\u5b9e\u9645\u4e0a\u662f\u5f88\u4e0d\u53cb\u597d\u7684\uff08\u6784\u5efa\u5bf9\u8c61\u65f6\uff0c\u6570\u636e\u5f15\u7528\u603b\u662f\u6742\u4e71\u65e0\u5e8f\u7684\uff09\u3002\u9762\u5411\u6570\u636e\u7f16\u7a0b\u5c06\u6570\u636e\u63d0\u53d6\u51fa\u6765\uff0c\u4e0d\u7528\u5173\u5fc3\u4ed6\u4eec\u5b9e\u9645\u4e0a\u7684\u8054\u7cfb\uff0c\u4ec5\u4ec5\u662f\u7531\u5b9e\u4f53\u8fd9\u4e2a\u7d22\u5f15\u6765\u5f15\u7528\uff0c\u8fd9\u5c31\u4ee3\u8868\uff0c\u5bf9\u4e8e\u540c\u7c7b\u578b\u7684\u6570\u636e\uff0c\u53ef\u4ee5\u5c06\u4ed6\u4eec\u653e\u5728\u540c\u4e00\u4e2a\u5185\u5b58\u5757\u91cc\uff0c\u65e0\u8bba\u662f\u5bf9\u5185\u5b58\u7684\u5229\u7528\u6216\u8005\u662f\u7cfb\u7edf\u7684\u8bbf\u95ee\u90fd\u662f\u5341\u5206\u4fbf\u5229\u7684\u3002

\n

\uff08 PS:\u5c31\u7b97\u662f\u6570\u636e\u5bf9\u9f50\u4e86\uff0c\u4e5f\u4e0d\u80fd\u5f7b\u5e95\u6d88\u9664\u95f2\u7f6e\u5185\u5b58\uff0c\u4f46\u662f\u6bd4\u8d77\u4f20\u7edf\u7684\u5185\u5b58\u7ed3\u6784\u6765\u8bf4\uff0c\u95f2\u7f6e\u5185\u5b58\u7684\u6570\u91cf\u4f1a\u5927\u4e3a\u51cf\u5c0f\uff09\u3002

\n

SMID\uff1a

\n

SIMD \u5168\u79f0 Single Instruction Multiple Data\uff0c\u5355\u6307\u4ee4\u591a\u6570\u636e\u6d41\uff0c\u80fd\u591f\u590d\u5236\u591a\u4e2a\u64cd\u4f5c\u6570\uff0c\u5e76\u628a\u5b83\u4eec\u6253\u5305\u5728\u5bc4\u5b58\u5668\u7684\u4e00\u7ec4\u6307\u4ee4\u96c6\u3002

\n

\u4f20\u7edf\u7684 CPU \u4f7f\u7528 SISD \u6765\u5b8c\u6210\u903b\u8f91\u8fd0\u7b97\uff0c\u8fc7\u7a0b\u53ef\u4ee5\u7b3c\u7edf\u7684\u6982\u62ec\u4e3a\u4e00\u4e2a\u6267\u884c\u5355\u5143\u5148\u8bbf\u95ee\u5185\u5b58\uff0c\u6839\u636e\u547d\u4ee4\u627e\u5230\u7b2c\u4e00\u4e2a\u64cd\u4f5c\u6570\uff0c\u518d\u4e00\u6b21\u8bbf\u95ee\u5185\u5b58\uff0c\u627e\u5230\u7b2c\u4e8c\u4e2a\u64cd\u4f5c\u6570\uff0c\u624d\u80fd\u6839\u636e\u547d\u4ee4\u8fdb\u884c\u903b\u8f91\u8fd0\u7b97(\u5728\u67e5\u627e\u64cd\u4f5c\u6570\u7684\u8fc7\u7a0b\u4e2d\uff0c\u7531\u4e8e\u6570\u636e\u7684\u5f15\u7528\u662f\u6742\u4e71\u65e0\u5e8f\u7684\uff0c\u6267\u884c\u5355\u5143\u53ea\u80fd\u904d\u5386\u6bcf\u4e00\u4e2a\u5185\u5b58\u5757\uff0c\u8fd9\u5c31\u9020\u6210\u4e86\u6027\u80fd\u74f6\u9888)\u3002

\n

\u65b0\u4e16\u4ee3\u7684 CPU \u6240\u91c7\u7528\u7684 SIMD \u5219\u662f\u7531\u6570\u4e2a\u6267\u884c\u5355\u5143\u540c\u65f6\u8bbf\u95ee\u5185\u5b58\uff0c\u4e00\u6b21\u6027\u627e\u5230\u6240\u9700\u7684\u64cd\u4f5c\u6570\u8fdb\u884c\u8fd0\u7b97\uff0c\u4e8b\u5b9e\u4e0a\uff0c\u7531\u4e8e\u8fdb\u884c\u4e86\u6570\u636e\u5bf9\u9f50\uff0c\u6bcf\u4e00\u4e2a\u6267\u884c\u5355\u5143\u67e5\u627e\u5185\u5b58\u7684\u6548\u7387\u6bd4 SISD \u7684\u67e5\u627e\u8981\u9ad8\u51fa\u4e0d\u5c11\uff0c\u8fd9\u5c31\u597d\u6bd4\u5c06\u65e0\u6570\u7684\u5feb\u9012\u6309\u7167\u5730\u533a\u5206\u95e8\u522b\u7c7b\uff0c\u4e00\u65e6 CPU \u53d1\u51fa\u201c\u62ff\u51fa\u4e0a\u6d77\u5730\u533a\u7684\u5feb\u9012\u201c\u6307\u4ee4\uff0c\u6bcf\u4e00\u4e2a\u5feb\u9012\u5458\uff08\u6267\u884c\u5355\u5143\uff09\u90fd\u4f1a\u76f4\u5954\u5b58\u653e\u4e0a\u6d77\u5feb\u9012\u7684\u8d27\u67b6\u800c\u4e0d\u7528\u4e00\u4e2a\u8d27\u67b6\u4e00\u4e2a\u8d27\u67b6\u7684\u641c\u7d22\u3002\u8fd9\u6837\u7684\u7279\u6027\u975e\u5e38\u9002\u5408\u5927\u6570\u636e\u8fd0\u7b97\u3002

\n

\u4ee5\u4e0a\u5185\u5bb9\u90fd\u662f\u5173\u4e8e ECS \u672c\u8eab\u7684\u4f18\u52bf\uff0c\u63a5\u4e0b\u6765\u5c06\u9610\u8ff0 Unity \u57fa\u4e8e ECS \u8fdb\u4e00\u6b65\u5f00\u53d1\u7684\u9762\u5411\u6570\u636e\u6280\u672f\u6808\u5de5\u5177 DOTS\u3002

\n

UnityDOTS \uff08 Data-Oriented Technology Stack \uff09

\n

Burst Complier

\n

\u7206\u53d1\u5f0f\u7f16\u8bd1\u5668\uff08\uff1f\uff09

\n

\u7206\u53d1\u7f16\u8bd1\u5668\u662f UnityECS \u4e3a\u4e86\u66f4\u9ad8\u6548\u5730\u7ec4\u7ec7\u6570\u636e\u6240\u4ea7\u751f\u7684\u540e\u53f0\u6027\u80fd\u589e\u76ca\u5f00\u53d1\u7684\u3002\u4ece\u672c\u8d28\u4e0a\u8bb2\uff0c\u7a81\u53d1\u7f16\u8bd1\u5668\u5c06\u6839\u636e\u73a9\u5bb6\u8bbe\u5907\u4e0a\u7684\u5904\u7406\u5668\u529f\u80fd\u4f18\u5316\u4ee3\u7801\u64cd\u4f5c\u3002\u4f8b\u5982\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u586b\u5145\u672a\u4f7f\u7528\u7684\u5bc4\u5b58\u5668\u6765\u6267\u884c 16\u300132 \u6216 64 \u6b21\u6d6e\u70b9\u9884\u7b97\uff0c\u800c\u4e0d\u662f\u4e00\u6b21\u53ea\u8fdb\u884c 1 \u6b21\u6d6e\u70b9\u8fd0\u7b97\u3002

\n

\u65b0\u7684\u7f16\u8bd1\u5668\u6280\u672f\u57fa\u4e8e Unity \u7684\u65b0\u6570\u5b66\u547d\u540d\u7a7a\u95f4\uff08 Unity.mathematics \uff09\u548c C# \u4f5c\u4e1a\u7cfb\u7edf(JobSystem)\u4ee5\u53ca\u6539\u8fdb\u8fc7\u7684\u9ad8\u6027\u80fd C#(HPC)\uff0c\u57fa\u4e8e\u7cfb\u7edf\u77e5\u9053\u6570\u636e\u5df2\u7ecf\u901a\u8fc7\u5b9e\u4f53\u7ec4\u4ef6\u7cfb\u7edf\u6b63\u786e\u8bbe\u7f6e\u7684\u4e8b\u5b9e\u3002\u82f1\u7279\u5c14 CPU \u7684\u5f53\u524d\u7248\u672c\u652f\u6301\u82f1\u7279\u5c14\u00ae SIMD \u6d41\u6307\u4ee4\u6269\u5c55 4 \uff08\u82f1\u7279\u5c14\u00ae SSE4 \uff09\u3001\u82f1\u7279\u5c14\u00ae \u9ad8\u7ea7\u77e2\u91cf\u6269\u5c55\u6307\u4ee4\u96c6 2 \uff08\u82f1\u7279\u5c14\u00ae AVX2 \uff09\u4ee5\u53ca\u7528\u4e8e\u6d6e\u70b9\u548c\u6574\u6570\u7684\u82f1\u7279\u5c14\u00ae \u9ad8\u7ea7\u77e2\u91cf\u6269\u5c55\u6307\u4ee4\u96c6 512 \uff08\u82f1\u7279\u5c14\u00ae AVX-512 \uff09,AMD \u7684\u652f\u6301 3D Now \u7684 CPU \u7b49\u90fd\u662f\u80fd\u652f\u6301\u7206\u53d1\u5f0f\u7f16\u8bd1\u5668\u7684\uff08\u9664\u975e\u662f\u5728\u5341\u5206\u8001\u65e7\u7684\u7535\u8111\u4e0a\u8fd0\u884c\uff0c\u5426\u5219\u4e0d\u9700\u8981\u8003\u8651\u517c\u5bb9\u6027\u95ee\u9898\uff0c\u56e0\u4e3a\u81ea\u52a8\u77e2\u91cf\u5316\u6280\u672f\u5df2\u7ecf\u6210\u4e3a\u73b0\u5728\u4e0e\u672a\u6765\u7684 CPU \u4e3b\u6d41\u6807\u51c6\uff09\u3002\u8be5\u7cfb\u7edf\u8fd8\u652f\u6301\u5728\u6bcf\u79cd\u65b9\u6cd5\u4e2d\u4f7f\u7528\u4e0d\u540c\u7684\u7cbe\u786e\u5ea6\uff0c\u4ee5\u8fc7\u6e21\u65b9\u5f0f\u5e94\u7528\u3002\u4f8b\u5982\uff0c\u5982\u679c\u60a8\u5728\u4f4e\u7cbe\u5ea6\u7684\u9876\u7ea7\u65b9\u6cd5\u5185\u4f7f\u7528\u4f59\u5f26\u51fd\u6570\uff0c\u5219\u6574\u4e2a\u65b9\u6cd5\u4e5f\u5c06\u4f7f\u7528\u4f59\u5f26\u7684\u4f4e\u7cbe\u5ea6\u7248\u672c\u3002\u8be5\u7cfb\u7edf\u8fd8\u6839\u636e\u5f53\u524d\u8fd0\u884c\u6e38\u620f\u7684\u5904\u7406\u5668\u7684\u529f\u80fd\u652f\u6301\uff0c\u901a\u8fc7\u52a8\u6001\u9009\u62e9\u9002\u5f53\u7684\u4f18\u5316\u529f\u80fd\u4e3a AOT \uff08\u524d\u671f\uff09\u7f16\u8bd1\u505a\u51c6\u5907\u3002

\n

\u8fd9\u79cd\u7f16\u8bd1\u5668\u7684\u53e6\u4e00\u4e2a\u4f18\u52bf\u662f\u786e\u4fdd\u6e38\u620f\u7684\u672a\u6765\u9002\u7528\u6027\u3002\u5982\u679c\u4e00\u6b3e\u5168\u65b0\u7684\u5904\u7406\u5668\u4ea7\u54c1\u7ebf\u4e0a\u5e02\uff0c\u5176\u4e2d\u5305\u542b\u4e00\u4e9b\u4ee4\u4eba\u60ca\u53f9\u7684\u65b0\u529f\u80fd\uff0cUnity \u53ef\u4ee5\u5728\u540e\u53f0\u4e3a\u60a8\u5b8c\u6210\u6240\u6709\u8d39\u529b\u5de5\u4f5c\u3002\u53ea\u9700\u5bf9\u7f16\u8bd1\u5668\u8fdb\u884c\u5347\u7ea7\uff0c\u4ee5\u83b7\u53d6\u4f18\u52bf\u3002\u7f16\u8bd1\u5668\u662f\u57fa\u4e8e\u8f6f\u4ef6\u5305\u7684\uff0c\u65e0\u9700 Unity \u7f16\u8f91\u5668\u66f4\u65b0\u5373\u53ef\u5347\u7ea7\u3002\u8be5\u7206\u53d1\u5f0f\u7f16\u8bd1\u5668\u8f6f\u4ef6\u5305\u5c06\u4ee5\u81ea\u5df1\u7684\u8282\u594f\u8fdb\u884c\u66f4\u65b0\uff0c\u56e0\u6b64\u60a8\u5c06\u80fd\u591f\u5229\u7528\u6700\u65b0\u7684\u786c\u4ef6\u67b6\u6784\u6539\u8fdb\u548c\u529f\u80fd\uff0c\u800c\u65e0\u9700\u7b49\u5f85\u4ee3\u7801\u5347\u7ea7\u5230\u4e0b\u4e00\u4e2a\u7f16\u8f91\u5668\u7248\u672c\u3002

\n

C#JobSystem

\n

C#\u4f5c\u4e1a\u7cfb\u7edf

\n

\u5927\u591a\u6570\u4f7f\u7528\u591a\u7ebf\u7a0b\u4ee3\u7801\u548c\u901a\u7528\u4efb\u52a1\u7cfb\u7edf\u7684\u4eba\u90fd\u77e5\u9053\u7f16\u5199\u7ebf\u7a0b\u5b89\u5168\u4ee3\u7801\u5f88\u96be\u3002\u7ebf\u7a0b\u4e89\u7528\u60c5\u51b5\u867d\u7136\u5f88\u7f55\u89c1\uff0c\u4f46\u4ecd\u7136\u53ef\u80fd\u4f1a\u53d1\u751f\u3002\u5982\u679c\u7f16\u7a0b\u5458\u6ca1\u6709\u60f3\u5230\u8fd9\u4e2a\u95ee\u9898\uff0c\u53ef\u80fd\u4f1a\u5bfc\u81f4\u6f5c\u5728\u7684\u7a0b\u5e8f\u4e25\u91cd\u9519\u8bef\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u4e0a\u4e0b\u6587\u5207\u6362\u7684\u6210\u672c\uff0cDebug \u7684\u6210\u672c\u5f88\u9ad8\uff0c\u56e0\u6b64\u5b66\u4e60\u5982\u4f55\u5e73\u8861\u5de5\u4f5c\u8d1f\u8f7d\u4ee5\u5c3d\u53ef\u80fd\u9ad8\u6548\u5730\u8de8\u6838\u5fc3\u8fd0\u884c\u662f\u5f88\u56f0\u96be\u7684\u3002\u6700\u540e\uff0c\u7f16\u5199 SIMD \u4f18\u5316\u4ee3\u7801\u6216 SIMD \u5185\u8054\u51fd\u6570\u662f\u4e00\u79cd\u6df1\u5965\u7684\u6280\u80fd\uff0c\u6709\u65f6\u6700\u597d\u4ea4\u7ed9\u7f16\u8bd1\u5668\u53bb\u5b8c\u6210\u3002\u65b0\u7684 Unity C# \u4f5c\u4e1a\u7cfb\u7edf\u4e3a\u60a8\u89e3\u51b3\u6240\u6709\u8fd9\u4e9b\u96be\u9898\uff0c\u4ee5\u4fbf\u60a8\u53ef\u4ee5\u5728\u73b0\u4ee3 CPU \u4e2d\u653e\u5fc3\u5730\u4f7f\u7528\u6240\u6709\u53ef\u7528\u7684\u5185\u6838\u548c SIMD \u77e2\u91cf\u5316\u3002

\n

\u603b\u800c\u8a00\u4e4b\uff0cC#\u7684 JobSystem \u63d0\u4f9b\u4e00\u7cfb\u5217\u7684\u591a\u7ebf\u7a0b\u89e3\u51b3\u65b9\u6848\uff0c\u8ba9\u7f16\u5199\u591a\u7ebf\u7a0b\u7a0b\u5e8f\u66f4\u4e3a\u5b89\u5168\u65b9\u4fbf\u3002

\n

\u5e38\u89c4\u7684 Unity \u5982\u679c\u8981\u5f00\u53d1\u591a\u7ebf\u7a0b\uff0c\u4e0d\u4ec5\u8981\u5f15\u5165\u5916\u90e8\u7684\u5b9e\u73b0\u65b9\u5f0f\uff0cDebug \u8fc7\u7a0b\u4e5f\u662f\u7e41\u7410\u4e0d\u53ef\u89c6\u7684\uff0c\u800c\u5f15\u5165 C#JobSystem\uff0c\u53ef\u4ee5\u8ba9\u7cfb\u7edf\u667a\u80fd\u5316\u7ba1\u7406\u5b89\u6392\u591a\u7ebf\u7a0b\u4efb\u52a1\uff0c\u4f7f\u7528 Unity \u81ea\u8eab\u5c01\u88c5\u7684\u591a\u7ebf\u7a0b\u5b89\u5168\u96c6\u5408\uff08\u4f8b\u5982\uff1aNativeArray<>\uff09\u53ef\u4ee5\u6709\u6548\u9632\u6b62\u7ebf\u7a0b\u51b2\u7a81\u7684\u95ee\u9898\u3002

\n

\u5728\u63a5\u4e0b\u6765\u7684\u6587\u7ae0\u4e2d\uff0c\u6211\u4f1a\u544a\u8bc9\u4f60\u5982\u4f55\u5229\u7528 DOTS \u6765\u7f16\u5199\u4e00\u4e2a ECS \u7a0b\u5e8f\u3002

\n

\u539f\u6587\u94fe\u63a5\uff1a https://connect.unity.com/p/unityecs-yi?app=true

\n

\u6233\u4e0a\u65b9\u94fe\u63a5\u4e0b\u8f7d\u5b98\u65b9 app \u5373\u53ef\u63d0\u524d\u4e86\u89e3\u63a5\u4e0b\u6765\u7684\u6587\u7ae0\uff0c\u8fd8\u6709\u6280\u672f\u793e\u533a\u5728\u7ebf\u7b54\u7591\uff0c\u66f4\u591a\u5b66\u4e60\u8d44\u6e90\u7b49\u4f60\u6765\u53d1\u73b0

\n" }, { "author": { "url": "member/unn", "name": "unn", "avatar": "https://cdn.v2ex.com/gravatar/cfff9ca626c77fa9bdd8a8e7eb3048d0?s=73&d=retro" }, "url": "t/638180", "title": "\u4f7f\u7528 Unity \u5236\u4f5c\u6e38\u620f AI", "id": "t/638180", "date_published": "2020-01-15T08:21:14+00:00", "content_html": "

\u672c\u6587\u8f6c\u81ea Unity Connect \u5b98\u65b9\u6587\u7ae0

\n

\u7b80\u4ecb

\n

\u672c\u6559\u7a0b\u4e3b\u8981\u4ecb\u7ecd\u6e38\u620f AI \u7684\u6982\u5ff5\u548c\u5f00\u53d1\u65b9\u6cd5\u3002\u867d\u7136\u5b9e\u73b0\u8fc7\u7a0b\u662f\u9762\u5411 Unity \u7684\uff0c\u4f46\u6574\u4e2a\u7406\u8bba\u65b9\u6cd5\u53ef\u4ee5\u5e94\u7528\u4e8e\u4efb\u4f55\u5176\u5b83\u6e38\u620f\u5f15\u64ce\u3002

\n

\u672c\u6587\u4ecb\u7ecd\u7684\u6240\u6709\u6982\u5ff5\u90fd\u662f\u6211\u4eec\u56e2\u961f\u5728\u5f00\u53d1\u300a Radiant Blade \u300b\u6e38\u620f\u7684\u539f\u578b\u9636\u6bb5\u5b66\u4e60\u5230\u7684\uff0c\u76ee\u524d\u8be5\u6e38\u620f\u5df2\u7ecf\u5230\u8fbe\u6210\u54c1\u9636\u6bb5\u3002

\n

\u4f7f\u7528\u6e38\u620f AI \u7684\u539f\u56e0

\n

\u5f00\u59cb\u4ecb\u7ecd\u6280\u672f\u5185\u5bb9\u524d\uff0c\u6211\u4eec\u9996\u5148\u8981\u601d\u8003\u4e3a\u4ec0\u4e48\u8981\u4e3a\u6e38\u620f\u6dfb\u52a0 AI\u3002

\n

\u5f88\u957f\u4e00\u6bb5\u65f6\u95f4\u4ee5\u6765\uff0c\u6211\u90fd\u5728\u5e7b\u60f3\u7740\u4e3a\u6e38\u620f\u5f00\u53d1\u4ee4\u4eba\u60ca\u5947\u7684 AI\uff0c\u8ba9 AI \u7ed9\u73a9\u5bb6\u5e26\u6765\u5370\u8c61\u6df1\u523b\u7684\u4f53\u9a8c\u3002\u8fd9\u79cd AI \u53ef\u4ee5\u9884\u6599\u5230\u73a9\u5bb6\u7684\u6bcf\u4e00\u4e2a\u64cd\u4f5c\uff0c\u51e0\u4e4e\u65e0\u6cd5\u88ab\u6253\u8d25\u3002\u4f46\u8bf4\u5b9e\u8bdd\uff0c\u8fd9\u79cd AI \u6beb\u65e0\u5bf9\u6297\u7684\u4e50\u8da3\u3002

\n

\u503c\u5f97\u73a9\u5bb6\u53bb\u73a9\u7684\u6e38\u620f\u5e94\u8be5\u662f\u73a9\u5bb6\u53ef\u4ee5\u83b7\u5f97\u4e50\u8da3\u7684\u6e38\u620f\u3002\u56e0\u6b64\u6211\u4eec\u7684 AI \u5fc5\u987b\u53ef\u4ee5\u548c\u73a9\u5bb6\u65d7\u9f13\u76f8\u5f53\u3002AI \u53ef\u4ee5\u4f5c\u4e3a\u4f19\u4f34\uff0c\u8ba9\u73a9\u5bb6\u901a\u8fc7\u7279\u522b\u7684\u65b9\u6cd5\u8fdb\u884c\u4ea4\u4e92\u3002

\n

\u663e\u7136\uff0c\u53ea\u6709\u4e50\u8da3\u7684\u6e38\u620f\u4e0d\u4f1a\u662f\u4f18\u79c0\u7684\u6e38\u620f\u3002\u6e38\u620f\u4e5f\u5fc5\u987b\u6709\u70ab\u9177\u7684\u673a\u5236\uff0c\u6df1\u523b\u7684\u542b\u4e49\uff0c\u4ee5\u53ca\u7cbe\u7f8e\u7684\u5916\u89c2\u3002\u4f46\u5bf9\u6211\u4eec\u7684 AI \u800c\u8a00\uff0c\u6211\u4eec\u5e0c\u671b AI \u5177\u6709\u5a31\u4e50\u6027\uff0c\u56e0\u6b64\u6211\u4eec\u8981\u8fdb\u4e00\u6b65\u7f29\u5c0f\u8fd9\u4e2a\u6982\u5ff5\u3002

\n

\u6e38\u620f\u8bbe\u8ba1

\n

\u4ec0\u4e48\u662f\u5a31\u4e50\u6027\uff1f\u66f4\u5177\u4f53\u6765\u8bf4\uff0c\u6e38\u620f\u4e2d\u7684\u5a31\u4e50\u6027\u662f\u4ec0\u4e48\uff1f

\n

\u5f00\u53d1\u56e2\u961f\u82b1\u4e86\u4e00\u4e9b\u65f6\u95f4\u601d\u8003\u8fd9\u4e2a\u95ee\u9898\uff0c\u6211\u4eec\u7684\u7ed3\u8bba\u53ef\u4ee5\u603b\u7ed3\u4e3a\u4e00\u4e2a\u8bcd\uff1a\u5b66\u4e60\u3002\u5177\u5907\u5a31\u4e50\u6027\u7684\u6e38\u620f\u662f\u73a9\u5bb6\u53ef\u4ee5\u4ece\u4e2d\u5b66\u4e60\u548c\u5229\u7528\u77e5\u8bc6\u7684\u6e38\u620f\u3002

\n

\u5a31\u4e50\u6027\u6e90\u4e8e\u5c0f\u5c0f\u7684\u597d\u5947\u5fc3\uff0c\u5728\u73a9\u5bb6\u770b\u5230\u65b0\u4e8b\u7269\u65f6\uff0c\u597d\u5947\u5fc3\u4f1a\u5360\u636e\u73a9\u5bb6\u7684\u5934\u8111\uff0c\u5e76\u4f1a\u4e0d\u65ad\u589e\u957f\uff0c\u76f4\u5230\u73a9\u5bb6\u5b8c\u5168\u7406\u89e3\u8fd9\u9879\u65b0\u4e8b\u7269\u3002

\n

\u4e5f\u5c31\u662f\u8bf4\uff0c\u5177\u6709\u5a31\u4e50\u6027\u7684 AI \u5fc5\u987b\u662f\u53ef\u4ee5\u88ab\u73a9\u5bb6\u5b66\u4e60\u7684\u3002

\n

\u8fd9\u4e2a\u7b80\u5355\u7684\u6982\u5ff5\u5f62\u6210\u4e86\u6240\u6709\u6e38\u620f\u4e2d AI \u7684\u5e7f\u6cdb\u7406\u89e3\uff0c\u5305\u62ec\uff1a\u300a\u8d85\u7ea7\u739b\u4e3d\u300b\uff0c\u300a\u6bc1\u706d\u6218\u58eb\u300b\uff0c\u300a\u9b54\u517d\u4e16\u754c\u300b\u548c\u300a\u4ee5\u6492\u7684\u7ed3\u5408\u300b\u3002

\n

\u5982\u679c\u5206\u6790\u8fd9\u4e9b\u6e38\u620f\u7684 AI\uff0c\u6211\u4eec\u4f1a\u53d1\u73b0\u5b83\u4eec\u90fd\u662f\u53ef\u4ee5\u9884\u6d4b\u7684\u3002\u7531\u4e8e\u52a0\u5165\u4e86\u4e00\u4e9b\u968f\u673a\u5143\u7d20\uff0c\u8fd9\u4e9b\u6e38\u620f AI \u4e0d\u662f\u5b8c\u5168\u56fa\u5b9a\u4e0d\u53d8\u7684\uff0c\u4f46\u4ecd\u6709\u9884\u6d4b\u7684\u53ef\u80fd\u3002

\n

\u8fd9\u6837\u53c8\u51fa\u73b0\u4e86\u53e6\u4e00\u4e2a\u95ee\u9898\uff1a\u5982\u4f55\u5236\u4f5c\u51fa\u53ef\u9884\u6d4b\u7684\u6e38\u620f AI \uff1f

\n

\u7b54\u6848\u5f88\u7b80\u5355\uff1a\u4f7f\u7528\u72b6\u6001\u673a\u3002

\n

\u72b6\u6001\u673a

\n

\u72b6\u6001\u673a\u662f\u5305\u542b\u72b6\u6001\u548c\u8fc7\u6e21\u7684\u6570\u5b66\u5de5\u5177\u3002

\n

\u57fa\u672c\u7684\u72b6\u6001\u673a

\n

\u5728\u786e\u5b9a\u6027\u72b6\u6001\u673a\u4e2d\uff0c\u6211\u4eec\u4f1a\u5904\u4e8e\u4e00\u4e2a\u7279\u5b9a\u72b6\u6001\uff0c\u5728\u79fb\u52a8\u65f6\uff0c\u6211\u4eec\u4f1a\u968f\u7740\u5176\u4e2d\u4e00\u4e2a\u53ef\u7528\u8fc7\u6e21\u8f6c\u53d8\u5230\u65b0\u72b6\u6001\u3002\u8fc7\u6e21\u53ef\u80fd\u4f1a\u53d7\u5230\u6761\u4ef6\u9650\u5236\uff0c\u4f8b\u5982\uff1a\u53ea\u6709\u5728\u62e5\u6709\u7279\u5b9a\u6cd5\u672f\u65f6\uff0cAI \u624d\u53ef\u4ee5\u5230\u8fbe\u6307\u5b9a\u72b6\u6001\u3002

\n

\u72b6\u6001\u673a\u7684\u4f18\u70b9\u662f\uff1a\u5b83\u4eec\u5177\u6709\u8868\u73b0\u529b\u548c\u53ef\u9884\u6d4b\u6027\u3002\u4f8b\u5982\uff0c\u5047\u8bbe\u72b6\u6001\u5305\u62ec\u201c\u653b\u51fb\u201d\uff0c\u201c\u53d7\u51fb\u201d\uff0c\u201c\u5954\u8dd1\u81f3\u76ee\u6807\u201d\u548c\u201c\u9003\u8dd1\u201d\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u4e00\u4e9b\u8fc7\u6e21\uff0c\u521b\u5efa\u51fa\u6a21\u62df AI \u57fa\u672c\u884c\u4e3a\u7684\u72b6\u6001\u673a\u3002

\n

\u7b80\u5355\u7684 AI \u793a\u4f8b

\n

\u6211\u4eec\u5236\u4f5c\u7684 AI \u53ef\u4ee5\u7528\u4e0b\u9762\u4e09\u53e5\u8bdd\u63cf\u8ff0\uff1a

\n

\u751f\u547d\u503c\u5728 10%\u4ee5\u4e0b\u65f6\uff0cAI \u4f1a\u9003\u8dd1\u3002

\n

AI \u53ef\u4ee5\u53d7\u5230\u653b\u51fb\u3002

\n

\u73a9\u5bb6\u5904\u5728 AI \u8303\u56f4\u5185\u65f6\uff0cAI \u4f1a\u5411\u73a9\u5bb6\u8dd1\u53bb\uff0c\u7136\u540e\u653b\u51fb\u73a9\u5bb6\u3002

\n

\u8fd9\u610f\u5473\u7740 AI \u5f88\u7b80\u5355\u3002\u7b80\u5355\u662f\u4ef6\u597d\u4e8b\u60c5\u3002\u5982\u679c\u6211\u4eec\u65e0\u6cd5\u7b80\u5355\u5730\u63cf\u8ff0\u81ea\u5df1\u7684 AI\uff0c\u90a3\u4e48\u6211\u4eec\u53ef\u80fd\u9700\u8981\u5bf9 AI \u505a\u8fdb\u4e00\u6b65\u601d\u8003\u3002

\n

\u72b6\u6001\u673a\u548c Unity

\n

\u6211\u4eec\u77e5\u9053\u72b6\u6001\u673a\u5f88\u5389\u5bb3\uff0c\u90a3\u4e48\u6211\u4eec\u662f\u5426\u53ef\u4ee5\u5728 Unity \u4f7f\u7528\u72b6\u6001\u673a\uff1f

\n

\u5f53\u7136\u53ef\u4ee5\u3002

\n

\u5927\u81f4\u7684\u65b9\u6cd5\u6709\u4e09\u79cd\uff1a

\n

\u81ea\u5df1\u5f00\u53d1\uff1b

\n

\u4f7f\u7528 Animator \u5b9e\u73b0\uff1b

\n

\u4ece Asset Store \u8d44\u6e90\u5546\u5e97\u83b7\u53d6\u76f8\u5e94\u8d44\u6e90\u3002

\n

\u7531\u4e8e\u72b6\u6001\u673a\u662f\u6e38\u620f\u4e2d\u5f88\u5e38\u89c1\u7684\u5de5\u5177\uff0c\u6211\u4e0d\u5efa\u8bae\u5f00\u53d1\u8005\u81ea\u5df1\u5f00\u53d1\u72b6\u6001\u673a\uff0c\u56e0\u4e3a\u5df2\u7ecf\u6709\u5f88\u591a\u4eba\u5b9e\u73b0\u8fc7\u72b6\u6001\u673a\uff0c\u9664\u975e\u5f00\u53d1\u8005\u5e0c\u671b\u5b66\u4e60\u600e\u4e48\u901a\u8fc7\u4ee3\u7801\u5b9e\u73b0\u72b6\u6001\u673a\uff0c\u5426\u5219\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u83b7\u53d6\u53ef\u4ee5\u4f7f\u7528\u7684\u72b6\u6001\u673a\u3002

\n

\u7b2c\u4e8c\u79cd\u65b9\u6cd5\u662f\u4f7f\u7528 Unity \u7684\u5185\u7f6e Animator \u529f\u80fd\u3002\u867d\u7136\u8fd9\u4e2a\u540d\u79f0\u4e0d\u592a\u597d\u7406\u89e3\uff0c\u4f46\u5b83\u5176\u5b9e\u662f\u4e00\u79cd\u53ef\u4ee5\u64ad\u653e\u52a8\u753b\u7684\u72b6\u6001\u673a\u3002\u4f46\u5728 Animator \u4e2d\uff0c\u6211\u4eec\u4e0d\u4e00\u5b9a\u8981\u4f7f\u7528\u52a8\u753b\uff0c\u5982\u679c\u4e0d\u4f7f\u7528\u52a8\u753b\u7684\u8bdd\uff0c\u5b83\u7684\u5de5\u4f5c\u65b9\u5f0f\u548c\u72b6\u6001\u673a\u4e00\u6837\u3002

\n

Animator \u4f7f\u7528\u8d77\u6765\u5feb\u6377\u800c\u76f4\u89c2\u3002

\n

\u300a Radiant Blade \u300b\u4e2d\u4f7f\u7528 Unity Animator \u5b9e\u73b0\u7684\u5f13\u7bad\u624b AI

\n

\u7b2c\u4e09\u79cd\u65b9\u6cd5\u662f\u4ece Asset Store \u8d44\u6e90\u5546\u5e97\u83b7\u53d6\u76f8\u5173\u8d44\u6e90\u3002\u6211\u4eec\u6ca1\u6709\u8bd5\u8fc7\u8fd9\u4e2a\u65b9\u6cd5\uff0c\u4f46\u6211\u4eec\u76f8\u4fe1\u5e94\u8be5\u4e0d\u5c11\u8d44\u6e90\u6709\u548c Animator \u4e00\u6837\u4e0d\u9519\u7684\u6548\u679c\u3002

\n

\u5982\u679c\u4f60\u4f7f\u7528\u8fc7\u6bd4 Animator \u66f4\u597d\u7684\u8d44\u6e90\uff0c\u8bf7\u6765\u544a\u8bc9\u6211\u4eec\u3002

\n

Animator

\n

\u6216\u8bb8\u4f60\u4f7f\u7528\u8fc7 Animator \u5728 Unity \u4e2d\u5b9e\u73b0\u6807\u51c6\u52a8\u753b\uff0c\u4f46\u6211\u4eec\u5728\u6b64\u4f1a\u6839\u636e\u9700\u6c42\u8c03\u6574\u4e00\u4e9b\u65b9\u6cd5\u3002

\n

\u4e0b\u9762\u5f00\u59cb\u5427\u3002

\n

\u72b6\u6001

\n

\u901a\u5e38\uff0cAnimator \u7684\u72b6\u6001\u5305\u542b\u52a8\u753b\u3002\u6211\u4eec\u6ca1\u6709\u8fd9\u6837\u4f7f\u7528\uff0c\u800c\u662f\u628a\u72b6\u6001\u5173\u8054\u5230\u63cf\u8ff0\u884c\u4e3a\u7684\u4ee3\u7801\u3002

\n

\u4e3a\u4e86\u6f14\u793a\u8fd9\u4e00\u70b9\uff0c\u6211\u4eec\u73b0\u5728\u67e5\u770b\u5b9a\u4e49\u5f13\u7bad\u624b\u7684\u6e38\u620f\u5bf9\u8c61\u3002

\n

Behaviours \u5bf9\u8c61\u7684\u5b50\u5bf9\u8c61\u662f AI \u884c\u4e3a\u3002\u5b83\u4eec\u5176\u5b9e\u662f\u5c0f\u578b\u63a7\u5236\u5668\uff0c\u5728\u5bf9\u5e94\u72b6\u6001\u6fc0\u6d3b\u65f6\uff0c\u5b83\u4eec\u4f1a\u63a7\u5236\u5f13\u7bad\u624b\u3002

\n

\u5728 Shoot \u72b6\u6001\u6fc0\u6d3b\u65f6\uff0c\u4f1a\u5728\u5f13\u7bad\u624b\u4e0a\u4f7f\u7528 Shoot Behaviour \u811a\u672c

\n

\u8fd9\u662f\u57fa\u4e8e\u72b6\u6001\u7684\u5bf9\u8c61\u3002\u5728\u5b8c\u6210\u884c\u4e3a\u540e\uff0cShoot Behaviour \u4f1a\u901a\u77e5 Animator\u3002Animator \u5185\u7f6e\u7684\u84dd\u8272\u8fdb\u5ea6\u6761\u53ef\u80fd\u4f1a\u8ba9\u4eba\u8ff7\u60d1\uff0c\u4f46\u5b83\u53ea\u5728\u5916\u89c2\u4e0a\u8d77\u5230\u4f5c\u7528\u3002

\n

\u53d8\u91cf

\n

\u8fd9\u91cc\u7684 AI \u8bbe\u8ba1\u662f\u54cd\u5e94\u5f0f\u7cfb\u7edf\uff0c\u5b83\u4f1a\u968f\u6761\u4ef6\u800c\u53d8\u5316\uff0c\u90a3\u4e48\u6761\u4ef6\u662f\u4ec0\u4e48\u5462\uff1f\u5f53\u7136\u662f\u73a9\u5bb6\u548c\u73af\u5883\u3002

\n

Animator \u7684\u53d8\u91cf\u7528\u4e8e\u63cf\u8ff0\u6e38\u620f\u7684\u72b6\u6001\uff0c\u4ee5\u53ca\u505a\u51fa\u5df2\u77e5\u51b3\u7b56\u3002

\n

\u4e0a\u56fe\u662f\u5f13\u7bad\u624b\u4f7f\u7528\u7684\u53d8\u91cf\uff0c\u5b83\u4eec\u63cf\u8ff0\u4e86\u5f62\u6210 AI \u7684\u6240\u6709\u8981\u7d20

\n

\u8fd9\u662f\u4e00\u9879\u91cd\u8981\u7684\u6982\u5ff5\u3002\u5728\u4ee5\u4f20\u7edf\u65b9\u6cd5\u4f7f\u7528 Animator \u65f6\uff0c\u5927\u591a\u6570\u72b6\u6001\u8fc7\u6e21\u4f1a\u968f\u7740\u5173\u8054\u52a8\u753b\u7ed3\u675f\u800c\u7ed3\u675f\u3002\u5bf9\u4e8e AI \u6765\u8bf4\uff0c\u72b6\u6001\u5c31\u662f\u884c\u4e3a\uff0c\u5b83\u4f1a\u5728\u672a\u5b9a\u4e49\u7684\u65f6\u95f4\u5185\u4fdd\u5b58\u6e38\u620f\u903b\u8f91\u3002

\n

\u6211\u4eec\u4f7f\u7528\u4e86\u4e24\u4e2a\u53d8\u91cf\uff0c\u5b83\u4eec\u7684\u4f5c\u7528\u662f\u901a\u77e5\u72b6\u6001\u7684\u7ed3\u675f\uff0c\u5373 behaviour_ended \u548c behaviour_error\u3002\u5b83\u4eec\u662f\u72b6\u6001\u7684\u8f93\u51fa\u7ed3\u679c\uff0c\u8868\u793a\u72b6\u6001\u6210\u529f\u7ed3\u675f\uff0c\u6216\u662f\u51fa\u73b0\u9519\u8bef\u3002

\n

\u8fc7\u6e21

\n

\u8fc7\u6e21\u5b9a\u4e49\u4e86 AI \u884c\u4e3a\u7684\u6539\u53d8\u8fc7\u7a0b\uff0c\u8868\u793a\uff1a\u5f53 AI \u5b8c\u6210\u5411\u76ee\u6807\u884c\u8d70\u7684\u8fc7\u7a0b\u540e\uff0c\u5b83\u5e94\u8be5\u8981\u505a\u4ec0\u4e48\u3002

\n

\u793a\u4f8b\u8fc7\u6e21\uff1a\u5982\u679c\u76ee\u6807\u5728\u8fd1\u6218\u8303\u56f4\u5185\uff0cAI \u4f1a\u8fdb\u884c\u653b\u51fb

\n

\u5bf9 Unity \u7684 Animator\uff0c\u6709\u4e9b\u5f00\u53d1\u8005\u53ef\u80fd\u4e0d\u77e5\u9053\u7684\u662f\uff1a\u8fc7\u6e21\u662f\u6709\u5148\u540e\u987a\u5e8f\u7684\u3002\u7279\u5b9a\u8fc7\u6e21\u4f1a\u88ab\u9996\u5148\u8bc4\u4f30\uff0c\u4ec5\u5728\u5b83\u7684\u76f8\u5173\u6761\u4ef6\u4e3a\u5047\u65f6\uff0c\u7b2c\u4e8c\u4e2a\u8fc7\u6e21\u624d\u4f1a\u8fdb\u884c\u8bc4\u4f30\u3002

\n

\u9009\u4e2d Neutral \u72b6\u6001\u65f6\uff0c\u6211\u4eec\u53ef\u4ee5\u67e5\u770b\u8fc7\u6e21\u7684\u4f18\u5148\u7ea7

\n

\u8fd9\u9879\u529f\u80fd\u5f88\u4e0d\u9519\uff0c\u56e0\u4e3a\u5b83\u5141\u8bb8\u6211\u4eec\u628a AI \u8bbe\u8ba1\u4e3a\u4e2d\u5fc3\u5927\u8111\uff0c\u6839\u636e\u4f18\u5148\u7ea7\u6765\u505a\u51fa\u5408\u9002\u7684\u9009\u62e9\u3002

\n

\u662f\u5426\u8fd8\u8bb0\u5f97\u6211\u4eec\u4e4b\u524d\u5c55\u793a\u7684\u5f13\u7bad\u624b AI \uff1f\u8bf7\u6ce8\u610f AI \u7684\u987a\u5e8f\u548c\u4e2d\u5fc3\u90e8\u5206\u3002Neutral \u8282\u70b9\u662f\u51b3\u7b56\u4e2d\u5fc3\uff0c\u5b83\u7684\u4e3b\u8981\u5de5\u4f5c\u8fc7\u7a0b\u5982\u4e0b\uff1a

\n

\u5982\u679c\u6ca1\u6709\u73a9\u5bb6\u7684\u8bdd\uff0cAI \u505c\u6b62\u6218\u6597\uff1b

\n

\u5982\u679c\u73a9\u5bb6\u8ddd\u79bb\u8f83\u8fdc\uff0cAI \u5411\u73a9\u5bb6\u79fb\u52a8\uff0c\u8fdb\u5165\u5c04\u51fb\u8303\u56f4\uff1b

\n

\u5982\u679c\u73a9\u5bb6\u4e0d\u5728 AI \u7684\u89c6\u7ebf\u65b9\u5411\uff0cAI \u5411\u73a9\u5bb6\u79fb\u52a8\uff0c\u4ece\u800c\u80fd\u591f\u8fdb\u884c\u5c04\u51fb\uff1b

\n

\u5982\u679c\u5904\u4e8e\u8fd1\u6218\u8303\u56f4\uff0c\u5219\u8fdb\u884c\u8fd1\u6218\u653b\u51fb\uff1b

\n

\u5982\u679c\u73a9\u5bb6\u8fc7\u4e8e\u63a5\u8fd1 AI\uff0cAI \u53ef\u80fd\u4f1a\u5411\u540e\u9000\uff1b

\n

AI \u6709\u53ef\u80fd\u968f\u673a\u6539\u53d8\u548c\u73a9\u5bb6\u7684\u65b9\u5411\uff1b

\n

AI \u4f1a\u5411\u73a9\u5bb6\u5c04\u51fb\u3002

\n

\u8be5\u529f\u80fd\u7684\u597d\u5904\u5728\u4e8e\uff0c\u6bcf\u4e2a\u5355\u72ec\u7684\u8fc7\u6e21\u90fd\u975e\u5e38\u7b80\u5355\uff1a\u8fc7\u6e21\u4f1a\u603b\u7ed3\u4e3a\u4e00\u6b21\u6d4b\u8bd5\uff0c\u6216\u751a\u81f3\u6ca1\u6709\u6d4b\u8bd5\u3002\u4f7f\u7528\u540e\u7eed\u8fc7\u6e21\u7684\u524d\u63d0\u662f\u4e4b\u524d\u7684\u8fc7\u6e21\u6761\u4ef6\u5fc5\u987b\u4e3a\u5047\u3002

\n

\u5b9e\u73b0\u65b9\u6cd5

\n

\u4ece\u8fd9\u90e8\u5206\u5f00\u59cb\uff0c\u6211\u4eec\u5e94\u8be5\u4f1a\u5f00\u59cb\u4e86\u89e3\u5177\u4f53\u64cd\u4f5c\u3002\u4f60\u662f\u5426\u6ce8\u610f\u5230\uff0c\u5230\u73b0\u5728\u6211\u8fd8\u672a\u63d0\u4f9b\u8fc7\u4efb\u4f55\u76f8\u5173\u4ee3\u7801\u3002

\n

\u8fd9\u4e2a\u72b6\u6001\u4e0d\u9519\uff0c\u56e0\u4e3a\u8fd9\u610f\u5473\u7740\u6211\u4eec\u7684\u6846\u67b6\u6709\u8db3\u591f\u9ad8\u7684\u62bd\u8c61\u7ea7\uff0c\u4e0d\u5fc5\u5904\u7406\u4efb\u4f55\u6280\u672f\u7ec6\u8282\uff0c\u5c31\u53ef\u4ee5\u5f88\u597d\u8fdb\u884c\u89e3\u91ca\u3002\u5728\u4ee3\u7801\u90e8\u5206\u5b8c\u6210\u540e\uff0c\u8bbe\u8ba1 AI \u7684\u8fc7\u7a0b\u975e\u5e38\u76f4\u89c2\u3002

\n

\u6211\u4eec\u9700\u8981\u4ec0\u4e48

\n

\u4e0b\u9762\u662f\u5b9e\u73b0 AI \u7684\u4efb\u52a1\uff1a

\n

\u7f16\u5199 AI \u884c\u4e3a\uff1b

\n

\u628a Animator \u548c\u53ef\u7528\u884c\u4e3a\u5173\u8054\uff1b

\n

\u4e3a Animator \u66f4\u65b0\u6e38\u620f\u76f8\u5173\u53d8\u91cf\u7684\u5217\u8868\u3002

\n

\u884c\u4e3a

\n

\u5f00\u59cb\u5904\u7406\u524d\uff0c\u9996\u5148\u56de\u987e\u884c\u4e3a\u7684\u529f\u80fd\u3002

\n

\u884c\u4e3a\u4f1a\u548c\u6e38\u620f\u7684\u89d2\u8272\u63a7\u5236\u5668\u4e00\u8d77\u5de5\u4f5c\uff1b

\n

\u884c\u4e3a\u53ef\u4ee5\u88ab\u8bc6\u522b\uff1b

\n

\u884c\u4e3a\u53ef\u4ee5\u88ab\u542f\u7528\uff1b

\n

\u884c\u4e3a\u53ef\u4ee5\u6210\u529f\u5b8c\u6210\uff1b

\n

\u884c\u4e3a\u4e5f\u53ef\u4ee5\u51fa\u73b0\u9519\u8bef\uff1b

\n

\u884c\u4e3a\u53ef\u4ee5\u88ab\u4e2d\u65ad\uff1b

\n

\u5927\u6982\u5c31\u662f\u8fd9\u6837\u3002

\n

public abstract class AbstractAIBehaviour : MonoBehaviour {

\n
// \u89d2\u8272\u7531\u884c\u4e3a\u63a7\u5236\n\n[SerializeField]\n\nprotected CharController charController;\n\n// \u5fc5\u987b\u8fd4\u56de\u5bf9\u5e94\u884c\u4e3a\u7684 Animator \u72b6\u6001\u7684\u77ed\u54c8\u5e0c\u503c\u3002\n\nabstract public int GetBehaviourHash();\n\n// \u5728\u884c\u4e3a\u6210\u529f\u7ed3\u675f\u65f6\u8c03\u7528\u7684\u4e8b\u4ef6\u3002\n\npublic event Action OnBehaviourEnded;\n\n// \u5728\u884c\u4e3a\u5931\u8d25\u65f6\uff0c\u8981\u8c03\u7528\u7684\u4e8b\u4ef6\n\npublic event Action OnBehaviourError;\n\n// OnEnable()\n\n// OnDisable()\n\n// enable = true/false;\n
\n

}

\n

\u5bf9\u4e8e\u542f\u7528\u548c\u7981\u7528\u90e8\u5206\uff0c\u6211\u4eec\u4f1a\u5229\u7528 Unity \u7684\u5185\u7f6e\u65b9\u6cd5\uff0c\u8fd9\u91cc\u4e0d\u5fc5\u81ea\u5df1\u7f16\u5199\u65b9\u6cd5\u3002

\n

\u6211\u4eec\u4f1a\u4f7f\u7528\u7b80\u6d01\u7684 API\u3002

\n

\u5bf9\u4e8e\u8bc6\u522b\u7b26\uff0c\u6211\u521b\u5efa\u4e86\u5e26\u6709\u7279\u6b8a\u540d\u79f0\u7684\u65b9\u6cd5\uff1aGetBehaviourHash\u3002\u56e0\u4e3a Animator \u72b6\u6001\u7684\u8bc6\u522b\u65b9\u5f0f\u662f\uff1a\u72b6\u6001\u7684\u8bc6\u522b\u7b26\u662f\u5176\u540d\u79f0\u7684\u54c8\u5e0c\u503c\u3002https://docs.unity3d.com/ScriptReference/Animator.StringToHash.html

\n

\u56e0\u6b64\u5bf9\u4e8e Shoot \u72b6\u6001\uff0c\u5bf9\u5e94\u7684\u8bc6\u522b\u7b26\u662f Animator.StringToHash(\u201cShoot\u201d)\u3002

\n

\u4e3a\u4e86\u5f04\u6e05\u695a\u5bf9\u8c61\uff0c\u907f\u514d\u518d\u6b21\u8ba1\u7b97\u76f8\u540c\u7684\u54c8\u5e0c\u503c\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u5b83\u4eec\u4fdd\u5b58\u4e3a\u9759\u6001\u53d8\u91cf\uff1a

\n

/**

\n\n

*/

\n

public class BehaviourHashes {

\n
// \u6211\u4eec\u4f1a\u4f7f\u7528\u884c\u4e3a\uff0c\u8ba9\u89d2\u8272\u5411\u76ee\u6807\u79fb\u52a8\u3002\n\nstatic public readonly int OBJ_MOVETO_STATE = Animator.StringToHash(\"Obj MoveTo\");\n\n// \u6211\u4eec\u4f1a\u4f7f\u7528\u884c\u4e3a\uff0c\u8ba9\u89d2\u8272\u4ec0\u4e48\u90fd\u4e0d\u505a\u3002\n\nstatic public readonly int IDLE_STATE = Animator.StringToHash(\"Idle\");\n\n// \u6b64\u65f6\u89d2\u8272\u4f1a\u6f2b\u65e0\u76ee\u7684\u5730\u56db\u5904\u79fb\u52a8\u3002\n\nstatic public readonly int ROAM_STATE = Animator.StringToHash(\"Roam\")\n\n// ...\n
\n

}

\n

\u8003\u8651\u5230\u8fd9\u70b9\uff0cAbstractAIBehaviour \u7684\u5b9e\u73b0\u4ee3\u7801\u5982\u4e0b\uff1a

\n

// \u5fc5\u987b\u8fd4\u56de\u5bf9\u5e94\u884c\u4e3a\u7684 Animator \u72b6\u6001\u7684\u77ed\u54c8\u5e0c\u503c\u3002

\n
public override int GetBehaviourHash()\n\n{\n\n // Animator \u4e2d\u7684\u72b6\u6001\u540d\u79f0\u4e3a Idle\u3002\n\n return BehaviourHashes.IDLE_STATE;\n\n}\n
\n

\u6211\u4eec\u4f1a\u628a\u6bcf\u4e2a\u54c8\u5e0c\u503c\u5b58\u5230\u5bf9\u5e94\u7684\u811a\u672c\u4e2d\uff0c\u56e0\u6b64 ROAM_STATE \u53ef\u4ee5\u4fdd\u5b58\u5728 RoamBehaviour \u7c7b\u4e2d\u3002

\n

\u552f\u4e00\u7684\u95ee\u9898\u5728\u4e8e\uff1a\u7531\u4e8e\u6211\u4eec\u6697\u4e2d\u628a\u6bcf\u4e2a\u884c\u4e3a\u5173\u8054\u5230\u540d\u79f0\uff0c\u56e0\u6b64\u53ef\u80fd\u5f88\u96be\u6253\u5f00\u6bcf\u4e2a\u884c\u4e3a\u7c7b\uff0c\u4ece\u800c\u6536\u96c6 Animator \u72b6\u6001\u7684\u6388\u6743\u540d\u79f0\u3002

\n

\u4ece\u6b64\u5f00\u59cb\uff0c\u6211\u4eec\u7684\u5de5\u4f5c\u662f\u4e3a\u771f\u5b9e\u884c\u4e3a\u7f16\u5199\u5b9e\u9645\u7684\u4ee3\u7801\uff0c\u4f46\u8fd9\u53d6\u51b3\u4e8e\u5f00\u53d1\u8005\uff0c\u56e0\u4e3a\u8fd9\u8981\u6839\u636e\u81ea\u5df1\u7684\u6e38\u620f\u6765\u5b9e\u73b0\u3002\u6211\u4eec\u9700\u8981\u505a\u7684\u662f\u5b9e\u73b0 AbstractAIBehaviour \u7684\u5b50\u7c7b\u3002

\n

\u5173\u8054\u884c\u4e3a\u548c Animator

\n

\u6211\u4eec\u7684 AI \u7684\u884c\u4e3a\u53ef\u4ee5\u88ab\u8bc6\u522b\uff0c\u76d1\u542c\uff0c\u542f\u7528\u548c\u7981\u7528\u3002\u73b0\u5728\u6211\u4eec\u8981\u5229\u7528\u884c\u4e3a\u3002

\n

\u6211\u4eec\u8981\u4ece\u63a7\u5236\u5668\u5f00\u59cb\uff0c\u7531\u4e8e\u6211\u4eec\u6709\u591a\u4e2a\u4e92\u76f8\u72ec\u7acb\u7684\u5b9e\u4f53\uff0c\u6211\u4eec\u9700\u8981\u540c\u6b65\u5b83\u4eec\uff0c\u5b9e\u73b0\u6d41\u7545\u7684\u5de5\u4f5c\u6548\u679c\u3002

\n

\u8be5\u63a7\u5236\u5668\u7684\u76ee\u7684\u662f\u786e\u4fdd\u6bcf\u6b21\u53ea\u542f\u7528\u4e00\u4e2a\u884c\u4e3a\uff0c\u5e76\u63d0\u4f9b\u4fee\u6539\u5f53\u524d\u884c\u4e3a\u7684\u5207\u5165\u70b9\u3002

\n

\u4e00\u4e9b\u5f00\u53d1\u8005\u53ef\u80fd\u4e0d\u77e5\u9053\u5e94\u8be5\u4f55\u65f6\u7ed9\u6e38\u620f\u6dfb\u52a0\u65b0\u63a7\u5236\u5668\u7684\u7c7b\u3002\u597d\u7684\u4e60\u60ef\u662f\u628a\u63a7\u5236\u5668\u770b\u4f5c\u7528\u6765\u540c\u6b65\u591a\u4e2a\u8f83\u5c0f\u529f\u80fd\u7684\u4ee3\u7801\u3002

\n

/**

\n\n

*/

\n

public class AIBehaviourController

\n
/**\n\n* Contains the available Behaviours.\n\n* \u5305\u542b\u53ef\u7528\u884c\u4e3a\n\n*\n\n* The key of a Behaviour is the value returned by its GetBehaviourHash method.\n\n* \u884c\u4e3a\u7684\u5173\u952e\u662f GetBehaviourHash \u65b9\u6cd5\u8fd4\u56de\u7684\u6570\u503c\n\n*/\n\nprotected Dictionary<int, AbstractAIBehaviour> behaviours = new Dictionary<int, AbstractAIBehaviour>();\n\n// AI \u7684 Animator\n\nprivate Animator stateMachine;\n\n// \u6b63\u5728\u6267\u884c\u7684\u884c\u4e3a\n\nprivate AbstractAIBehaviour currentBehaviour; \n\n// \u5fc5\u987b\u5b58\u5728 AI Animator \u4e2d\u7684\u89e6\u53d1\u5668\n\npublic static readonly int BEHAVIOUR_ENDED = Animator.StringToHash(\"behaviour_ended\");\n\npublic static readonly int BEHAVIOUR_ERROR = Animator.StringToHash(\"behaviour_error\");\n\n/**\n\n* \u5f3a\u5236\u67d0\u4e2a\u884c\u4e3a\u4e2d\u65ad\u6b63\u5728\u6267\u884c\u7684\u884c\u4e3a\n\n*/\n\npublic void SetBehaviour(int behaviorHash)\n\n{\n\n // \u5b89\u5168\u5730\u7981\u7528\u5f53\u524d\u884c\u4e3a\n\n if (currentBehaviour)\n\n currentBehaviour.enabled = false;\n\n try\n\n {\n\n // \u5f00\u59cb\u65b0\u7684\u884c\u4e3a\n\n currentBehaviour = behaviours[behaviorHash];\n\n currentBehaviour.enabled = true;\n\n }\n\n catch (KeyNotFoundException)\n\n {\n\n currentBehaviour = null;\n\n }\n\n}\n\nvoid Awake()\n\n{\n\n stateMachine = GetComponent<Animator>();\n\n // \u5bf9\u4e8e\u6bcf\u4e2a\u5b50\u5bf9\u8c61\n\n foreach (AbstractAIBehaviour behaviour in GetComponentsInChildren<AbstractAIBehaviour>())\n\n {\n\n // \u6ce8\u518c\u884c\u4e3a\n\n behaviours.Add(behaviour.GetBehaviourHash(), behaviour);\n\n // \u76d1\u542c\u884c\u4e3a\n\n behaviour.OnBehaviourEnded += OnBehaviourEnded;\n\n behaviour.OnBehaviourError += OnBehaviourError;\n\n }\n\n}\n\n/**\n\n* \u5728\u884c\u4e3a\u7ed3\u675f\u65f6\uff0c\u901a\u77e5 AI \u7684 Animator\n\n*/\n\nprivate void OnBehaviourEnded()\n\n{\n\n stateMachine.SetTrigger(BEHAVIOUR_ENDED);\n\n}\n\n/**\n\n* \u5728\u884c\u4e3a\u5931\u8d25\u65f6\uff0c\u901a\u77e5 AI \u7684 Animator\n\n*/\n\nprivate void OnBehaviourError()\n\n{\n\n stateMachine.SetTrigger(BEHAVIOUR_ERROR);\n\n}\n
\n

}

\n

\u8fd9\u4e2a\u7c7b\u6bd4\u8f83\u957f\uff0c\u4f46\u662f\u4ee3\u7801\u5176\u5b9e\u5f88\u7b80\u5355\uff1a

\n

\u5b57\u5178\u5305\u542b\u6211\u4eec\u5df2\u77e5\u7684\u884c\u4e3a\uff1b

\n

\u65b9\u6cd5\u53ef\u4ee5\u6fc0\u6d3b\u7279\u5b9a\u884c\u4e3a\uff1b

\n

\u4e24\u4e2a\u4e8b\u4ef6\u7528\u4e8e\u5728\u884c\u4e3a\u7ed3\u675f\u65f6\u901a\u77e5 Animator\u3002

\n

\u6709\u4e86\u5207\u5165\u70b9\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u5b83\u548c Animator \u8fde\u63a5\u8d77\u6765\u3002\u600e\u4e48\u8fde\u63a5\u5462\uff1f\u6211\u4eec\u4f1a\u4f7f\u7528\u4e00\u4e2a\u4e0d\u5e38\u7528\u7684\u529f\u80fd\uff1aStateMachineBehaviour\u3002

\n

\u9009\u4e2d Animator \u65f6\uff0c\u5982\u679c\u5728\u7a7a\u767d\u5904\u5355\u51fb\u5de6\u952e\uff0c\u6211\u4eec\u4f1a\u805a\u7126 Animator \u672c\u8eab\uff0c\u5e76\u663e\u793a Animator \u7684\u9690\u85cf\u68c0\u89c6\u7a97\u53e3

\n

StateMachineBehaviour \u7684\u529f\u80fd\u662f\u4ec0\u4e48\uff1f\u5b83\u5141\u8bb8\u6211\u4eec\u5411 Animator \u63d2\u5165\u81ea\u5b9a\u4e49\u4ee3\u7801\u3002\u6211\u4eec\u8981\u600e\u4e48\u4f7f\u7528\u5b83\u5462\uff1f

\n

\u6211\u4eec\u4f1a\u5728 Animator \u7684\u72b6\u6001\u53d8\u5316\u65f6\uff0c\u8c03\u7528\u6211\u4eec\u7684 AIBehaviourController\u3002

\n

/**

\n\n

*/

\n

public class AIStateController : StateMachineBehaviour {

\n
/**\n\n* \u5728 Animator \u8fdb\u5165\u65b0\u72b6\u6001\u65f6\uff0c\u901a\u77e5 AI \u63a7\u5236\u5668\u3002\n\n*/\n\noverride public void OnStateEnter(Animator animator, AnimatorStateInfo info, int layerIndex)\n\n{\n\n if (!animator.GetComponent<AIBehaviourController>().SetBehaviour(animatorStateInfo.shortNameHash))\n\n {\n\n // \u5982\u679c\u72b6\u6001\u4e0d\u5b58\u5728\uff0c\u90a3\u4e48\u628a\u5b83\u8bbe\u4e3a\u51b3\u7b56\u4e2d\u5fc3\u3002\n\n // \u5f3a\u5236 Animator \u76f4\u63a5\u8bc4\u4f30\u8be5\u72b6\u6001\u3002\n\n animator.Update(0f);\n\n }\n\n}\n
\n

}

\n

\u8fd9\u4e9b\u4ee3\u7801\u975e\u5e38\u76f4\u89c2\uff0c\u5b83\u4f1a\u5904\u7406 Unity \u7684\u4e00\u4e2a\u7279\u522b\u4e4b\u5904\uff1aAnimator \u65e0\u6cd5\u5728\u6bcf\u5e27\u5904\u7406\u591a\u4e2a\u72b6\u6001\uff0c\u56e0\u6b64\u5728\u6211\u4eec\u904d\u5386\u51b3\u7b56\u4e2d\u5fc3\u65f6\uff0c\u4f1a\u9020\u6210\u77ed\u6682\u7684\u5ef6\u8fdf\u3002

\n

\u5e78\u8fd0\u7684\u662f\uff0c\u89e3\u51b3\u65b9\u6cd5\u5f88\u7b80\u5355\uff0c\u6211\u4eec\u53ef\u4ee5\u5f3a\u884c\u6267\u884c Update \u65b9\u6cd5\uff0c\u5f3a\u5236 Animator \u5904\u7406\u72b6\u6001\u3002

\n

\u901a\u8fc7\u4f7f\u7528\u6211\u4eec\u7684\u65b0\u7c7b\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u529f\u80fd\u7ed3\u5408\u8d77\u6765\uff0c\u53ea\u8981\u628a\u8be5\u811a\u672c\u6dfb\u52a0\u5230 AI \u7684 Animator \u5373\u53ef\u3002

\n

\u73b0\u5728\u8fdb\u5165\u65b0\u72b6\u6001\u65f6\uff0c\u6211\u4eec\u7684 AI Animator \u4f1a\u8c03\u7528 AIBehaviourController

\n

\u6700\u540e\uff0c\u6211\u4eec\u6709\u6846\u67b6\u7684\u4e09\u4e2a\u7c7b\u90e8\u5206\uff0c\u5b50\u7c7b\uff0c\u4ee5\u53ca\u89d2\u8272\u63a7\u5236\u5668\uff0c\u5b83\u4eec\u5305\u542b\u7740\u5b9e\u9645\u7684\u6e38\u620f\u903b\u8f91\u3002

\n

\u7ec4\u5408\u6210 AI \u6846\u67b6\u7684\u5c0f\u578b\u7c7b\u56fe\u793a

\n

\u5305\u542b\u6e38\u620f\u903b\u8f91

\n

\u603b\u800c\u8a00\u4e4b\uff0c\u6280\u672f\u65b9\u9762\u7684\u89e3\u51b3\u65b9\u6cd5\u53ef\u4ee5\u603b\u7ed3\u4e3a\u4e09\u4e2a\u7c7b\uff0c\u6bcf\u4e2a\u7c7b\u90fd\u975e\u5e38\u7b80\u6d01\u3002

\n

\u6211\u4eec\u8fd8\u9700\u8981\u4ec0\u4e48\u5462\uff1f\u5f53\u7136\u662f\u6e38\u620f\u672c\u8eab\u4e86\u3002\u4f46\u8fd9\u4e2a\u90e8\u5206\u5fc5\u987b\u7531\u5f00\u53d1\u8005\u81ea\u5df1\u5236\u4f5c\u3002

\n

\u603b\u4e4b\uff0c\u5b9e\u73b0\u81ea\u5df1\u7684 AI \u9700\u8981\u7684\u5185\u5bb9\u5982\u4e0b\uff1a

\n

\u4e00\u4e2a\u89d2\u8272\u63a7\u5236\u5668\uff0c\u8d1f\u8d23\u89d2\u8272\u548c\u5176\u6e32\u67d3\u7684\u5b9e\u9645\u903b\u8f91\uff1b

\n

\u53d8\u91cf\uff0c\u4ee5\u53ca\u8ba9\u53d8\u91cf\u4e0e Animator \u4fdd\u6301\u540c\u6b65\u7684\u4ee3\u7801\uff1b

\n

\u81ea\u5b9a\u4e49\u884c\u4e3a\uff0c\u4f8b\u5982\uff1a\u653b\u51fb\uff0c\u79fb\u52a8\u3002

\n

\u6b64\u65f6\u6211\u4eec\u8981\u5904\u7406\u7684\u90fd\u662f\u5e38\u89c1\u7684 Unity \u6807\u51c6\u4ee3\u7801\u3002

\n

\u53d8\u91cf\uff0cAnimator \u548c\u884c\u4e3a\u90fd\u534f\u540c\u5de5\u4f5c

\n

\u539f\u6587\u94fe\u63a5\uff1a https://connect.unity.com/p/creating-an-a-i-with-unity-shi-yong-unityzhi-zuo-you-xi-ai?app=true

\n

\u5404\u4f4d\u5728\u5f00\u53d1\u8fc7\u7a0b\u4e2d\u9047\u5230\u95ee\u9898\uff1f\u6b22\u8fce\u5927\u5bb6\u6233\u4e0a\u65b9\u94fe\u63a5\uff0c\u4e0b\u8f7d\u5b98\u65b9 app\uff0c\u53ef\u5728\u7ebf\u7b54\u7591\u54e6\uff0c\u8fd8\u6709\u66f4\u591a\u5b66\u4e60\u8d44\u6e90\u7b49\u4f60\u6765\u53d1\u73b0\uff5e

\n" }, { "author": { "url": "member/unn", "name": "unn", "avatar": "https://cdn.v2ex.com/gravatar/cfff9ca626c77fa9bdd8a8e7eb3048d0?s=73&d=retro" }, "url": "t/637791", "title": "\u96f6\u57fa\u7840\u5165\u95e8 Unity Shader\uff08\u4e8c\uff09", "id": "t/637791", "date_published": "2020-01-14T06:08:48+00:00", "content_html": "

\u672c\u6587\u8f6c\u81ea Unity Connect \u535a\u4e3b taecg

\n

\u524d\u8a00

\n

\u8ba9\u6211\u4eec\u5148\u629b\u5f00\u4ec0\u4e48\u9b3c\u56fe\u5f62\u5b66\u3001\u9b3c\u6570\u5b66\u3001\u4e71\u4e03\u516b\u7cdf\u7684\u9b3c\u4e1c\u897f\u7edf\u7edf\u4e0d\u7ba1\uff0c\u76f4\u63a5\u5728 Unity \u4e2d\u5e72\u4e0a\u6211\u4eec\u7684 Shader\uff0c\u4e00\u6b65\u4e00\u6b65\u53bb\u5b66\u4e60\u4e86\u89e3\u5e76\u6df1\u5165\u5f81\u670d\u5b83!\nShader \u5e94\u8be5\u7531\u8c01\u6765\u505a\uff1f\n\u8fd9\u662f\u4e2a\u5f88\u6709\u8da3\u7684\u8bdd\u9898\uff0cShader \u5230\u5e95\u5e94\u8be5\u7531\u8c01\u6765\u505a\u5462\uff1f\u901a\u5e38\u60c5\u51b5\u4e0b\u6709\u6b64\u6280\u80fd\u7684\u4eba\u5458\u6709\uff1a\n\u56fe\u5f62\u7a0b\u5e8f\u5458\n\u4e00\u5c0f\u90e8\u5206\u7a0b\u5e8f\n\u4e00\u5c0f\u5c0f\u90e8\u5206\u7f8e\u672f\n\u6280\u672f\u7f8e\u672f

\n

\u4e00\u822c\u7684\u9879\u76ee\u56e2\u961f\uff0c\u5982\u679c\u4e0d\u662f\u81ea\u7814\u5f15\u64ce\u7684\u8bdd\uff0c\u5f88\u5c11\u4f1a\u914d\u7f6e\u56fe\u5f62\u7a0b\u5e8f\u5458\uff0c\u800c\u4e14\u56fe\u5f62\u7a0b\u5e8f\u5458\u8fd9\u4e48\u9ad8\u5927\u4e0a\u7684\u4eba\u505a Shader \u4f3c\u4e4e\u53c8\u6709\u79cd\u6d6a\u8d39\u7684\u611f\u89c9\uff0c\u6240\u4ee5\u6211\u4eec\u5148\u5ffd\u7565\u4ed6\u3002

\n

\u7a0b\u5e8f\u5462\uff0c\u6bcf\u4e2a\u56e2\u961f\u4e2d\u603b\u6709\u90a3\u4e48\u4e00\u4e24\u4e2a\u6709\u4e24\u628a\u5237\u5b50\u7684\uff0c\u4f46\u662f\u82e6\u4e8e\u81ea\u8eab\u7f8e\u611f\u95ee\u9898\uff0c\u6700\u540e\u5728\u4e0d\u65ad\u4e0e\u7f8e\u672f\u6c9f\u901a\u4ea4\u6d41\u7684\u8fc7\u7a0b\u4e2d\u653e\u5f03\u81ea\u6211\u3002

\n

\u7f8e\u672f\u5462\uff0c\u96be\u5f97\u78b0\u5230\u4e2a\u4f1a\u505a Shader \u7684\uff0c\u6548\u679c\u4e5f\u662f\u534e\u4e3d\u4e3d\u7684\uff0c\u4f46\u662f\u4f60\u6562\u7528\u5417\uff1f\n\u8fd9\u65f6\u6211\u4eec\u7684\u4e3b\u89d2\uff0c\u6280\u672f\u7f8e\u672f\u767b\u573a\u4e86\uff0c\u53ca\u7a0b\u5e8f\u4e0e\u7f8e\u672f\u4e8e\u4e00\u8eab\u7684\u7f8e\u7537\u5b50\u3002\u6548\u679c\u534e\u4e3d\u4e3d\u7684\uff0c\u6027\u80fd\u4e5f\u662f\u59a5\u59a5\u7684\uff01\n\u6240\u4ee5\u8bf4\u5982\u679c\u4f60\u662f\u6280\u672f\u7f8e\u672f\u7684\u8bdd\uff0c\u4e00\u5b9a\u8981\u8ba9\u7f8e\u672f\u5bf9\u6548\u679c\u6ee1\u610f\uff0c\u7a0b\u5e8f\u5bf9\u6027\u80fd\u653e\u5fc3\uff0c\u5728\u8fd9\u5176\u4e2d\u627e\u5230\u6548\u679c\u4e0e\u6027\u80fd\u7684\u6700\u4f73\u5e73\u8861\u70b9\uff0c\u8fd9\u624d\u662f\u6211\u4eec\u5236\u4f5c Shader \u7684\u4f18\u52bf\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u6211\u4eec\u80fd\u505a\uff01

\n

Shader \u6a21\u7248\n\u73b0\u5728\u8ba9\u6211\u4eec\u5f00\u59cb\u521b\u5efa\u6211\u4eec\u7684\u7b2c\u4e00\u4e2a Shader\uff0c\u6253\u5f00 Unity\uff0c\u7136\u540e\u5728 Project \u9762\u677f\u70b9\u51fb\u53f3\u952e\uff0c\u4f9d\u6b21\u4ece\u4e2d\u9009\u62e9 Create/Shader/...

\n

\u7136\u540e\u4f60\u4f1a\u53d1\u73b0\u51e0\u4e2a\u9009\u9879\uff1a\nStandard Surface Shader\n\u6807\u51c6\u8868\u9762\u7740\u8272\u5668\uff0c\u662f\u4e00\u79cd\u57fa\u4e8e\u7269\u7406\u7684\u7740\u8272\u7cfb\u7edf\uff08\u4f7f\u7528\u4e86 Physically Based Rendering \uff08\u7b80\u79f0 PBR \uff09\u6280\u672f\uff0c\u5373\u57fa\u4e8e\u7269\u7406\u7684\u6e32\u67d3\u6280\u672f\uff09\uff0c\u4ee5\u6a21\u62df\u73b0\u5b9e\u771f\u5b9e\u7684\u65b9\u5f0f\u6765\u6a21\u62df\u6750\u8d28\u4e0e\u706f\u5149\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u53ef\u4ee5\u5f88\u8f7b\u6613\u7684\u8868\u73b0\u51fa\u5404\u79cd\u91d1\u5c5e\u53cd\u5149\u6548\u679c\uff0c\u540c\u65f6\u6b64\u79cd Shader \u7684\u4e66\u5199\u903b\u8f91\u4e5f\u66f4\u7b26\u5408\u4eba\u7c7b\u7684\u601d\u7ef4\u6a21\u5f0f\u3002

\n

Unlit Shader\nVertex/Fragment Shader,\u4e5f\u5c31\u662f\u6700\u57fa\u672c\u7684\u9876\u70b9\u7247\u65ad\u7740\u8272\u5668\uff0c\u4e0d\u53d7\u5149\u7167\u5f71\u54cd\u7684 Shader\uff0c\u591a\u7528\u4e8e\u7279\u6548\u3001UI \u4e0a\u7684\u6548\u679c\u5236\u4f5c\u3002

\n

Image Effect Shader\n\u4e5f\u662f\u9876\u70b9\u7247\u65ad\u7740\u8272\u5668\uff0c\u53ea\u4e0d\u8fc7\u662f\u9488\u5bf9\u540e\u5904\u7406\u800c\u5b9a\u5236\u7684\u6a21\u7248\uff0c\u540e\u5904\u7406\u662f\u4ec0\u4e48\u5462\uff1f Bloom \uff08\u4e5f\u6709\u4eba\u53eb Glow/\u6cdb\u5149 /\u8f89\u5149\u7b49\u8bf4\u6cd5\uff09\u3001\u8c03\u8272\u3001\u666f\u6df1\u3001\u6a21\u7cca\u7b49\uff0c\u8fd9\u4e9b\u57fa\u4e8e\u6700\u7ec8\u6574\u4e2a\u5c4f\u5e55\u753b\u9762\u800c\u8fdb\u884c\u518d\u5904\u7406\u7684 Shader \u5c31\u662f\u540e\u5904\u7406\u3002

\n

Compute Shader\nCompute Shader \u662f\u8fd0\u884c\u5728\u56fe\u5f62\u663e\u5361\u4e0a\u7684\u4e00\u6bb5\u7a0b\u5e8f\uff0c\u72ec\u7acb\u4e8e\u5e38\u89c4\u6e32\u67d3\u7ba1\u7ebf\u4e4b\u5916\u7684\uff0c\u5b83\u53ef\u4ee5\u76f4\u63a5\u5c06 GPU \u4f5c\u4e3a\u5e76\u884c\u5904\u7406\u5668\u52a0\u4ee5\u5229\u7528\uff0c\u4ece\u800c\u4f7f GPU \u4e0d\u4ec5\u5177\u6709 3D \u6e32\u67d3\u80fd\u529b\uff0c\u8fd8\u5177\u6709\u5176\u4ed6\u7684\u8fd0\u7b97\u80fd\u529b\u3002

\n

Shader Variant Collection\nShader \u53d8\u4f53\u6536\u96c6\u5668\uff0c\u5728\u4e0a\u9762\u521b\u5efa\u7684\u65f6\u5019\uff0c\u4f60\u4f1a\u53d1\u73b0 Shader Variant Collection \u4e0e\u4ee5\u4e0a\u56db\u4e2a\u662f\u88ab\u9694\u5f00\u7684\uff0c\u5c31\u662f\u56e0\u4e3a\u8fd9\u4e2a\u4e0e\u5b83\u4eec\u4e0d\u4e00\u6837\uff0c\u5b83\u4e0d\u662f\u5236\u4f5c Shader \u7684\u6a21\u7248,\u800c\u53ea\u662f\u5bf9 Shader \u53d8\u4f53\u8fdb\u884c\u6253\u5305\u7528\u7684\u5bb9\u5668\u3002\n\u6ce8\uff1a\u4ee5\u4e0a\u7684 Standard Surface Shader\u3001Unlit Shader\u3001Image Effect Shader \u4ec5\u4ec5\u53ea\u662f Unity \u4e3a\u4e86\u65b9\u4fbf\u6211\u4eec\u4e66\u5199\u800c\u5185\u7f6e\u7684\u51e0\u4e2a\u6a21\u7248\uff0c\u4f60\u5b8c\u5168\u53ef\u4ee5\u5efa\u4e00\u4e2a Unlit Shader\uff0c\u7136\u540e\u5c06\u5176\u6539\u6210 Surface Shader,\u540c\u6837\u4e5f\u53ef\u4ee5\u5c06\u4e00\u4e2a Standard Surface Shader \u6539\u6210\u9876\u70b9\u7247\u65ad\u7740\u8272\u5668\uff0c\u6240\u4ee5\u8fd9\u4e00\u70b9\u4e00\u5b9a\u8981\u660e\u767d\uff0c\u5b83\u4eec\u53ea\u662f\u5185\u5bb9\u683c\u5f0f\u4e0d\u4e00\u6837\u7684\u6a21\u7248\u672c\u800c\u5df2\uff0c\u6211\u4eec\u5b8c\u5168\u53ef\u4ee5\u81ea\u7531\u4fee\u6539\u6210\u4efb\u610f\u6211\u4eec\u60f3\u8981\u7684\u4e00\u79cd\u7740\u8272\u5668\u7c7b\u578b\uff0c\u5f53\u7136\u6211\u4eec\u4e5f\u53ef\u4ee5\u901a\u8fc7\u4e00\u4e9b\u624b\u6bb5\u6765\u5b9a\u5236\u51fa\u6211\u4eec\u81ea\u5df1\u7684\u6a21\u7248\uff0c\u8fd9\u5728\u540e\u7eed\u7ae0\u8282\u4e2d\u6211\u4eec\u518d\u8fdb\u884c\u8be6\u7ec6\u4ecb\u7ecd\u3002

\n

\u6240\u4ee5\u5462\uff0c\u6211\u4eec\u63a5\u4e0b\u6765\u4ece\u6700\u7b80\u5355\u4e5f\u662f\u6700\u57fa\u7840\u7684 Unlit Shader \u5f00\u59cb\u6211\u4eec\u7684\u5b66\u4e60\u3002\n\u6750\u8d28\u4e0e Shader \u7684\u5173\u7cfb\nOK\uff0c\u7ee7\u7eed\u4e0a\u9762\uff0c\u4ece Shader \u5b50\u83dc\u5355\u4e2d\u9009\u62e9\"Unlit Shader\"\u3002\u521b\u5efa\u5b8c\u6210\u540e\u63d0\u793a\u8ba9\u6211\u4eec\u8f93\u5165\u65b0\u7684\u540d\u79f0\uff0c\u5148\u4e0d\u7ba1\u5b83\uff0c\u9ed8\u8ba4\u5373\u53ef\u3002

\n

\u7531\u4e8e\u5728 Unity \u4e2d Shader \u5c31\u662f\u8fd0\u884c\u5728\u56fe\u5f62\u663e\u5361\u4e0a\u7684\u4e00\u6bb5\u5305\u542b\u6307\u4ee4\u7684\u4ee3\u7801\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u518d\u521b\u5efa\u4e00\u4e2a\u6750\u8d28\u6765\u5173\u8054\u5b83\uff0c\u8fd9\u6837\u624d\u80fd\u628a\u6750\u8d28\u8d4b\u7ed9\u573a\u666f\u4e2d\u7684\u7269\u4f53\u6765\u5b9e\u73b0\u6211\u4eec\u60f3\u8981\u7684\u6548\u679c\u3002\n\u518d\u521b\u5efa\u4e00\u4e2a\u6750\u8d28\uff08 Material \u6216\u8005\u7ecf\u5e38\u88ab\u53eb\u505a\u6750\u8d28\u7403\uff09,\u7531\u4e8e\u6750\u8d28\u4e5f\u662f\u4e00\u4e2a\u8d44\u6e90\uff0c\u6240\u4ee5\u6211\u4eec\u8fd8\u662f\u5728 Project \u9762\u677f\u4e2d\u70b9\u51fb\u53f3\u952e\uff0c\u4ece\u4e2d\u9009\u62e9 Create/Material\uff0c\u5982\u4e0b\u56fe\u6240\u793a\uff1a

\n

\u7136\u540e\u73b0\u5728\u6211\u4eec\u6709\u4e86\u4e00\u4e2a Shader \u548c\u4e00\u4e2a\u6750\u8d28\u7403\uff0c\u6b64\u65f6\u5982\u679c\u9009\u4e2d\u6750\u8d28\u7403\u5728 Inspector \u9762\u677f\u4e2d\u5c31\u53ef\u4ee5\u770b\u5230\u5b83\u7684\u76f8\u5173\u53c2\u6570\uff0c\u6bd4\u5982\u8fd9\u4e2a\u6750\u8d28\u6240\u5f15\u7528\u7684\u662f\u54ea\u4e2a Shader\uff0c\u4ee5\u53ca\u5177\u4f53\u66b4\u9732\u51fa\u6765\u7684\u53c2\u6570\u662f\u54ea\u4e9b\u7b49\u7b49\u3002

\n

\u6211\u4eec\u5148\u91cd\u70b9\u5173\u6ce8\u4e0b\u5176\u4e2d\u7684 Shader \u8fd9\u4e2a\u53c2\u6570\u3002\n\u5b83\u4ee3\u8868\u7684\u662f\u5f53\u524d\u8fd9\u4e2a\u6750\u8d28\u7403\u662f\u4e0e\u54ea\u4e2a Shader \u7ed1\u5b9a\u5173\u8054\u7684\uff0c\u6211\u4eec\u53ef\u4ee5\u70b9\u51fb\u5b83\u7684\u4e0b\u62c9\u5217\u8868\u6846\u4ece\u4e2d\u8fdb\u884c\u9009\u62e9\uff0c\u524d\u63d0\u662f\u6211\u4eec\u77e5\u9053\u6211\u4eec\u60f3\u5173\u8054\u7684\u90a3\u4e2a Shader \u7684\u540d\u5b57\u8def\u5f84\u662f\u54ea\u4e2a\uff0c\u8fd9\u4e00\u70b9\u6211\u4eec\u5728\u540e\u9762\u4f1a\u5177\u4f53\u8bf4\u660e\u3002

\n

\u73b0\u5728\u6211\u4eec\u91c7\u7528\u62d6\u52a8\u7684\u65b9\u5f0f\u8fdb\u884c\u5173\u8054\uff0c\u5728 Project \u9762\u677f\u4e0b\u76f4\u63a5\u62d6\u52a8 Shader \u5230\u6750\u8d28\u7403\u4e0a\uff0c\u7136\u540e\u4f60\u4f1a\u53d1\u73b0\u6750\u8d28\u7403\u7684 Inspector \u9762\u677f\u4e2d\u7684 Shader \u53c2\u6570\u5c31\u5df2\u7ecf\u88ab\u6307\u5b9a\u4e3a\u521a\u624d\u90a3\u4e2a Shader \u4e86\u3002

\n

\u5c0f\u6280\u5de7\uff1a\u5728\u521b\u5efa\u6750\u8d28\u7403\u7684\u65f6\u5019\uff0c\u5982\u679c\u6211\u4eec\u9009\u4e2d\u67d0\u4e2a Shader\uff0c\u7136\u540e\u5728\u5b83\u4e0a\u9762\u70b9\u51fb\u53f3\u952e\u6765\u521b\u5efa\u6750\u8d28\u7684\u8bdd\uff0c\u90a3\u4e48\u8fd9\u4e2a\u6750\u8d28\u4f1a\u81ea\u52a8\u4e0e\u6b64 Shader \u8fdb\u884c\u5173\u8054\uff0c\u65e0\u9700\u518d\u5355\u72ec\u6307\u5b9a\u3002

\n

\u8ba9\u6211\u4eec\u6765\u603b\u7ed3\u4e00\u4e0b Shader \u4e0e\u6750\u8d28\u7684\u5173\u7cfb\uff1a

\n

\u4e00\u4e2a Shader \u53ef\u4ee5\u4e0e\u65e0\u6570\u4e2a\u6750\u8d28\u5173\u8054\u3002\n\u4e00\u4e2a\u6750\u8d28\u540c\u4e00\u65f6\u523b\u53ea\u80fd\u5173\u8054\u4e8e\u4e00\u4e2a Shader\u3002\uff08\u4e3a\u4ec0\u4e48\u8bf4\u662f\u540c\u4e00\u65f6\u523b\uff0c\u56e0\u4e3a\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u4ee3\u7801\u53bb\u52a8\u6001\u6539\u53d8\u6750\u8d28\u6240\u5173\u8054\u7684 Shader \uff09

\n

\u6750\u8d28\u53ef\u4ee5\u8d4b\u4e0e\u6a21\u578b\uff0c\u4f46\u662f Shader \u4e0d\u884c\u3002\n\u6750\u8d28\u5c31\u50cf\u662f Shader \u7684\u5b9e\u4f8b\uff0c\u6bcf\u4e2a\u6750\u8d28\u90fd\u53ef\u4ee5\u53c2\u6570\u4e0d\u4e00\u6837\u5448\u73b0\u4e0d\u540c\u7684\u6548\u679c\uff0c\u4f46\u662f\u5f53 Shader \u6539\u53d8\u65f6\uff0c\u5173\u8054\u5b83\u7684\u6240\u6709\u6750\u8d28\u90fd\u4f1a\u76f8\u5e94\u7684\u6539\u53d8\u3002

\n

\u4e3e\u4e2a\u4f8b\u5b50\uff1a\u6bd4\u5982\u6e38\u620f\u4e2d\u7684\u602a\u7269\uff0c\u6211\u4eec\u53ea\u9700\u505a\u4e00\u4e2a Shader\uff0c\u7136\u540e\u6bcf\u4e2a\u602a\u7269\u7ed9\u5b83\u4e00\u4e2a\u6750\u8d28\u7403\uff0c\u6750\u8d28\u7403\u4e0a\u8d4b\u4e0e\u4e0d\u540c\u7684\u8d34\u56fe\u4e0e\u53c2\u6570\u6765\u8868\u73b0\u4e0d\u540c\u7684\u602a\u7269\u3002

\n

\u81ea\u5b66 Shader \u6b65\u9aa4\u5efa\u8bae\n\u7ed9\u60f3\u81ea\u5b66 Shader \u7684\u540c\u5b66\u5148\u5217\u51fa\u4e2a\u5b66\u4e60\u6b65\u9aa4\uff0c\u53ef\u4ee5\u6309\u5982\u4e0b\u7684\u987a\u5e8f\u8fdb\u884c\u5faa\u5e8f\u6e10\u8fdb\u7684\u5b66\u4e60\uff1a\nUnlit Shader,\u8fd9\u662f\u6700\u57fa\u672c\u4e5f\u662f\u6700\u7b80\u5355\u7684\u6a21\u7248\uff0c\u901a\u8fc7\u5b66\u4e60\u5b83\u4e86\u89e3\u9876\u70b9\u7247\u65ad\u7740\u8272\u5668\u7684\u57fa\u672c\u6784\u6210\uff0c\u4ee5\u53ca\u5bf9 Shader \u6709\u521d\u6b65\u7684\u8ba4\u8bc6\u3002

\n

\u5229\u7528\u9876\u70b9\u7247\u65ad\u7740\u8272\u5668\u505a\u4e00\u4e9b\u7b80\u5355\u6848\u4f8b\uff0c\u6bd4\u5982\u4e00\u4e9b\u6e38\u620f\u5185\u5e38\u7528\u7684\u6548\u679c\uff0c\u4e0e\u6b64\u540c\u65f6\u6df1\u5165\u5b66\u4e60 Shader \u8bed\u6cd5\uff0c\u4ee5\u53ca\u7528\u5230\u7684\u76f8\u5173\u6570\u5b66\u8fd0\u7b97\u7b26\u3002

\n

\u5c1d\u8bd5\u4f18\u5316\u4f60\u7684 Shader\uff0c\u63d0\u5347\u7f8e\u672f\u6548\u679c\uff0c\u51cf\u5c11\u53d8\u4f53\u6570\uff0c\u51cf\u5c11\u8fd0\u7b97\u91cf\u3002\n\u8bfb\u4e00\u8bfb\u6e32\u67d3\u7ba1\u7ebf\u7684\u4e66\uff0c\u52a0\u6df1\u5bf9 Shader \u7406\u89e3\u7684\u5bbd\u5ea6\u4e0e\u9ad8\u5ea6\u3002\n\u5f00\u59cb\u63a5\u89e6\u5149\u7167\u6a21\u578b\uff0c\u4e86\u89e3 Surface Shader\u3002\n\u5404\u79cd\u5149\u7167\u7b97\u6cd5\u7814\u7a76\u4e00\u901a\u3002\u3002\u3002\u3002\u987a\u4fbf\u590d\u4e60\u4e0b\u6570\u5b66\u3002\u3002\u3002\n\u5c4f\u5e55\u540e\u5904\u7406 Shader\nCompute Shader\n\u5404\u79cd\u5b9e\u4f8b\u5236\u4f5c\uff0c\u4e0d\u65ad\u5f3a\u5316\u7f8e\u611f\u3001\u56fe\u5f62\u5b66\u4ee5\u53ca\u6570\u5b66\u3002

\n

\u539f\u6587\u94fe\u63a5\uff1a https://connect.unity.com/p/ling-ji-chu-ru-men-unity-shader-er?app=true\n\u66f4\u591a\u5e72\u8d27\uff0c\u6233\u4e0a\u65b9\u94fe\u63a5\u4e0b\u8f7d Unity \u5b98\u65b9 app\uff0c\u5728\u7ebf\u4e92\u52a8\u7b54\u7591\u6280\u672f\u793e\u533a\uff0c\u5b66\u4e60\u4ea4\u53cb\u4e24\u4e0d\u8bef\uff01

\n" }, { "author": { "url": "member/unn", "name": "unn", "avatar": "https://cdn.v2ex.com/gravatar/cfff9ca626c77fa9bdd8a8e7eb3048d0?s=73&d=retro" }, "url": "t/637466", "title": "\u5982\u4f55\u5b9e\u73b0\u5b58\u50a8\u548c\u52a0\u8f7d\u6e38\u620f\u6570\u636e", "id": "t/637466", "date_published": "2020-01-13T05:38:24+00:00", "content_html": "

\u672c\u6587\u8f6c\u81ea Unity Connect \u535a\u4e3b Michael Wang

\n

\u7279\u522b\u9488\u5bf9 ScriptableObject \u7684\u7279\u6b8a\u6027\u6765\u5b9e\u73b0\u5b58\u50a8\u548c\u52a0\u8f7d

\n

\u63d0\u5230\u5b58\u50a8\uff0c\u76ee\u524d Unity \u4e2d\u5e38\u7528\u7684\u5b58\u50a8\u6709\uff1aXML\u3001Json\u3001PlayerPrefs\u3002

\n

\u4eca\u5929\u6211\u4eec\u5c31\u7528 Binary \u4e8c\u8fdb\u5236\u548c Json \u7ed3\u5408\u6211\u4eec\u4e4b\u524d\u7684\u80cc\u5305\u7cfb\u7edf\u6765\u771f\u662f\u5b58\u50a8\u6211\u4eec\u7684\u6e38\u620f\u6570\u636e\uff08\u80cc\u5305\u6570\u636e\uff09\u6709\u5173\u80cc\u5305\u7cfb\u7edf\u7684\u5185\u5bb9\u53ef\u4ee5\u53c2\u8003\u53e6\u5916\u4e00\u7bc7\u6587\u7ae0\uff1a

\n

https://connect.unity.com/p/kuai-su-zuo-yi-ge-jian-dan-de-bei-bao-xi-tong?app=true

\n

\u8981\u5b58\u50a8\u6587\u4ef6\u5c31\u9700\u8981\u5f97\u5230\u6e38\u620f\u6587\u4ef6\u7684\u8def\u5f84\u4ece\u800c\u521b\u5efa\u6587\u4ef6\u5939\u548c\u5b58\u50a8\u7684\u6587\u4ef6

\n

\u6211\u4eec\u4f7f\u7528 Unity \u63d0\u4f9b\u7684 Application.persistentDataPath \u6765\u83b7\u5f97\u4e0d\u540c\u5e73\u53f0\u7684\u6e38\u620f\u76ee\u5f55\u3002

\n

public void SaveGame()

\n
{\n\n Debug.Log(Application.persistentDataPath);//\u627e\u4e0d\u5230\u7684\u5c0f\u4f19\u4f34\u5c31 Debug \u4e00\u4e0b\u7a0b\u5e8f\u8def\u5f84\u55bd\uff5e\n\n if (!Directory.Exists(Application.persistentDataPath + \"/game_SaveData\"))//\u5224\u65ad\u662f\u5426\u6709\u5b58\u50a8\u6587\u4ef6\u5939\n\n {\n\n Directory.CreateDirectory(Application.persistentDataPath + \"/game_SaveData\");//\u521b\u5efa\u6587\u4ef6\u5939\n\n }\n\n}\n
\n

\u63a5\u4e0b\u6765\u6211\u4eec\u5c31\u6765\u521b\u5efa\u4e00\u4e2a\u7528\u6765\u5b58\u50a8\u6570\u636e\u7684\u6587\u4ef6\u4e86\uff1a

\n

public void SaveGame()

\n
{\n\n Debug.Log(Application.persistentDataPath);//\u7a0b\u5e8f\u8def\u5f84\n\n if (!Directory.Exists(Application.persistentDataPath + \"/game_SaveData\"))//\u5224\u65ad\u662f\u5426\u6709\u5b58\u50a8\u6587\u4ef6\u5939\n\n {\n\n Directory.CreateDirectory(Application.persistentDataPath + \"/game_SaveData\");//\u521b\u5efa\u6587\u4ef6\u5939\n\n }\n\n BinaryFormatter formatter = new BinaryFormatter();//\u4e8c\u8fdb\u5236\u8f6c\u5316\n\n FileStream file = File.Create(Application.persistentDataPath + \"/game_SaveData/inventory.txt\");//\u521b\u5efa\u5b58\u50a8\u6587\u4ef6\uff0c\u6269\u5c55\u540d\u968f\u4fbf\n\n var json = JsonUtility.ToJson(myInventory);//\u8f6c\u6362\u6210 Json \u683c\u5f0f\n\n formatter.Serialize(file, json);//\u5e8f\u5217\u5316\u5c06 json \u53d8\u91cf\u7684 string \u5185\u5bb9\u4fdd\u5b58\u5728 file \u91cc\u9762\n\n file.Close();\n\n}\n
\n

\u5b8c\u6210\u4e86\u4ee5\u4e0a\u4fdd\u5b58\u7684\u4ee3\u7801\uff0c\u6211\u4eec\u505a\u4e24\u4e2a UI - Button \u6765\u6267\u884c SaveGame() \u548c LoadGame() \u5e76\u70b9\u51fb Save \u4fdd\u5b58\u4e00\u4e0b\u6d4b\u8bd5\u3002

\n

\u6211\u4eec\u627e\u5230\u5bf9\u5e94\u5e73\u53f0\u7684\u6587\u4ef6\u5939\u4e0b\u7684\u6587\u4ef6\uff1a

\n

\u60f3\u8981\u6253\u5f00\u5e76\u8bfb\u53d6\u8fd9\u91cc\u7684\u6570\u636e\uff0c\u6211\u4eec\u9700\u8981\u4e00\u4e9b\u80fd\u8bfb\u53d6\u4e8c\u8fdb\u5236\u7684\u8f6f\u4ef6\uff0c\u8fd9\u91cc\u6211\u7528 iHex \u6253\u5f00\u5b83\uff1a

\n

\u6211\u4eec\u53d1\u73b0\u53f3\u4fa7\u80fd\u660e\u663e\u770b\u51fa\u6765\u6211\u7684 itemList \u91cc\u9762\u7684\u7ed3\u6784\uff0cinstanceID\uff1a0 \u4ee3\u8868\u6ca1\u6709\u6570\u636e\n\u8fd9\u6837\u6211\u4eec\u5c31\u6210\u529f\u7684\u4fdd\u5b58\u4e86 ScriptableObject \u4e86\u3002\u7ed3\u4e0b\u7684 Load \u65b9\u6cd5\u4e5f\u7c7b\u4f3c\uff1a

\n

public void LoadGame()

\n
{\n\n BinaryFormatter bf = new BinaryFormatter();\n\n if (File.Exists(Application.persistentDataPath + \"/game_SaveData/inventory.txt\"))\n\n {\n\n FileStream file = File.Open(Application.persistentDataPath + \"/game_SaveData/inventory.txt\", FileMode.Open);\n\n JsonUtility.FromJsonOverwrite((string)bf.Deserialize(file), myInventory);\n\n file.Close();\n\n }\n\n}\n
\n

\u539f\u6587\u94fe\u63a5\uff1a https://connect.unity.com/p/ru-he-shi-xian-cun-chu-he-jia-zai-you-xi-shu-ju?app=true\n\u66f4\u591a\u5e72\u8d27\uff0c\u6b22\u8fce\u6233\u4e0a\u65b9\u94fe\u63a5\u4e0b\u8f7d Unity Connect \u5b98\u65b9 app\uff0c\u5728\u7ebf\u6280\u672f\u7b54\u7591\uff0c\u4ea4\u53cb\u5b66\u4e60\u4e24\u4e0d\u8bef\uff01

\n" } ] } ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86