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

一、添加游戏背景和卡片槽

1.植物在卡片槽上的状态有三种,高亮、灰色、冷却状态,现在以向日葵为列作为示例:

因此要创建三个Image,为其添加不同的状态:

然后去控制植物在冷却时的效果,这个时候需要设置图片的图像类型,将其设置为以填充,最后通过控制填充总数的值的变化来达到,冷却的显示效果。

设置好了之后为其创建一个公共的父类,然后将其设置为预设体。如下效果:

2.通过脚本控制不同状态,在CardTemplate上添加脚本来控制。

定义枚举来控制不同状态,在冷却完毕后会进入等待阳光的状态,当阳光够了之后会直接进入Ready状态,当我们点击后进入Cooling状态。

enum CardState
{
    Cooling,
    WaitingSun,
    Ready,
}

定义一个默认状态的属性:

 private CardState cardState = CardState.Cooling;

定义两个游戏物体引用,定义一个Image属性

    public GameObject cardLight; 
    public GameObject cardGray;
    public Image cardMask;

定义冷却时间属性和计时器

    public float cdTime = 2;
    public float cdTimer = 0;

在Update里面使用switch语句来对不同状态进行判断,并在对应的状态调用对应的方法。

  private void Update()
    {
        switch (cardState)
        {
            case CardState.Cooling:
                CoolingUpdata();
                break;
            case CardState.WaitingSun:
                WaitingSunUpdata();
                break;
            case CardState.Ready:
                ReadyUpdata();
                break;
            default:
                break;
        }
    }

现在为具体的方法写对应的逻辑

现在为不同状态的转换写入相应方法

切换到等待阳光状态:

    void TransitionTowaitingSun()
      {
        cardState = CardState.WaitingSun;
        cardLight.SetActive(false);
        cardGray.SetActive(true);
        cardMask.gameObject.SetActive(false);
    }

切换到可种植状态:

    private void TransitionToReady()
    {
        cardState = CardState.Ready;
        cardLight.SetActive(true);
        cardGray.SetActive(false);
        cardMask.gameObject.SetActive(false);
    }

切换到冷却状态:

  void TransitionToCooling()
    {
        cardState = CardState.Cooling;
        cdTimer = 0;
        cardLight.SetActive(false);
        cardGray.SetActive(true);
        cardMask.gameObject.SetActive(true);
    }

对于CoolingUpdata方法:这个方法需要修改Image组件上的填充属性,让其从一慢慢渐变到零表示冷却时间结束。这个属性显示的是剩余时间的比例,因此:

    private void CoolingUpdata()
    {
        cdTimer += Time.deltaTime;
        cardMask.fillAmount = (cdTime - cdTimer) / cdTime;
        if (cdTimer >= cdTime)
        {
            TransitionTowaitingSun();
        }
    }

现在编写WaitingSunUpdata方法,在这个方法里面只需要判断阳光是否足够即可。

对于阳光,创建一个SunManager的类来单独管理阳光,并将其设置为单例模式。

    public static SunManager Instance { get; private set; }
    private void Awake()
    {
        Instance = this;
    }
    //添加序列化标签,方便测试
    [SerializeField]
    private int sunPoint; 
    public int SunPoint
    {
        get { return sunPoint; }
    }

回到WaitingSunUpdata方法里

声明需要的阳光值的属性

    [SerializeField]
    private int needSunPoint = 50;

    private void WaitingSunUpdata()
    {
        if (needSunPoint <= SunManager.Instance.SunPoint)
            {
               TransitionToReady();
            }

    }

当阳光足够时调用TransitionToReady方法切换到可种植状态。

现在编写ReadyUpdata方法,这个方法是表示植物是可以被种植的,同样也要检测阳光是否足够,如果不够就切换状态,而且这个状态植物是可以被点击的,因此为其添加一个button组件,为其添加一个点击事件。

    private void WaitingSunUpdata()
    {
        if (needSunPoint <= SunManager.Instance.SunPoint)
            {
               TransitionToReady();
            }

    }

//点击事件

    public void Onclick()
    {
        if (needSunPoint > SunManager.Instance.SunPoint) return;
        //TODO:消耗阳光值,并进行种植
         TransitionToCooling();
    }

所以逻辑编写之后,运行游戏会有如下效果:

一开始会是冷却状态,冷却过后会进入等待阳光状态,当阳光足够时点击卡片又重新进入冷却状态。

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2023-12-30 04:06:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-30 04:06:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-30 04:06:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-30 04:06:03       18 阅读

热门阅读

  1. StarRocks:快速查询的秘密解析

    2023-12-30 04:06:03       32 阅读
  2. 【Leetcode Sheet】Weekly Practice 21

    2023-12-30 04:06:03       30 阅读
  3. GO基础进阶篇 (六)、I/O流

    2023-12-30 04:06:03       33 阅读
  4. PAT 乙级 1037 在霍格沃茨找零钱

    2023-12-30 04:06:03       36 阅读
  5. GPT技术:人工智能的语言革命

    2023-12-30 04:06:03       39 阅读
  6. idea 如何开启mybatis控制台SQL日志打印

    2023-12-30 04:06:03       44 阅读
  7. C++ 多态详解(14)

    2023-12-30 04:06:03       48 阅读
  8. Bun 安装

    2023-12-30 04:06:03       53 阅读
  9. 鸿蒙Harmony(十)动画

    2023-12-30 04:06:03       33 阅读
  10. 编程笔记 html5&css&js 002 一些基本概念

    2023-12-30 04:06:03       30 阅读
  11. 送你一台云电脑

    2023-12-30 04:06:03       36 阅读