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

一、开发阳光生产功能

向日葵的生产过程需要动画和时间

1.生产动画

选中Sunflower,然后选中窗口再选中

创建新的剪辑开始制作动画,向日葵生产动画的过程是一个从暗到亮然后持续一段时间再到暗的过程。因此只需要在对应的时间改变颜色即可。

为了保证是在动画高亮的时候产生阳光,因此要添加关键帧事件在对应位置,如下:

然后在PlantManager脚本中添加一个用于生产阳光的方法。

然后为帧事件添加对应的方法,步骤如下:

这样当动画执行到这个关键帧事件时就会调用这个方法。

现在动画已经做好了该如何播放呢?

要在动画状态机里面去设置,打开动画器

这个默认是播放Idle动画的,我们需要它在生产阳光的时候去播放Glowing动画,而且需要这两个动画同时去播放。

要添加一个新的Layers层,让其用来播放发光动画。

但是不能让发光状态为默认状态,要新建一个默认的空状态,然后再合适的情况下在切换到发光状态。并且将权重设置为1,这样动画才会对向日葵同时起作用。

如果控制这两个参数的切换呢?可以通过一个参数来控制,为其添加一个Trigger类型参数。

然后检测这个参数,当为true的时候就进行切换。并将退出时间不勾选

当播放完成后就自动切换回来。

下面通过代码来控制,发光动画的播放。

由于生产阳光这个功能只在这个向日葵身上才有的这个功能,因此需要把这个生产阳光的功能放在一个子类身上。还要将PlantManager里面的用于切换植物为启用状态的方法设置为虚方法,并在其子类中重写,这样就控制植物的状态了。代码如下:

   public float produceDuration = 5;
    private float produceTimer = 0;
    private Animator anim;

    private void Awake()
    {
        anim = GetComponent<Animator>();
    }


    //阳光状态的切换
    protected override void EnableUpdata()
    {
        produceTimer += Time.deltaTime;
        if(produceTimer > produceDuration)
        {
            produceTimer = 0;
            anim.SetTrigger("IsGlowing");

        }
    }

回到Unity中将将Sunflower预制体上的脚本更换为SunFlower,运行后效果如下:

每隔一段时间,向日葵就会播放一次发光动画。

2.创建阳光的Prefab和阳光的实例化

   public void ProduceSun()
    {
        GameObject go = GameObject.Instantiate(sunPrefab, transform.position, Quaternion.identity);
        float distance = Random.Range(23, 77);
        distance = Random.Range(0, 2) < 1 ? -distance : distance;
        Vector3 position = transform.position;
        position.x += distance;
        go.GetComponent<SunControl>().JumpTo(position);
    }

这个方法用于阳光的实例化,然后获取一个位置来确定阳光移动的最远距离。并将获得的位置坐标传入JumpTo()方法。

想要这个阳光实例化之后看起来更自然些,就在阳光的预制体上添加以一个脚本用于控制相关运动。

需要在脚本写一个方法用于向日葵的跳跃,借助Dotween插件。

    public void JumpTo(Vector3 targetPosition)
    {
        Vector3 centerPos = (transform.position + targetPosition) / 2;
        //获取俩点间的距离
        float distance = Vector3.Distance(transform.position, targetPosition);
        centerPos.y += (distance / 2);
        //路径、持续时间、平滑曲线
        transform.DOPath(new Vector3[] { transform.position, centerPos, targetPosition }, moveDuration, PathType.CatmullRom).SetEase(Ease.OutQuad);

    }

这个方法是根据传入的参数来获取到三个点的位置,最后在调用DOPath方法来实现一个抛物线的动画效果。效果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/319896.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

时间序列平稳性相关检验方法

理解平稳性 一般来说&#xff0c;平稳时间序列是指随着时间的推移具有相当稳定的统计特性的时间序列&#xff0c;特别是在均值和方差方面。平稳性可能是一个比较模糊的概念&#xff0c;将序列排除为不平稳可能比说序列是平稳的更容易。通常不平稳序列有几个特征&#xff1a; …

Wpf 使用 Prism 实战开发Day08

备忘录页面设计 1.效果图 一.布局设计跟第7章节一样&#xff0c;只是内容方面发生变化&#xff0c;其他样式都一样。直接把代码粘出来了 MemoView.xaml 页面代码 <UserControl x:Class"MyToDo.Views.MemoView"xmlns"http://schemas.microsoft.com/winfx/2…

MQTT基础下载使用

1.下载MQTT(MQTT官网) 下载完后在bin目录下启动cmd 控制台输入emqx start&#xff0c;注意&#xff0c;此时控制台是没有反应的&#xff0c;就回你个D&#xff1a;\EMQX。其实已经打开了。 打开桌面上的MQTTX 并新建连接 这是测试的数据 我订阅了一个test1的订阅 并且我发布…

百度自由DIY小程序源码:PHP+MySQL组合开发 带完整的搭建教程

随着移动互联网的快速发展&#xff0c;小程序已成为企业与用户互动的重要平台。然而&#xff0c;对于许多中小企业和开发者来说&#xff0c;从零开始开发一款小程序需要投入大量的时间和资源。 以下是部分代码示例&#xff1a; 系统特色功能一览&#xff1a; 1.高度自定义&…

js Array

var cars ["Saab", "Volvo", "BMW"]; 属性length - length获取到的是数组的最大索引1 向数组的最后一个位置添加元素 //语法&#xff1a;数组[数组.length] 值; arr[arr.length] 70; cars.length //3 - 数组的方…

12V直流电机驱动芯片GC9110T 为什么可以可替代LG9110S应用于摄像机等产品上呢

GC9110T是一款12V直流电机驱动芯片&#xff0c;为摄像机、消费类产品、玩具和其他低压或者电池供电的运动控制类应用提供了集成的电机驱动解决方案。芯片一般用了驱动一个直流电机或者使用两颗来驱动一个步进电机。GC9110T是GC9110&#xff08;低压6V驱动&#xff09;的12V升级…

力扣hot100 二叉树展开为链表 递归 特殊遍历

&#x1f468;‍&#x1f3eb; 题目地址 &#x1f469;‍&#x1f3eb; 参考题解 &#x1f60b; 将左子树插入到右子树上 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* …

邮件群发怎么做才有效果?如何做邮件群发?

邮件群发的注意事项有哪些&#xff1f;QQ邮箱群发邮件的方法&#xff1f; 在当今的数字营销时代&#xff0c;邮件群发已成为企业与客户保持联系的重要手段。但如何确保邮件群发的效果最大化呢&#xff1f;下面&#xff0c;蜂邮EDM将探讨几个关键要素&#xff0c;帮助您更有效地…

PyTorch常用工具(1)数据处理

文章目录 前言1 数据处理1.1 Dataset1.2 DataLoader 前言 在训练神经网络的过程中需要用到很多的工具&#xff0c;最重要的是数据处理、可视化和GPU加速。本章主要介绍PyTorch在这些方面常用的工具模块&#xff0c;合理使用这些工具可以极大地提高编程效率。 由于内容较多&am…

低代码平台开发 - 编辑器拓展

设计器&#xff08;编辑器&#xff09;这边内容比较杂&#xff0c;我们这次挑两个讲&#xff0c;一个是自定义出码&#xff0c;一个是新版本引擎中 array-setter 存在的问题这期和之前的文章关联性不大&#xff0c;可以直接在阿里的低代码引擎初始化的目录下进行&#xff0c;如…

当AI遇见大脑:电脑与人脑协同“进化”

编者按&#xff1a;2023年是微软亚洲研究院建院25周年。借此机会&#xff0c;我们特别策划了“智启未来”系列文章&#xff0c;邀请到微软亚洲研究院不同研究领域的领军人物&#xff0c;以署名文章的形式分享他们对人工智能、计算机及其交叉学科领域的观点洞察及前沿展望。希望…

Spring常用注解及模拟用户登录流程示例

注解 Resource注解实现自动注入 (反射)代码块xml配置文件 Autowired注解实现自动化注入代码块xml配置文件 扫描器-四个注解Dao层-RepositoryService层-ServiceController层-Controller测试任意类-Component 常用注解示例-模拟用户登录配置自动扫描的xml文件实体类Userdao层消息…