前言
欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第23篇中,我们将探索如何制作一个类似于七日杀和森林的生存游戏。
本篇内容会比较多,我会分几篇来实现,感兴趣的可以关注一下,以免错过内容更新。
本节主要实现砍树功能,并生成原木。
给树添加动画
摇晃动画
给树添加父物体,配置位置为000,改变相对位置实现偏移,这样可以让树的动画更加通用简单
打开动画
动画按帧数
修改子物体的偏移
后面就复制较弱的摇晃,可以再减低最后两次的摇晃
动画控制器配置
配置动画组件,记得不要让树是静态的(默认素材可能都是静态的),不然动画不会生效
并给树添加刚体组件,勾选Is Kinematic,方便后面做攻击碰撞检测
实现砍树,生命值低生成树木预制体
public class ChoppableTree : MonoBehaviour { public float treeMaxHealth; // 树木最大生命值 public float treeHealth; // 树木当前生命值 private Animator animator; private void Start() { treeHealth = treeMaxHealth; animator = GetComponent<Animator>(); } private void OnTriggerEnter(Collider other) { Debug.Log(other.name); if (other.CompareTag("AxeHead")) TakeDamage(1); } void TakeDamage(int damage) { animator.SetTrigger("shake"); // 播放摇晃动画 treeHealth -= damage; // 生命值减少 if (treeHealth <= 0) { TreeIsDead(); // 树木死亡 } } // 树木死亡的方法 void TreeIsDead() { Vector3 treePosition = transform.position; // 获取树木位置 Destroy(transform.parent.gameObject); // 销毁树木的父对象 // 创建砍倒后的树木 4是偏移,按自己的情况配置 Instantiate(Resources.Load<GameObject>("砍掉的树"), new Vector3(treePosition.x, treePosition.y + 4, treePosition.z), Quaternion.Euler(0, 0, 0)); } }
挂载脚本,配置树默认血量为5
给石斧添加攻击碰撞检测点,记得勾选触发器,并配置标签为AxeHead,默认关闭攻击检测点
修改石斧攻击动画,在攻击合适的点在开启攻击点
效果(后补效果)
实际运行可能没有倒下的效果
源码
源码不出意外的话我会放在最后一节