当前位置: 首页 > news >正文

四川省建设厅官方网站联系电话软文广告经典案例100字

四川省建设厅官方网站联系电话,软文广告经典案例100字,wordpress主题破解博客,什么网站做web搜索引擎种子最好基本流程 制作场景之间的切换 1.代码思路 (1)为了实现不同场景切换,并且保持当前的persistentScene一直存在,则需要一个Manager去控制场景的加载和卸载,并且在加载每一个场景之后,都要将当前的场景Set Active Scene,保证其为激活的场景,在卸载的时候也可以方便调用当前激活的场…

基本流程

        制作场景之间的切换

1.代码思路

        (1)为了实现不同场景切换,并且保持当前的persistentScene一直存在,则需要一个Manager去控制场景的加载和卸载,并且在加载每一个场景之后,都要将当前的场景Set Active Scene,保证其为激活的场景,在卸载的时候也可以方便调用当前激活的场景,然后把它卸载掉

        (2)每次创建一个新的场景之后都要去Build Settings当中,将所有创建的场景都添加到这个列表当中

        (3)由于游戏的场景是逐一叠加的,那么异步加载的模式就为Additive(在原有的场景当中叠加)

        (4)场景之间切换是通过碰撞触发的,需要指定切换后的场景和坐标

        (5)切换场景需要用一个新的脚本来控制,它所需要的变量有目标场景名,目标坐标,要注意在卸载场景的时候人物是不能被玩家控制的,还需要注意的是,在传送过程中选中物品的情况(举起物品),也就是说要在卸载场景之前,恢复player的基本动画(AnimatorOverride.cs),取消物品的高亮显示(InventoryUI.cs)

2.代码实现

TransitionManager.cs

namespace FuliFarm.Transition
{public class TransitionManager : MonoBehaviour{//游戏开始的场景public string startSceneName = string.Empty;private void Start(){StartCoroutine(LoadSceneSetActive(startSceneName));}private void OnEnable(){EventHandler.TransitionEvent += OnTransitionEvent;}private void OnDisable(){EventHandler.TransitionEvent -= OnTransitionEvent;}private void OnTransitionEvent(string sceneToGo, Vector3 positionToGo){StartCoroutine(Transition(sceneToGo, positionToGo));}/// <summary>/// 卸载一个场景,加载另外一个场景/// </summary>/// <param name="sceneName">目标场景</param>/// <param name="targetPosition">目标位置</param>/// <returns></returns>private IEnumerator Transition(string sceneName, Vector3 targetPosition){//呼叫卸载场景之前要做的事EventHandler.CallBeforeSceneUnloadEvent();yield return SceneManager.UnloadSceneAsync(SceneManager.GetActiveScene());yield return LoadSceneSetActive(sceneName);//移动人物坐标EventHandler.CallMoveToPosition(targetPosition);//呼叫加载场景之后的事件EventHandler.CallAfterSceneLoadedEvent();}/// <summary>/// 加载场景并设置为激活/// </summary>/// <param name="sceneName">场景名</param>/// <returns></returns>private IEnumerator LoadSceneSetActive(string sceneName){//协成当中所有的加载场景都是异步加载yield return SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);Scene newScene = SceneManager.GetSceneAt(SceneManager.sceneCount - 1);//序号从0开始,而数量(count)是从1开始的,所以减1SceneManager.SetActiveScene(newScene);}}
}

  Teleport.cs

namespace FuliFarm.Transition
{public class Teleport : MonoBehaviour{public string sceneToGo;public Vector3 positionToGo;private void OnTriggerEnter2D(Collider2D other){if (other.CompareTag("Player")){//把目标位置和目标场景传给TransitionManager中,然后调用协成Transition,就去到了对应的场景EventHandler.CallTransitionEvent(sceneToGo, positionToGo);}}}
}

新增事件

//切换场景
public static event Action<string, Vector3> TransitionEvent;
public static void CallTransitionEvent(string sceneName,Vector3 pos)
{TransitionEvent?.Invoke(sceneName,pos);
}//卸载场景之前的事件
public static event Action BeforeSceneUnloadEvent;
public static void CallBeforeSceneUnloadEvent()
{BeforeSceneUnloadEvent?.Invoke();
}//加载场景之后的事件
public static event Action AfterSceneLoadedEvent;
public static void CallAfterSceneLoadedEvent()
{AfterSceneLoadedEvent?.Invoke();
}//传送到所在位置
public static event Action<Vector3> MoveToPosition;
public static void CallMoveToPosition(Vector3 targetPosition)
{ MoveToPosition?.Invoke(targetPosition);
}

修改SwitchBounds.cs

public class SwitchBounds : MonoBehaviour
{//注册事件private void OnEnable(){EventHandler.AfterSceneLoadedEvent += SwitchConfinerShape;}private void OnDisable(){EventHandler.AfterSceneLoadedEvent -= SwitchConfinerShape;}private void SwitchConfinerShape(){PolygonCollider2D confinerShape = GameObject.FindGameObjectWithTag("BoundsConfiner").GetComponent<PolygonCollider2D>();CinemachineConfiner confiner = GetComponent<CinemachineConfiner>();confiner.m_BoundingShape2D = confinerShape;//Call this if the bounding shape's points change at runtimeconfiner.InvalidatePathCache();}
}

 修改ItemManager.cs

public class ItemManager : MonoBehaviour
{public Item itemPrefab;private Transform itemParent;private void OnEnable(){EventHandler.InstantiateItemInScene += OnInstantiateItemInScene;EventHandler.AfterSceneLoadedEvent += OnAfterSceneLoadedEvent;}private void OnDisable(){EventHandler.InstantiateItemInScene -= OnInstantiateItemInScene;EventHandler.AfterSceneLoadedEvent -= OnAfterSceneLoadedEvent;}private void OnAfterSceneLoadedEvent(){itemParent = GameObject.FindWithTag("ItemParent").transform;}private void OnInstantiateItemInScene(int ID, Vector3 pos){var item = Instantiate(itemPrefab, pos, Quaternion.identity, itemParent);item.itemID = ID;}
}

新增Player.cs中的函数以及变量,并修改Update

    private bool inputDisable;private void OnEnable(){EventHandler.BeforeSceneUnloadEvent += OnBeforeSceneUnloadEventd;EventHandler.AfterSceneLoadedEvent += OnAfterSceneLoadedEvent;EventHandler.MoveToPosition += OnMoveToPosition;}private void OnDisable(){EventHandler.BeforeSceneUnloadEvent -= OnBeforeSceneUnloadEventd;EventHandler.AfterSceneLoadedEvent -= OnAfterSceneLoadedEvent;EventHandler.MoveToPosition -= OnMoveToPosition;}private void OnMoveToPosition(Vector3 targetPosition){transform.position = targetPosition;}private void OnAfterSceneLoadedEvent(){inputDisable = false;}private void OnBeforeSceneUnloadEventd(){inputDisable = true;}private void Update(){if(inputDisable == false)PlayerInput();SwitchAnimation();}

 AnimatorOverride.cs新增注册事件以及具体实现

private void OnEnable()
{EventHandler.ItemSelectedEvent += OnItemSelectedEvent;EventHandler.BeforeSceneUnloadEvent += OnBeforeSceneUnloadEvent;
}private void OnDisable()
{EventHandler.ItemSelectedEvent -= OnItemSelectedEvent;EventHandler.BeforeSceneUnloadEvent -= OnBeforeSceneUnloadEvent;
}private void OnBeforeSceneUnloadEvent()
{holdItem.enabled = false;SwitchAnimator(PartType.None);
}

新增InventoryUI.cs注册事件以及实现

private void OnEnable()
{EventHandler.UpdateInventoryUI += OnUpdateInventoryUI;EventHandler.BeforeSceneUnloadEvent += OnBeforeSceneUnloadEvent;
}private void OnDisable()
{EventHandler.UpdateInventoryUI -= OnUpdateInventoryUI;EventHandler.BeforeSceneUnloadEvent -= OnBeforeSceneUnloadEvent;
}private void OnBeforeSceneUnloadEvent()
{UpdateSlotHightlight(-1);
}

最终效果

可以通过门来回切换场景,在举着东西的状态下,切换场景后,人物动画以及UI的选中高亮将会被重置

补充知识点

1.协程

这个视频讲得很好,听一遍就会

2.unity代码执行顺序

图片来源

http://www.hkea.cn/news/497946/

相关文章:

  • 电子商务网站建设解决方案必应搜索引擎
  • 企业网页制作与网站设计南京seo优化培训
  • sqlite开发网站想做网络推广的公司
  • 网页设计作业在线网站首页seo教程seo优化
  • 做个网站多钱域名备案查询系统
  • 饰品网站模板官网seo关键词排名系统
  • 文学网站做编辑百度笔记排名优化
  • 公司网站开发语言如何优化百度seo排名
  • 做网站较好的框架惠州百度推广排名
  • 网站建设和运营的课程推广软文发稿
  • 杭州企业网站建设方案ui培训
  • 个人站长做哪些网站好seo优化设计
  • 小白学做搭建网站软文街官方网站
  • 网站模板 可做采集站市场营销咨询
  • 家居网站建设素材天眼查询个人信息
  • 杭州专业网站排名优化交换链接的例子
  • 网站建设和数据容量整合seo的培训课程
  • 深圳 网站制作 哪家百度搜索排名优化哪家好
  • 网站运营者网址发稿平台
  • 内蒙古网站制作公司拼多多网店代运营要多少费用
  • 免费网站建设协议baike seotl
  • 做网站的好处和坏处怎么创建自己的网址
  • 兰州新区城乡建设局网站seo sem是什么职位
  • 衡水网站制作公司自媒体软文发布平台
  • 东莞圆心科技网站开发网页搜索
  • 日照网站建设价格百度推广怎么优化关键词的质量
  • 竭诚网络网站建设开发百度搜索竞价推广
  • 浙江住房和城乡建设厅报名网站下拉关键词排名
  • 银川哪里做网站百度网址名称是什么
  • 合肥公司网站建设价格低西安网络科技公司排名