Unity 状态系统

2023-12-13 07:33:26

状态系统

原理

创建
更新
查询
id
状态
加入状态组

食用方法Demo

导入包👈, 通过字符串调用扩展方法。
每个物体都创建了一个状态,并且加入了两个随机的分组中,通过id更新状态值。
在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace ZYF
{

    public class StateSysDemo : MonoBehaviour
    {
        [SerializeField]
        private string stateId;
        [SerializeField]
        private ZYF_StateSystem.State<bool> state;
        [SerializeField]
        private List<ZYF_StateSystem.State<bool>> stateGroup;
        [SerializeField]
        private List<ZYF_StateSystem.State<bool>> stateGroup2;

        private void Start()
        {
            float randomInterval = Random.Range(1, 10);
            this.stateId= $"{gameObject.name}";
            this.state =stateId.GetOrCreateState<bool>();
            //初始化状态
            UpdateState();

            //加入状态组
            int randomGroup = Random.Range(1, 3);
            this.stateGroup= stateId.AddState2Group<bool>(groupId:$"测试组_{randomGroup}");
            randomGroup = Random.Range(4, 6);
            this.stateGroup2 = stateId.AddState2Group<bool>(groupId:$"测试组_{randomGroup}");

            //切换状态
            InvokeRepeating(methodName:nameof(SwitchActive),time:randomInterval,repeatRate: randomInterval);
        }

        private void UpdateState()
        {
            UpdateState(gameObject.activeInHierarchy);
        }
        
        private void UpdateState(bool state)
        {
            //更新状态值
            stateId.UpdateState<bool>(state);
        }

        void SwitchActive() {
            var newState = !gameObject.activeInHierarchy;
            gameObject.SetActive(newState);
            UpdateState(newState);
        }
    }
}

文章来源:https://blog.csdn.net/qq_26318597/article/details/134834569
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。