首页 > 编程语言 >【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版1(附带项目源码)

【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版1(附带项目源码)

时间:2024-05-25 14:26:22浏览次数:30  
标签:float 僵尸 void interval 大战 unity public 游戏

最终效果

在这里插入图片描述

系列导航

文章目录

前言

在游戏界,有些作品以其独特的创意和精彩的游戏体验,成为了经典中的经典。而《植物大战僵尸》就是其中的佼佼者,它以其独特的塔防玩法和富有趣味性的设计,吸引了全球无数玩家的喜爱。

植物大战僵尸系列每隔一段时间,总是会在不经意间突然爆火,比如之前的植物大战僵尸随机版,还有最近火出圈的植物大战僵尸杂交版。其实之前就有很多小伙伴一直问我关于植物大战僵尸的一些问题,突然想起来确实也没做过相关内容,然后就抓紧出了这个系列,希望看完本系列,你也能制作出带自己特色的植物大战僵尸版本。

在这个项目中,我们将借助Unity引擎,以致敬之心,重新打造这款不朽的经典游戏。通过复刻《植物大战僵尸》,我们不仅是在向这部经典之作致敬,更是在探索游戏设计的魅力与深度。在这个过程中,我们将学习如何设计多样化的植物和僵尸角色,构建引人入胜的关卡设计,以及打造出一款令人回味无穷的游戏体验。

本项目旨在让玩家们重温童年的回忆,感受到游戏带来的乐趣和挑战。无论你是喜爱原作的老玩家,还是对于游戏开发感兴趣的新手,都将在这个项目中找到属于自己的乐园。希望通过这个项目,能够唤起你对于游戏的热爱与回忆,让我们一起迎接这场植物与僵尸的精彩对决!

本节主要是实现简单搭建环境 一些植物行为

素材

链接:https://pan.baidu.com/s/1ZtvR0dzGEx5irAmNJ_SJzQ?pwd=ezet
提取码:ezet

简单搭建环境

其实就是放置一个背景图片,可以选择调整摄像机视野大小
在这里插入图片描述

在这里插入图片描述

豌豆射手

新增PeaBullet,控制豌豆子弹发射

public class PeaBullet : MonoBehaviour
{
    public Vector3 direction; //发射方向
    public float speed;//速度
    
    void Update()
    {
        transform.position += direction * speed * Time.deltaTime;
    }
}

配置
在这里插入图片描述
新增PraShooter,控制子弹发射

public class PraShooter : MonoBehaviour
{
    public float interval; //攻击间隔
    public Transform bullet;//子弹预制体
    public Transform bulletPos;//子弹生成位置
    public float attackDistance;//攻击距离
    public LayerMask layerMask;//检测图层

    private void Start()
    {
        StartCoroutine(Attack());
    }

    IEnumerator Attack()
    {
        while (true)
        {
            Shoot(); // 执行射击操作
            yield return new WaitForSeconds(interval); // 等待interval秒
        }
    }

    void Shoot()
    {
        RaycastHit2D hit = Physics2D.Raycast(bulletPos.position, Vector2.right, attackDistance, layerMask); // 发射射线
        //射线检测攻击范围是否有敌人
        if (hit.collider != null)
        {
            if(hit.collider.CompareTag("Enemy")) Instantiate(bullet, bulletPos.position, Quaternion.identity); // 生成子弹
        }
    }

    void OnDrawGizmosSelected()
    {
        Gizmos.color = Color.red;
        Gizmos.DrawLine(bulletPos.position, bulletPos.position + Vector3.right * attackDistance); // 绘制持久化的射线提示
    }
}

配置
在这里插入图片描述

效果
在这里插入图片描述

向日葵

向日葵分为待机和生产的动画,配置好切换动画
在这里插入图片描述
新增SunFlower代码,控制一段时间,在向日葵随机附近位置生成阳光

public class SunFlower : MonoBehaviour
{
    public float interval; //攻击间隔
    public Transform sunshine;//阳光预制体
    public float produceDistance;//产生距离
    Animator animator;

    private void Start()
    {
        animator = GetComponent<Animator>();
        StartCoroutine(Produce());
    }

    IEnumerator Produce()
    {
        while (true)
        {
            yield return new WaitForSeconds(interval); // 等待interval秒
            animator.SetTrigger("produce");//播放动画
        }
    }

    //产生阳光
    public void ProduceSunshine()
    {
        // 在单位圆内生成随机点
        Vector2 randomPoint = Random.insideUnitCircle * produceDistance;
        // 将随机生成位置
        Vector3 spawnPosition = new Vector3(randomPoint.x, randomPoint.y, 0f) + transform.position;

        Instantiate(sunshine, spawnPosition, Quaternion.identity); // 生成阳光
    }
}

配置生产动画,添加事件调用ProduceSunshine,产生阳光
在这里插入图片描述
挂载脚本,配置参数
在这里插入图片描述
新增sun代码,控制阳光一定时间后自动消失

public class Sun : MonoBehaviour
{
    public float interval; //间隔

    void Start()
    {
        StartCoroutine(SetDestroy());
    }

    IEnumerator SetDestroy()
    {
        yield return new WaitForSeconds(interval); // 等待interval秒
        Destroy(gameObject);
    }
}

挂载脚本,配置参数
在这里插入图片描述

效果
在这里插入图片描述

源码

源码不出意外的话我会放在最后一节

结束

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,以便我第一时间收到反馈,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,出于兴趣爱好,最近开始自学unity,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!php是工作,unity是生活!如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~

在这里插入图片描述

标签:float,僵尸,void,interval,大战,unity,public,游戏
From: https://blog.csdn.net/qq_36303853/article/details/139125944

相关文章

  • Unity (保姆入门)
    前沿周末啦开始新的一轮征途,我的目标就是星辰大海嘎嘎孟还好之前学过COCOS,这个编辑器差不多, 还是不学无术啊。哈哈哈开始新的项目吧, 骚年!!!创建项目 然后倒入你的文件资源:材质,预制体之类的我网上找的材料然后在你的场景里面右键鼠标创建一个3D的胶囊体 ......
  • Unity基础——Input
    Unity基础——Input1.鼠标输入//我们在这段代码最后实现一个基本用鼠标控制视角的功能usingUnityEngine;classScript1:MonoBehaviour{[SerializeField]privatefloatmouseSensitivity=30f;privatefloatxRotation=0f;//当前的旋转角度......
  • Unity Shader介绍
    1.Shader的基本概念什么是Shader?Shader是小型程序,用于在GPU上运行,处理顶点、像素或其他图形处理单元。Unity主要使用以下两种Shader:顶点Shader(VertexShader):处理每个顶点的数据,如位置、颜色和纹理坐标。片段Shader(FragmentShader):决定每个像素的颜色。Unity中的Shader类型......
  • 【Unity资源】Unity学习资源汇总
    【中文网站】1.Unity官方中文网站(https://learn.u3d.cn)-[推荐]特点:提供官方的Unity资源、教程和支持。内容权威且更新及时。适合人群:所有层次的学员和开发者。2.Unity3D中国(https://unity.cn)-[推荐]特点:Unity的中文官方网站,提供全面的资源和支持,包括下载、......
  • C#基础:委托与事件(在Unity中举例)
    委托(Delegate):委托是C#中的一种类型,表示对具有特定参数列表和返回类型的方法的引用。委托类似于C++中的函数指针,但它是类型安全的,并且是面向对象的。它们通常用于将方法作为参数传递给其他方法,实现回调功能。委托的关键特性:类型安全:委托是类型安全的,这意味着方法的签名必须与......
  • Unity Texture Setting 中 Filter Mode的影响
    网友的笔记https://blog.csdn.net/u012322710/article/details/50858216Fitermode过滤器模式 因为贴图在屏幕里肯定会存在放大,缩小的情况,这种时候就会出现锯齿。今天看到一个视频有讲解到这一块。在UNITY3D中点开一张贴图,Fitermode过滤器模式,下面有3个选项 point ,......
  • unity中animator中Trigger多次触发动画的解决方法(基于 stateInfo和ResetTrigger)
    巧妙地重置動畫控制器觸發(ResetTriggers)_哔哩哔哩_bilibili提出了FSMCleaSignals,会在进和出动画时使相关的trigger变为非激活状态,但是当该动作涉及多layer/多trigger控制时,会在该layer中动作未完成时,其他layer读取到了还未更改的异常激活状态的trigger,从而出错,这种错误主要是......
  • *Unity基础——Transform组件*
    Unity基础——Transform组件一.一些比较重要的点1.首先编辑器面板中的位置信息指的是物体相对于父物体的坐标(本地坐标),如果物体没有父物体,则其父物体可以看作是世界,则该坐标实际上是世界坐标;2.如果在脚本中调用transform组件的position属性,其是一个Vector3类型的对象,指的是......
  • [Unity] 单例基类的实现方式
    Unity单例基类的实现方式游戏开发的过程中我们经常会将各种“Manger”类设为单例,以实现单一资源的全局访问。Unity中的单例一般分为两类,一种是直接继承自Object的普通单例,还有一种是需要继承MonoBehaviour的Mono单例。接下来我将会讲解这两种单例基类的实现方式。注意:由于Unity......
  • Unity安卓IOS一键打包
    添加菜单构建按钮,使用下面API进行构建,注意设置和配置等usingSystem;usingSystem.IO;usingAssetBundles;usingLiXiaoQian.Common.Editor.Tools;usingUnityEditor;usingUnityEngine;///打包工具publicclassBuildTool{[MenuItem("Tools/构建/Android平台")]......