unity学习笔记----游戏练习05

这篇具有很好参考价值的文章主要介绍了unity学习笔记----游戏练习05。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、阳光的收集和搜集动画开发

1.收集阳光的思路:当鼠标点击到阳光的时候,就可以进行收集了。可以通过为添加一个碰撞器来检测Circle Collider 2D

编写脚本:

在SunManager中写一个增加阳光的方法

    //增加阳光
    public void AddSubSun(int Point)
    {
        sunPoint += Point;
        UpdataSunPointText();
    }

这里需要注意的是,由于地面也有碰撞器,他会优先去检测离相机近,如果他们一样近阳光身上的触发器就可能不会触发,就需要改变阳光的z坐标,让其离相机更近。这样就能检测到阳光。

unity学习笔记----游戏练习05,学习,笔记,游戏

阳光收集的效果是,当点击阳光后阳光移动到这个位置后销毁阳光数量增加。

因此需要一个获取这个组件坐标的

    public Vector3 GetSunPointTextPosition()
    {
        return sunPointTextPosition;
    }

    //获取组件的坐标
    private void CalcSunPointTextPosition()
    {
        //将其转换为世界坐标系
        Vector3 position = Camera.main.ScreenToWorldPoint(sunPointText.transform.position);
        position.z = 637;
        sunPointTextPosition = position;

    }

在SunFlower中写一个鼠标点击事件

    //检测鼠标点击到阳光
    public void OnMouseDown()
    {
        SunManager.Instance.AddSubSun(Point);
        transform.DOMove(SunManager.Instance.GetSunPointTextPosition(), moveDuration)
            .SetEase(Ease.OutQuad)
            .OnComplete(
           () =>
           {
               Destroy(this.gameObject);
           });

    }

当阳光移动到位置后将其销毁。效果如下:

unity学习笔记----游戏练习05,学习,笔记,游戏

这样会看到阳光被遮罩了,因此需要将Canvas的渲染模式改为屏幕空间-摄像机,这样阳光就不会被遮盖了。

2.阳光通过自然生成

阳光在这个范围内随机生成,在这个场景的外面,生成后从上方落下来

unity学习笔记----游戏练习05,学习,笔记,游戏

需要一个随机数来生成坐标,需要用到时间间隔和计时器

    void ProduceSun()
    {
        produceTime += Time.deltaTime;
        if(produceTime > produceTimer)
        {
            produceTime = 0;
            Vector3 position = new Vector3(Random.Range(-340, 475), 558, 636);
            GameObject go = GameObject.Instantiate(sunPrefab, position, Quaternion.identity);
            position.y = Random.Range(-260, 260);
        }
    }

一定时间间隔后就会在一个随机位置生成一个阳光的预制体,获取一个随机的下路位置。生成阳光的预制体后还要让阳光下落到随机位置上。因此在Suncontrol脚本中需要一个用于下落的方法。

    public void LinearTo(Vector3 targetPodition)
    {
        transform.DOMove(targetPodition, moveDuration);
    }

然后调用这个方法,将这代码补齐在ProduceSun方法的后面。

go.GetComponent<SunControl>().LinearTo(position);

代码运行效果如下:

unity学习笔记----游戏练习05,学习,笔记,游戏

二.豌豆射手的开发

1.制作豌豆射手的动画,选中豌豆射手的图片,将其拖拽到场景中生成动画

unity学习笔记----游戏练习05,学习,笔记,游戏

2.设置豌豆设置的发射功能

创建脚本用于控制豌豆射手,因为豌豆射手也是植物因此也要其和太阳花一样继承于PlantManagr

public class PesshooterConter : PlantManagr

在PlantManagr中有个EnableUpdata()方法,

    private void Update()
    {
        switch (plantState)
        {
            case PlantState.Disable:
                DisableUpdata();
                break;
            case PlantState.Enable:
                EnableUpdata();
                break;
            default:
                break;
        }
    }

要实现豌豆射手的射击功能就在EnableUpdata中进行控制。当豌豆射手被启用的时候,去重写EnableUpdata方法,在这个里面去控制他的射击。

这里涉及到了,方法的重新和多态

方法重写(Method Overriding): 子类可以提供对其父类中已定义方法的新实现。这就是所谓的方法重写。EnableUpdata 方法在子类 SunFlower 中被重写,以提供与父类中相同方法名的新实现

多态(Polymorphism): 多态是一种允许对象在运行时表现出不同形态的特性。在方法重写的情况下,多态允许你在不知道对象具体类型的情况下调用相同的方法名,而实际上会执行该对象实际类型的实现。Update 方法是多态的一个示例,因为它会根据对象的实际类型调用相应的 EnableUpdata 或 DisableUpdata 方法。

要实现这个方法时间间隔和计时器,在实例化豌豆时需要一个位置,在为豌豆设置创建一个子物体,将其调整到合适的位置。

    public float shootDuration;//间隔
    private float shootTimer;//计时器
    public GameObject shootPointTransform;//子物体

重写EnableUpdata方法,在这个里面去控制他的射击。

    protected override void EnableUpdata()
    {
        shootTimer += Time.deltaTime;
        if(shootTimer > shootDuration)
        {
            shootTimer = 0;
            shoot();
        }
    }

当时达到时间间隔后,就会调用shoot方法进行射击。文章来源地址https://www.toymoban.com/news/detail-829370.html

到了这里,关于unity学习笔记----游戏练习05的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity学习笔记--如何用代码Copy Component并且Paste到其他游戏对象上?

    最近需要在编辑器模式下,用代码实现复制一个组件并且移动到另一个游戏对象上 简单来说就是剪切 通过查询Unity API可以了解到 UnityEditorInternal.ComponentUtility.CopyComponent 。 比如我们想把A游戏对象上的 Rigidbody 组件移动到B游戏对象上 有时候,我们可能需要把一个游戏对象上的

    2024年02月15日
    浏览(41)
  • Unity学习笔记--如何优雅简便地利用对象池生成游戏对象(进阶版)LRU + 对象池

    之前写过一篇关于对象池的文章,现在来看写的并不是很好,所以来考虑优化下。 现在来看一年前写的代码,越看越不能入目hhh Unity学习笔记–如何优雅简便地利用对象池生成游戏对象 Unity学习笔记–使用 C# 开发一个 LRU PoolManager.cs BaseFactory.cs 创建 Factory 创建 object 创建 Bu

    2024年02月13日
    浏览(45)
  • 【Unity学习笔记】b站Unity架构课Unity3D 商业化的网络游戏架构(高级/主程级别)

    自己跟着学完了,写了不少代码,会放在CSDN代码库,因为老师并没有提供源码,录屏也不是完全连续,所以难免 有代码缺少、无法运行 的情况,但是确实学到了不少真本事,主要是了解老师的架构思想。 b站课程地址 课程我自己是跟着学完了的,本文是个人笔记记录和好课

    2024年02月02日
    浏览(52)
  • 用Unity3D制作FPS游戏的学习笔记————人物移动、利用鼠标实现视角转动和人物跳跃(含人物悬空不掉落修复)

    前言: 这是我第一次发布文章,此文章仅供参考,我也是刚学习接触untiy,在制作项目的过程中将有用的写下来记一记,以便自己之后能回头看看,各位大佬轻点喷,若有错误请麻烦积极提谢谢各位。该文章参考自B站UP主蔡先森_rm-rf发布的 【第一人称射击游戏教程2.0【已完结

    2024年04月27日
    浏览(63)
  • JavaScript学习笔记05

    什么是 BOM BOM(Browser Object Model)是指 浏览器对象模型 ,是用于描述这种对象与对象之间层次关系的模型。 浏览器对象模型(BOM)提供了独立于内容的、可以与浏览器窗口进行互动的对象结构。 浏览器 主流的浏览器分为 IE、Microsoft Edge、Chrome、Firefox、Safari、Opera 等几大类

    2024年02月07日
    浏览(35)
  • CSS学习笔记05

    position CSS 属性 position - 用于指定一个元素在文档中的定位方式。 top , right , bottom 和 left 属性则决定了该元素的最终位置。 position 有以下常用的属性值: position: static; - 默认值。指定元素使用正常的布局行为,即元素在标准文档流中当前的布局位置。此时 top , right , botto

    2024年02月10日
    浏览(28)
  • Node.js学习笔记-05

    测试包含单元测试、性能测试、安全测试和功能测试等几个方面,本章将从Node实践的角度来介绍单元测试和性能测试。 10.1.1 单元测试的意义 开发者自测。对于开发者而言,不仅要编写单元测试,还应当编写可测试代码。 编写可测试代码原则: 单一职责 接口抽象 层次分离

    2024年02月12日
    浏览(43)
  • 【OpenCV学习笔记05】- 鼠标作为画笔

    这是对于 OpenCV 官方文档的 GUI 功能的学习笔记。学习笔记中会记录官方给出的例子,也会给出自己根据官方的例子完成的更改代码,同样彩蛋的实现也会结合多个知识点一起实现一些小功能,来帮助我们对学会的知识点进行结合应用。 如果有喜欢我笔记的请麻烦帮我关注、

    2024年02月02日
    浏览(35)
  • k8s学习笔记-05(命名空间)

    原创文档编写不易,未经许可请勿转载。文档中有疑问的可以邮件联系我。 邮箱:yinwanit@163.com k8s中资源通过命名空间进行资源与资源间的隔离。不同的命名空间中的资源相互独立。可以理解为租户。k8s安装完成过后默认自带四个命名空间:default、kube-node-lease、kube-pubic、k

    2024年02月13日
    浏览(38)
  • 【go语言学习笔记】05 Go 语言实战

    在做项目开发的时候,要善于借助已经有的轮子,让自己的开发更有效率,也更容易实现。 1. RESTful API 定义 RESTful API 是一套规范,它可以规范如何对服务器上的资源进行操作。和 RESTful API 和密不可分的是 HTTP Method。 1.1 HTTP Method HTTP Method最常见的就是POST和GET,其实最早在

    2024年02月13日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包