前言
欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第23篇中,我们将探索如何制作一个类似于七日杀和森林的生存游戏。
生存游戏一直以来都备受玩家们的喜爱,它们提供了一个真实而充满挑战的环境,让玩家们在艰苦的条件下尽力生存下去。通过本系列的指导,您将学会如何创建一个令人惊叹的生存游戏世界,包括资源管理、建造基地、狩猎、探索和对抗敌人等核心要素。
我们将从头开始,逐步构建游戏的各个方面。您将学习使用Unity的强大工具和功能,如场景编辑器、角色控制、AI编程、物理模拟等,以及如何优化游戏性能和创建令人印象深刻的图形效果。
请确保您具备一定的Unity开发基础知识,这将有助于更好地理解本系列的内容。即使您是初学者,也不要担心!我们将尽力以简单易懂的方式解释和演示每个步骤。
准备好开始制作一个令人兴奋的生存游戏了吗?让我们一起踏上这个创作之旅,开发出属于自己的精彩作品吧!
本篇内容会比较多,我会分几篇来实现,感兴趣的可以关注一下,以免错过内容更新。
本节主要实现环境的搭建,人物的控制,物品基本的交互。
环境
做游戏我通常喜欢先绘制好地形环境,这样可以让我们的游戏不会显得那么枯燥
素材
这里我用到的素材资源如下,你也可以选择使用自己喜欢的素材
https://assetstore.unity.com/packages/3d/environments/landscapes/free-island-collection-104753
https://assetstore.unity.com/packages/3d/vegetation/trees/dream-forest-tree-105297
绘制地形
还不会绘制地形,可以查看我之前的文章:零基础带你从小白到超神04——地形的绘制和基础使用介绍
这里为了节省时间,就直接放出最终效果了
实现人物移动
具体可以看这篇文章:
unity最完美的CharacterController 3d角色控制器,实现移动、跳跃、下蹲、奔跑、上下坡、物理碰撞效果,复制粘贴即用
效果
指示显示物品名称
物品挂载脚本,并配置好名字
public class InteractableObject : MonoBehaviour { public string ItemName; // 物品名称 // 获取物品名称的方法 public string GetItemName() { return ItemName; } }
比如我们在树预制体上挂载脚本,记得添加碰撞体
控制显示物品UI文本
public class SelectionManager : MonoBehaviour { public GameObject interactionInfoUI; // 交互信息UI对象 private TextMeshProUGUI interactionText; // 交互文本组件 public float maxDistance = 3f; // 最大检测距离 public LayerMask layerMask; // 检测层级 private void Start() { interactionText = interactionInfoUI.GetComponent<TextMeshProUGUI>(); // 获取交互文本组件 } void Update() { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); // 从鼠标位置创建射线 RaycastHit hit; if (Physics.Raycast(ray, out hit, maxDistance, layerMask)) // 检测射线是否击中物体 { var selectionTransform = hit.transform; if (selectionTransform.GetComponent<InteractableObject>()) { interactionText.text = selectionTransform.GetComponent<InteractableObject>().GetItemName(); interactionInfoUI.SetActive(true); // 显示交互信息UI } } else { interactionInfoUI.SetActive(false); // 鼠标未点击任何物体,隐藏交互信息UI } } }
挂载脚本配置参数, 记得修改所有的交互物体层为Interaction
效果
源码
源码不出意外的话我会放在最后一节