unity实现丧尸围城项目(第三天)

190 阅读3分钟

1.实现效果:

开始界面.gif

2.新建四个动画

点击_Cinematic_camera1,打开动画选项卡,创建新剪辑,四个剪辑动画分别是idle、leftIdle、turnLeft、turnRight.

idle动画实现的是最开始界面的上下浮动变化,帧数从0开始,到240帧结束,在0-240帧数之间改变相机的高度即可,按照每秒60帧来算。我们可以点击动画窗格中的红色按钮,点击后unity会自动帮我们记录好每一次设置的操作,非常方便,设置完成后,也可以点击播放动画查看效果。

  1. idle帧数0-120-240,高度Y轴的值从30 30.2 30.4变化。旋转y轴的值保持80不变
  2. leftIdle帧数0、120、240,高度Y轴从30.4、30.2、30变化,旋转y轴的值为0不变
  3. turnLeft帧数0、240,旋转y轴80 、0,y轴从80旋转到0度
  4. turnRight帧数0、240,旋转y轴0、80,y轴从0度旋转到80度

image.png

3.设置动画控制器

新建好剪辑后,我们会发现项目会自动依据你在哪个物体上添加基础上添加一个动画控制器,名称和你的物体本身名称一样,依据四个剪辑,创建好动画之间的过渡

创建trigger类型的left、right变量,控制向左向右旋转

注意点:在旋转的时候要取消勾选退出时间,但是旋转完成后开始向上下浮动的时候这时候退出时间要保留。因为要等每次旋转完成后才能进行下一次的旋转,但是上下浮动操作的同时我是随时可以操作旋转的,所以在这里是不需要上下浮动的时候保留退出时间,这个是特别要注意的地方。

设置的动画控制器布局如下:

image.png

注意点:项目架构,在Resources新建Animation和Animator文件夹,Animation放的是动画,Animator放的是动画控制器,要有规律的存放项目文件

在相机身上挂载CameraAnimator脚本文件

CameraAnimator文件如下:

    using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;

public class CameraAnimator : MonoBehaviour
{
    //创建一个公开的委托
    public UnityAction showAction = null;
    // 关联动画控制器
    public Animator ani;
    void Start()
    {
        ani = GetComponent<Animator>();
    }

    //让相机左转的方法
    public void turnLeft()
    {
        //执行向左动画
        ani.SetTrigger("left");
    }


    //让相机向右转的方达
    public void turnRight()
    {
        //执行向左动画
        ani.SetTrigger("right");
    }

    //创建一个事件,事件要给相机的动画控制器使用,所以事件应该在相机中创建
    public void changePanel()
    {
        showAction?.Invoke(); //判断方法是否为空,如果不为空则执行  --语法糖
        showAction = null; //每次执行完之后都要置空,不然会影响下一次
    }
}

Camera.main意思是获取当前项目主相机,并且通过GetComponent获取脚本文件里面的turnRight方法,通过这个方法来改变向右旋转业务。

 Camera.main.GetComponent<CameraAnimator>().turnRight();

4.搭建HeroPanle界面

搭建HeroPanle界面,在这里就不写搭建步骤了,往期的文章步骤都有的,唯一注意的是每次都不要可以的去移动物体,我们要采用锚点来控制总体的布局,让电脑来帮我们计算好距离和布局才是最好的。

image.png

5.HeroPanle作为预制体

拖入预制体的前提,先把相应要改变的东西绑定好,

//关联各个控件
    public Text txtMoney;
    public Text txtHeroInfo;
    public Button btnLeft;
    public Button btnRight;
    public Button btnBack;
    public Button btnStart;

image.png

新建HeroPanle脚本文件,并将脚本文件挂载到HeroPanle面板身上, HeroPanle脚本文件内容如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class HeroPanle : basePanle
{
    //关联各个控件
    public Text txtMoney;
    public Text txtHeroInfo;
    public Button btnLeft;
    public Button btnRight;
    public Button btnBack;
    public Button btnStart;
    public override void Init()
    {
        btnBack.onClick.AddListener(() =>
        {
            //开启相机向右的动画
            Camera.main.GetComponent<CameraAnimator>().turnRight();
            //开启完之后更改showAction委托的值
            Camera.main.GetComponent<CameraAnimator>().showAction = () =>
            {
                //显示开启面板
                UIManager.Instance.showpanle<BeginPanle>();
            };
            //关闭角色面板
            UIManager.Instance.hidePanle<HeroPanle>();
        });
    }
}

将HeroPanle作为预制体放入Resources/UI文件夹中即可。最终这星期的丧尸围城告一段落,下星期再见!