引言:从游戏爱好者到游戏开发者的转变之路
在当今数字时代,游戏产业已成为全球娱乐经济的中流砥柱。根据Newzoo的最新报告,2023年全球游戏市场规模已超过2000亿美元,而中国作为全球最大的游戏市场之一,正以惊人的速度发展。然而,许多游戏爱好者面临着一个共同的困境:如何从单纯的游戏玩家转变为专业的游戏开发者?这不仅仅是兴趣的延伸,更是一条充满挑战却回报丰厚的职业道路。
零基础学习游戏开发看似遥不可及,但通过系统化的学习路径和正确的技能培养,任何人都可以掌握从玩游戏到做游戏的核心能力。本文将为您详细解析如何通过兴趣学院的游戏课程体系,从零开始构建游戏开发技能树,解决就业难题,并最终实现职业转型。
我们将从以下几个方面展开讨论:
- 游戏开发的核心技能体系
- 零基础学习路径规划
- 实战项目驱动的学习方法
- 就业准备与职业发展策略
- 常见问题与解决方案
无论您是游戏爱好者、编程新手,还是希望转行进入游戏行业的职场人士,这篇文章都将为您提供实用且可操作的指导。
第一部分:理解游戏开发的核心技能体系
1.1 游戏开发不是单一技能,而是多学科融合
许多人误以为游戏开发就是“写代码”,实际上,游戏开发是一个高度复杂的跨学科领域,涉及编程、美术、设计、音效、项目管理等多个方面。对于零基础学习者来说,首先需要了解整个技能体系的构成,才能有针对性地学习。
游戏开发的核心技能可以分为以下几大类:
- 编程技能:游戏逻辑的实现基础
- 游戏引擎:开发效率的核心工具
- 游戏设计:玩法与体验的创造
- 美术与视觉:游戏的视觉表现
- 项目管理:团队协作与进度控制
1.2 编程技能:游戏开发的基石
编程是游戏开发中最基础也是最重要的技能之一。对于零基础学习者,建议从以下语言入手:
- C#:Unity引擎的首选语言,语法相对友好,适合初学者
- C++:Unreal引擎的核心语言,性能强大但学习曲线较陡
- Python:用于工具开发和脚本编写,适合快速原型开发
代码示例:Unity中简单的C#脚本
以下是一个Unity中控制玩家角色移动的C#脚本示例,展示了基础的编程概念:
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public float moveSpeed = 5f; // 移动速度
void Update()
{
// 获取键盘输入
float horizontalInput = Input.GetAxis("Horizontal");
float verticalInput = Input.GetAxis("Vertical");
// 计算移动方向
Vector3 movement = new Vector3(horizontalInput, 0f, verticalInput);
// 应用移动
transform.Translate(movement * moveSpeed * Time.deltaTime);
// 调试输出
if (movement.magnitude > 0)
{
Debug.Log($"玩家正在移动: {movement}");
}
}
}
代码解析:
using UnityEngine;:引入Unity引擎的核心命名空间public class PlayerMovement : MonoBehaviour:定义一个继承自MonoBehaviour的类,这是Unity组件的基础Update():每帧调用一次的方法,用于处理实时输入Input.GetAxis():获取键盘输入值transform.Translate():根据输入移动物体Time.deltaTime:确保移动速度与帧率无关
通过这样的简单脚本,初学者可以快速理解游戏编程的基本模式:获取输入、处理逻辑、更新状态。
1.3 游戏引擎:开发效率的核心工具
游戏引擎是游戏开发的“工作台”,它提供了渲染、物理、音频、输入管理等基础功能,让开发者无需从零开始构建所有系统。
Unity引擎:最适合初学者的选择
Unity因其易用性、强大的社区支持和跨平台能力,成为零基础学习者的首选。以下是Unity的核心优势:
- 可视化编辑器:拖拽式操作,无需编写代码即可搭建场景
- 丰富的资源商店:提供大量免费和付费资源,加速开发
- 跨平台发布:一键发布到PC、移动端、主机等平台
- 完善的文档和教程:官方和社区提供了海量学习资源
Unreal引擎:专业级开发的进阶选择
Unreal引擎以其强大的图形渲染能力著称,适合追求高品质画面的开发者。虽然学习曲线较陡,但其蓝图系统(Blueprint)允许开发者通过可视化编程实现复杂逻辑,无需编写代码。
1.4 游戏设计:玩法与体验的创造
游戏设计是游戏开发的灵魂,它决定了游戏是否有趣、是否吸引人。对于初学者,需要掌握以下核心概念:
- 核心循环:玩家在游戏中重复进行的主要活动(如《超级马里奥》中的“跳跃-收集-到达终点”)
- 难度曲线:如何逐步增加挑战,保持玩家的成就感
- 反馈机制:通过视觉、听觉、触觉等方式让玩家感知操作结果
- 玩家动机:理解玩家为什么玩游戏(成就、探索、社交等)
1.5 美术与视觉:游戏的视觉表现
即使你不是美术专业出身,也需要了解基本的美术概念,因为游戏是视觉媒介。对于程序员和设计师,需要掌握:
- 2D美术基础:像素画、UI设计、精灵图(Sprite)
- 3D美术基础:建模、材质、光照、动画
- 美术风格:如何选择和统一游戏的视觉风格
1.6 项目管理:团队协作与进度控制
游戏开发是团队工作,即使是独立开发者也需要管理好自己的项目。关键技能包括:
- 版本控制:使用Git管理代码和资源
- 敏捷开发:将项目分解为可管理的小任务
- 时间管理:合理规划学习、开发和测试时间
第二部分:零基础学习路径规划
2.1 第一阶段:建立基础(1-3个月)
目标:掌握编程基础和游戏引擎入门
对于完全零基础的学习者,第一阶段的重点是建立信心,掌握最基础的技能。
学习内容:
编程基础:
- 变量、数据类型、运算符
- 条件语句(if/else)
- 循环(for/while)
- 函数/方法
- 面向对象基础(类、对象、继承)
Unity引擎基础:
- 编辑器界面介绍
- GameObject和Component概念
- 场景创建和物体管理
- 基础物理系统(Rigidbody、Collider)
- 脚本生命周期(Awake、Start、Update)
推荐资源:
- Unity Learn平台的“Create with Code”课程
- 《C#入门经典》书籍
- B站上的Unity入门教程(如M_Studio的教程)
实践项目:
- 项目1:弹球游戏 - 实现一个简单的弹球游戏,练习物理系统和输入处理
- 项目2:2D平台跳跃 - 实现角色跳跃、移动和碰撞检测
2.2 第二阶段:技能深化(3-6个月)
目标:掌握核心游戏系统开发
在掌握基础后,开始学习更复杂的游戏系统。
学习内容:
高级编程概念:
- 事件系统(委托、事件)
- 数据结构(列表、字典、队列)
- 异步编程(协程)
- 设计模式(单例、观察者、状态机)
游戏系统开发:
- UI系统(UGUI)
- 动画系统(Animator)
- 粒子系统
- 音频系统
- 数据持久化(PlayerPrefs、JSON)
游戏设计理论:
- 学习分析经典游戏的设计思路
- 理解不同类型游戏的核心机制
实践项目:
- 项目3:塔防游戏 - 实现波次管理、敌人AI、防御塔升级系统
- 项目4:Roguelike地牢探险 - 实现随机地图生成、道具系统、战斗系统
2.3 第三阶段:项目实战(6-12个月)
目标:完成可展示的完整游戏项目
这个阶段的重点是将所学知识整合,开发完整的、可玩的游戏项目。
学习内容:
高级引擎特性:
- Shader基础(Shader Graph)
- 优化技巧(对象池、LOD)
- 多平台适配
- 网络基础(Photon等)
美术协作:
- 学习使用免费资源(Kenney.nl、OpenGameArt)
- 基础的美术工具使用(Aseprite、Blender基础)
- 与美术沟通的技巧
项目打磨:
- 游戏测试与平衡
- Bug修复与优化
- 包装与发布(Steam、itch.io)
实践项目:
- 项目5:完整商业游戏 - 选择一个你感兴趣的游戏类型,从设计到发布完整走一遍流程。例如:
- 2D平台跳跃游戏(如《Celeste》风格)
- 模拟经营游戏(如《星露谷物语》风格)
- 卡牌对战游戏(如《杀戮尖塔》风格)
2.4 第四阶段:就业准备(12个月+)
目标:构建作品集,准备求职
学习内容:
作品集构建:
- 整理3-5个完整项目
- 制作项目展示视频和文档
- 搭建个人技术博客或GitHub主页
求职技能:
- 简历撰写(突出项目经验)
- 面试准备(技术问题、设计思路)
- 作品集展示技巧
行业认知:
- 了解不同公司类型(大厂、独立工作室、外包公司)
- 了解不同岗位职责(客户端、服务器、技术美术、游戏策划)
第三部分:实战项目驱动的学习方法
3.1 为什么项目驱动学习最有效?
对于游戏开发这种实践性极强的技能,单纯看教程和听课远远不够。项目驱动学习(Project-Based Learning)有以下优势:
- 知识整合:将零散的知识点串联成完整的技能体系
- 问题解决能力:在真实场景中遇到问题并解决,记忆更深刻
- 作品积累:每个项目都是未来求职的敲门砖
- 成就感:完成项目的正反馈能持续激励学习
3.2 如何选择合适的项目?
初学者常见误区:
- 选择过于复杂的项目(如一上来就想做开放世界)
- 选择没有兴趣的项目类型
- 低估时间成本
项目选择原则:
- MVP原则:先实现最小可行产品,再逐步扩展
- 兴趣驱动:选择你真正想玩的游戏类型
- 可控范围:确保能在1-3个月内完成核心玩法
- 可扩展性:留有后续添加内容的空间
3.3 实战案例:从零开始开发一个2D平台跳跃游戏
让我们以一个具体的案例来说明项目驱动的学习过程。
第1周:项目规划与基础搭建
目标:创建一个可以左右移动和跳跃的角色
实现步骤:
- 创建2D项目,设置像素密度(PPU=16)
- 导入角色精灵图(可以使用免费资源)
- 添加Rigidbody2D和BoxCollider2D组件
- 编写移动脚本:
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public float moveSpeed = 5f;
public float jumpForce = 10f;
private bool isGrounded;
private Rigidbody2D rb;
void Start()
{
rb = GetComponent<Rigidbody2D>();
}
void Update()
{
// 水平移动
float moveX = Input.GetAxis("Horizontal");
rb.velocity = new Vector2(moveX * moveSpeed, rb.velocity.y);
// 跳跃
if (Input.GetButtonDown("Jump") && isGrounded)
{
rb.AddForce(new Vector2(0f, jumpForce), ForceMode2D.Impulse);
isGrounded = false;
}
}
void OnCollisionEnter2D(Collision2D collision)
{
// 简单的地面检测
if (collision.gameObject.CompareTag("Ground"))
{
isGrounded = true;
}
}
}
学习重点:
- Rigidbody2D物理组件的使用
- Input系统的基本用法
- 碰撞检测的原理
第2-3周:添加游戏机制
目标:实现收集物、死亡与重生、关卡目标
实现步骤:
- 创建收集物(金币)并编写收集脚本:
public class Coin : MonoBehaviour
{
public int coinValue = 1;
void OnTriggerEnter2D(Collider2D other)
{
if (other.CompareTag("Player"))
{
GameManager.Instance.AddCoins(coinValue);
Destroy(gameObject);
}
}
}
- 实现死亡区域(掉出屏幕或碰到敌人):
public class KillZone : MonoBehaviour
{
void OnTriggerEnter2D(Collider2D other)
{
if (other.CompareTag("Player"))
{
GameManager.Instance.RespawnPlayer();
}
}
}
- 创建GameManager管理游戏状态:
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
private int coins = 0;
private Vector3 respawnPoint;
void Awake()
{
if (Instance == null)
{
Instance = this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
}
public void AddCoins(int amount)
{
coins += amount;
Debug.Log($"当前金币: {coins}");
}
public void SetRespawnPoint(Vector3 position)
{
respawnPoint = position;
}
public void RespawnPlayer()
{
GameObject player = GameObject.FindGameObjectWithTag("Player");
player.transform.position = respawnPoint;
player.GetComponent<Rigidbody2D>().velocity = Vector2.zero;
}
}
学习重点:
- 触发器(Trigger)与碰撞器(Collider)的区别
- 单例模式(Singleton)的应用
- 游戏状态管理
第4-5周:UI与关卡设计
目标:添加UI界面和设计多个关卡
实现步骤:
- 使用UGUI创建金币显示文本:
using UnityEngine.UI;
public class UIManager : MonoBehaviour
{
public Text coinText;
void Update()
{
if (GameManager.Instance != null)
{
coinText.text = $"Coins: {GameManager.Instance.GetCoins()}";
}
}
}
- 创建关卡管理器,实现关卡切换:
public class LevelManager : MonoBehaviour
{
public string[] nextLevels;
public void LoadNextLevel(int levelIndex)
{
if (levelIndex < nextLevels.Length)
{
UnityEngine.SceneManagement.SceneManager.LoadScene(nextLevels[levelIndex]);
}
}
}
- 设计关卡布局:
- 使用Tilemap快速搭建平台
- 放置玩家出生点、收集物、终点
- 设置死亡区域和难度梯度
学习重点:
- UGUI的基本组件(Text、Button、Panel)
- 场景管理(SceneManager)
- 关卡设计原则(难度递增、引导设计)
第6周:打磨与优化
目标:添加音效、动画、粒子效果,提升游戏体验
实现步骤:
添加角色动画(跳跃、移动、收集):
- 使用Animator Controller创建状态机
- 设置动画过渡条件(如isGrounded、speed)
添加音效:
public class AudioManager : MonoBehaviour
{
public AudioClip jumpSound;
public AudioClip coinSound;
private AudioSource audioSource;
void Start()
{
audioSource = GetComponent<AudioSource>();
}
public void PlayJumpSound()
{
audioSource.PlayOneShot(jumpSound);
}
public void PlayCoinSound()
{
audioSource.PlayOneShot(coinSound);
}
}
- 添加粒子效果:
- 收集金币时的闪光效果
- 角色跳跃时的尘土效果
学习重点:
- Animator状态机的使用
- AudioSource和AudioClip的管理
- 粒子系统的基本参数
第7-8周:测试与发布
目标:修复Bug,优化性能,准备发布
实现步骤:
性能优化:
- 使用对象池管理频繁创建销毁的对象
- 优化碰撞器形状
- 减少不必要的Update调用
构建与发布:
- 设置PlayerSettings
- 构建PC版本
- 测试不同分辨率
学习重点:
- 性能分析工具(Profiler)
- 构建设置的最佳实践
3.4 项目复盘与知识沉淀
每个项目完成后,务必进行复盘:
- 技术复盘:记录遇到的问题和解决方案
- 设计复盘:哪些设计好,哪些需要改进
- 时间复盘:实际耗时与计划的差异
- 文档化:将经验整理成博客或GitHub Wiki
这样不仅能巩固知识,还能为求职积累素材。
第四部分:就业准备与职业发展策略
4.1 构建有竞争力的作品集
作品集是游戏开发者求职的“通行证”,质量远比数量重要。
作品集的核心要素:
- 多样性:展示不同类型的游戏(2D/3D、不同玩法)
- 完整性:每个项目都应该是可玩的、完整的
- 技术深度:至少有一个项目展示复杂的技术实现
- 设计思考:通过文档展示你的设计决策过程
作品集展示方式:
GitHub项目页:
- 清晰的README,包含:
- 项目简介和玩法说明
- 技术栈和核心功能
- 运行说明
- 截图或GIF
- 遇到的挑战和解决方案
个人博客/网站:
- 深度技术文章(如“如何实现高效的对象池系统”)
- 项目开发日志
- 游戏设计分析
视频展示:
- 1-3分钟的游戏演示视频
- 突出核心玩法和亮点
- 配上简洁的解说或字幕
4.2 简历撰写技巧
游戏开发简历的特殊要求:
突出项目经验:将项目经验放在教育背景之前
量化成果:用数据说明你的贡献
- ❌ “开发了游戏UI系统”
- ✅ “独立开发了包含背包、商店、技能树的UI系统,使用UGUI和MVC模式,代码量2000+行”
技术关键词:确保包含行业通用的技术术语
- Unity、C#、C++、Unreal Engine、Git、Jira、敏捷开发、设计模式等
游戏作品信息:
- 游戏类型、平台、是否已发布
- 在团队中的角色(独立/主程/策划/美术)
- 链接到可玩版本或视频
简历模板示例:
[你的名字]
[联系方式] | [GitHub/博客链接] | [游戏作品链接]
个人简介
- 2年Unity开发经验,独立完成3款完整游戏
- 擅长2D游戏开发、UI系统、游戏架构设计
- GitHub开源项目贡献者,熟悉团队协作流程
项目经验
项目一:《[游戏名称]》(2024.01-2024.04)
- 项目描述:2D平台跳跃游戏,已发布至itch.io,获得500+下载
- 技术栈:Unity、C#、Tilemap、Animator
- 核心贡献:
- 设计并实现角色控制器(移动、跳跃、二段跳、冲刺)
- 开发关卡编辑器工具,提升关卡设计效率50%
- 使用ScriptableObject实现数据驱动的道具系统
- 项目链接:[链接] | [视频演示]
技能
- 编程语言:C#(熟练)、C++(基础)、Python(工具脚本)
- 游戏引擎:Unity(熟练)、Unreal Engine(了解)
- 版本控制:Git、GitHub
- 设计模式:单例、观察者、状态机、对象池
教育背景
[学校名称] | [专业] | [时间]
4.3 面试准备
技术面试常见问题:
基础编程:
- 解释C#中的值类型和引用类型
- 什么是垃圾回收(GC)?如何优化?
- 解释委托(Delegate)和事件(Event)
Unity特定:
- 解释Update和FixedUpdate的区别
- 什么是协程(Coroutine)?如何使用?
- 如何优化Unity游戏性能?(对象池、批处理、LOD等)
- 解释GameObject、Component和Transform的关系
游戏设计:
- 分析你喜欢的一款游戏的核心循环
- 如果让你改进《XX游戏》,你会怎么做?
- 如何平衡游戏的难度曲线?
项目相关:
- 你在项目中遇到的最大挑战是什么?如何解决的?
- 如果让你重新做这个项目,你会改进哪些地方?
- 你的项目中使用了哪些设计模式?
面试技巧:
- STAR法则:回答问题时使用情境(Situation)、任务(Task)、行动(Action)、结果(Result)的结构
- 展示作品:带上笔记本或平板,现场演示你的游戏
- 提问环节:准备有深度的问题,如“团队的技术栈和开发流程是怎样的?”“公司对新人的培养计划是什么?”
4.4 职业发展路径
游戏开发岗位细分:
游戏客户端开发:
- 负责游戏逻辑、UI、性能优化
- 需要精通C#或C++,熟悉引擎
游戏服务器开发:
- 负责多人在线、数据同步、反作弊
- 需要精通网络编程、数据库
技术美术(TA):
- 连接美术和程序的桥梁
- 需要美术基础+编程能力
游戏策划:
- 负责玩法设计、数值平衡、关卡设计
- 需要创造力、逻辑思维、数据分析能力
独立开发者:
- 全能型人才,需要掌握开发全流程
- 适合有创业精神、自律性强的人
职业发展建议:
短期(1-2年):
- 进入行业,积累项目经验
- 选择技术栈相对单一的岗位(如专注于Unity开发)
- 找到一位导师(Mentor)
中期(3-5年):
- 成为某个领域的专家(如UI系统、性能优化、AI)
- 参与更复杂的项目,学习架构设计
- 考虑是否转向管理岗(技术主管)
长期(5年+):
- 技术专家路线:架构师、技术总监
- 管理路线:项目经理、制作人
- 创业路线:独立工作室、发行自己的游戏
4.5 解决就业难题的策略
问题1:零经验如何入行?
解决方案:
- 实习:即使 unpaid 的实习也能获得宝贵经验
- 外包项目:在Upwork、猪八戒等平台接小项目
- 开源贡献:参与开源游戏项目(如Godot引擎)
- 游戏比赛:参加Game Jam(如Global Game Jam、Ludum Dare)
- 从测试岗入手:游戏测试是进入行业的常见跳板
问题2:学历不占优势?
解决方案:
- 用作品说话:优秀的作品集可以弥补学历不足
- 考取相关证书:如Unity认证开发者
- 提升英语能力:很多优质资源是英文的,英语好是加分项
- 关注独立游戏圈:独立游戏团队更看重实际能力而非学历
问题3:年龄偏大转行?
解决方案:
- 突出优势:项目管理、沟通能力、行业洞察
- 选择合适方向:策划、项目管理、技术美术等需要综合能力的岗位
- 利用现有人脉:通过朋友、校友进入行业
- 考虑远程工作:减少地域限制,扩大求职范围
第五部分:常见问题与解决方案
5.1 学习过程中的常见问题
Q1:感觉学习进度太慢,怎么办?
A:这是正常现象。游戏开发是综合技能,需要时间积累。建议:
- 设定小目标,每周完成一个小功能
- 加入学习社群,互相监督
- 记录学习日志,看到自己的进步
- 接受“慢即是快”的理念,基础打牢才能建高楼
Q2:遇到Bug卡住好几天,很挫败?
A:Bug是开发的一部分,学会调试是必备技能:
- 使用Debug.Log输出关键变量值
- 学会使用断点调试(Visual Studio/Rider)
- 拆分问题,逐个排查(二分法)
- 善用搜索引擎(Stack Overflow、知乎、CSDN)
- 在开发者社区提问(Unity官方论坛、QQ群)
Q3:不知道学Unity还是Unreal?
A:根据目标选择:
- 选Unity:想快速入门、做2D/移动游戏、就业机会多
- 选Unreal:追求极致画质、想做3A级项目、有C++基础
- 建议:先精通一个,另一个触类旁通。Unity对新手更友好
Q4:美术资源从哪里来?
A:零基础开发者可以:
- 使用免费资源网站:Kenney.nl、OpenGameArt、Itch.io免费区
- 使用Asset Store的免费资源
- 学习基础美术工具:Aseprite(像素画)、Blender(3D建模)
- 与美术合作:在开发者社区寻找合作伙伴
5.2 就业过程中的常见问题
Q1:投了很多简历,没有回音?
A:可能原因及对策:
- 简历问题:没有突出项目经验,技术关键词不足
- 作品集问题:没有可玩版本,只有截图
- 目标过高:一开始就投大厂,建议先从小公司或外包公司入手
- 时机问题:避开招聘淡季(春节后、毕业季)
Q2:面试时紧张,发挥不好?
A:
- 提前准备常见问题的答案,写下来并背诵
- 进行模拟面试(找朋友或导师)
- 带上作品,让作品替你说话
- 把面试当作技术交流,而非考试
Q3:薪资要求怎么谈?
A:
- 提前了解行业薪资水平(脉脉、拉勾、BOSS直聘)
- 根据城市、公司规模、个人能力综合评估
- 应届生/转行者:先以入行为主,薪资可适当降低
- 有经验者:用项目成果和数据支撑薪资要求
Q4:如何平衡工作与学习?
A:
- 利用碎片时间(通勤、午休)学习理论
- 晚上和周末集中时间做项目
- 设定优先级,放弃不必要的社交和娱乐
- 寻找支持你学习的家人或伴侣
结语:行动是解决问题的唯一途径
从玩游戏到做游戏,从零基础到就业,这条路没有捷径,但有方法。兴趣学院的游戏课程体系正是基于这样的理念设计的:通过系统化的学习路径、实战项目驱动、社区支持和就业指导,帮助每一位有热情的学习者实现梦想。
记住,最重要的不是你有多聪明,而是你是否愿意持续行动。每一个优秀的游戏开发者,都是从写第一个“Hello World”脚本开始的。当你完成第一个可玩的小游戏时,你就已经超越了90%的空想家。
现在,打开Unity,创建你的第一个项目,开始你的游戏开发之旅吧!未来的游戏世界,等待你去创造。
附录:推荐学习资源
在线课程:
- Unity Learn (learn.unity.com)
- Udemy: “Complete C# Unity Game Developer 2D/3D”
- Coursera: “Game Design and Development with Unity”
书籍:
- 《Unity游戏设计与实现》
- 《游戏编程模式》
- 《通关!游戏设计之道》
社区:
- Unity官方中文社区
- 独立游戏联盟(IGDA中国)
- GitHub GameDev相关仓库
工具:
- GitHub:代码托管
- Notion:项目管理
- Aseprite:像素画
- Blender:3D建模(免费)
求职平台:
- BOSS直聘、拉勾网(常规游戏公司)
- IndieVault(独立游戏团队)
- Itch.io(展示作品)
