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

建设一个充电站需要多少钱注册电子邮箱号

建设一个充电站需要多少钱,注册电子邮箱号,专业网络推广软件,做宠物商品的网站文章目录 最终效果前言一、绘制不同的场景二、切换场景加载进度1. 简单实现2. 优化 三、角色移动和跳跃控制四、添加虚拟摄像机五、触发器动态加载场景六、最终效果参考源码完结 最终效果 前言 观看本文后#xff0c;我的希望你对unity场景管理有更好的理解#xff0c;并且能… 文章目录 最终效果前言一、绘制不同的场景二、切换场景加载进度1. 简单实现2. 优化 三、角色移动和跳跃控制四、添加虚拟摄像机五、触发器动态加载场景六、最终效果参考源码完结 最终效果 前言 观看本文后我的希望你对unity场景管理有更好的理解并且能够制作具有巨大世界的游戏并无缝加载游戏的各个部分在后台运行而不中断游戏玩法这种方法非常灵活而且很容易实现因此无论您是制作小型平台游戏还是大型开放世界游戏它应该都适用于两者准备好让我们开始吧 一、绘制不同的场景 创建不同场景 开始菜单界面场景Menu 主场景 Main就简单放置个主角人物 房间1场景Room1简单放置个平台记得去除摄像机 二、切换场景加载进度 1. 简单实现 新增MainMenuManager 代码实现加载进度场景切换和加载 public class MainMenuManager : MonoBehaviour {[SerializeField, Header(加载进度条的父对象)] private GameObject _loadingBarObject;[SerializeField, Header(加载进度条的图像)] private Image _loadingBar;[SerializeField, Header(需要隐藏的对象)] private GameObject[] _objectsToHide;[Space][SerializeField, Header(主要持久化场景的名称)] private string _persistentGameplay Main;[SerializeField, Header(游戏关卡场景的名称)] private string _levelScene Room1;private ListAsyncOperation _scenesToLoad new ListAsyncOperation(); // 存储待加载场景的列表private void Awake(){_loadingBarObject.SetActive(false); // 禁用加载进度条}//开始游戏public void StartGame(){HideMenu(); _loadingBarObject.SetActive(true); // 启用加载进度条// 加载持久化场景和游戏关卡场景并将它们添加到待加载场景列表中_scenesToLoad.Add(SceneManager.LoadSceneAsync(_persistentGameplay));_scenesToLoad.Add(SceneManager.LoadSceneAsync(_levelScene, LoadSceneMode.Additive));StartCoroutine(ProgressLoadingBar()); // 启动异步加载进度条的协程}// 隐藏界面private void HideMenu(){for (int i 0; i _objectsToHide.Length; i){_objectsToHide[i].SetActive(false); // 隐藏需要隐藏的对象}}//异步加载进度条的协程private IEnumerator ProgressLoadingBar(){float loadProgress 0f; // 总的加载进度for (int i 0; i _scenesToLoad.Count; i){while (!_scenesToLoad[i].isDone){loadProgress _scenesToLoad[i].progress; // 累加加载进度_loadingBar.fillAmount loadProgress / _scenesToLoad.Count; // 更新加载进度条的显示yield return null; // 等待下一帧} }} }挂载脚本配置参数 配置开始游戏点击事件 被忘记在项目设置加入新的场景 效果 2. 优化 正常我们都是按场景名称或者索引去跟踪我们的场景吗这里其实有一个更好的方法之后在所有的项目中我们都可以去使用它 灵感来源于一篇Unity论坛的SceneField代码 https://discussions.unity.com/t/inspector-field-for-scene-asset/40763 解释这是代码通过使用SceneField类和SceneFieldPropertyDrawer属性绘制器开发者可以在自定义的脚本中方便地引用和管理场景对象并在Inspector面板中进行编辑和选择操作。这对于需要频繁切换场景或者处理多个场景的情况非常有用。 我已经复制代码下来并加入了一些注释如下 using UnityEngine;#if UNITY_EDITOR using UnityEditor; #endif[System.Serializable] public class SceneField {[SerializeField]private Object m_SceneAsset;[SerializeField]private string m_SceneName ;public string SceneName{get { return m_SceneName; }}// 使其与现有的Unity方法LoadLevel / LoadScene兼容public static implicit operator string(SceneField sceneField){return sceneField.SceneName;} }#if UNITY_EDITOR [CustomPropertyDrawer(typeof(SceneField))] public class SceneFieldPropertyDrawer : PropertyDrawer {public override void OnGUI(Rect _position, SerializedProperty _property, GUIContent _label){EditorGUI.BeginProperty(_position, GUIContent.none, _property);SerializedProperty sceneAsset _property.FindPropertyRelative(m_SceneAsset);SerializedProperty sceneName _property.FindPropertyRelative(m_SceneName);_position EditorGUI.PrefixLabel(_position, GUIUtility.GetControlID(FocusType.Passive), _label);if (sceneAsset ! null){// 显示场景选择器让用户选择一个场景sceneAsset.objectReferenceValue EditorGUI.ObjectField(_position, sceneAsset.objectReferenceValue, typeof(SceneAsset), false);// 如果已经选择了场景则将场景名称保存在场景名称变量中if (sceneAsset.objectReferenceValue ! null){sceneName.stringValue (sceneAsset.objectReferenceValue as SceneAsset).name;}}EditorGUI.EndProperty();} } #endif修改MainMenuManager [SerializeField, Header(主要持久化场景)] private SceneField _persistentGameplay; [SerializeField, Header(游戏关卡场景)] private SceneField _levelScene;配置场景可以通过拖入绑定了 效果还是和前面一样没什么问题 三、角色移动和跳跃控制 简单实现一下角色的控制 public class PlayerController : MonoBehaviour {private Rigidbody2D rb; // 刚体组件public float speed, jumpForce; // 移动速度和跳跃力度public Transform groundCheck; // 地面检测点public LayerMask ground; // 地面图层public bool isGround; // 是否在地面上bool jumpPressed; // 是否按下跳跃键//检测范围public float checkRadius;void Start(){rb GetComponentRigidbody2D(); // 获取刚体组件}void Update(){if (Input.GetButtonDown(Jump)){jumpPressed true;}}private void FixedUpdate(){isGround Physics2D.OverlapCircle(groundCheck.position, checkRadius, ground); // 检测是否在地面上GroundMovement(); // 地面移动Jump(); // 跳跃}//画出的射线可以看见private void OnDrawGizmosSelected(){if (groundCheck ! null){Gizmos.color Color.red;Gizmos.DrawWireSphere(groundCheck.position, checkRadius);}}void GroundMovement(){float horizontal Input.GetAxisRaw(Horizontal); // 获取水平方向输入rb.velocity new Vector2(horizontal * speed, rb.velocity.y); // 设置刚体速度if (horizontal ! 0){transform.localScale new Vector3(horizontal, 1, 1); // 翻转角色}}void Jump(){if (jumpPressed isGround){rb.velocity new Vector2(rb.velocity.x, jumpForce); // 设置刚体速度jumpPressed true;}} }挂载脚本记得配置地面图层为Ground 效果 四、添加虚拟摄像机 效果 五、触发器动态加载场景 新增其他房间场景 新增SceneLoadTrigger 定义触发器检测异步加载和卸载不同场景 public class SceneLoadTrigger : MonoBehaviour {[SerializeField, Header(需要加载的场景数组)] private SceneField[] _scenesToLoad;[SerializeField, Header(需要卸载的场景数组)] private SceneField[] _scenesToUnload;private GameObject _player; // 玩家对象private void Awake(){_player GameObject.FindGameObjectWithTag(Player); // 查找并赋值玩家对象}private void OnTriggerEnter2D(Collider2D collision){if (collision.gameObject _player) // 碰撞体为玩家时{LoadScenes(); UnloadScenes(); }}// 加载场景private void LoadScenes(){for (int i 0; i _scenesToLoad.Length; i){bool isSceneLoaded false;for (int j 0; j SceneManager.sceneCount; j){Scene loadedScene SceneManager.GetSceneAt(j);if (loadedScene.name _scenesToLoad[i].SceneName){isSceneLoaded true;break;}}if (!isSceneLoaded){SceneManager.LoadSceneAsync(_scenesToLoad[i].SceneName, LoadSceneMode.Additive); // 异步加载需要加载的场景}}}// 卸载场景private void UnloadScenes(){for (int i 0; i _scenesToUnload.Length; i){for (int j 0; j SceneManager.sceneCount; j){Scene loadedScene SceneManager.GetSceneAt(j);if (loadedScene.name _scenesToUnload[i].SceneName){SceneManager.UnloadSceneAsync(_scenesToUnload[i].SceneName); // 异步卸载需要卸载的场景}}}} }挂载脚本配置参数记得配置角色标签为Player地面我设置了不同颜色好做区分 运行效果 六、最终效果 可以看到只要配置得当就可以做到场景地图无缝加载即使是很大的地图我们也可以把他分割成几个小场景不影响游戏运行性能 参考 【视频】https://www.youtube.com/watch?v6-0zD9Xyu5c 源码 源码整理好了我会放上来催更加急 完结 赠人玫瑰手有余香如果文章内容对你有所帮助请不要吝啬你的点赞评论和关注以便我第一时间收到反馈你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法也欢迎评论私信告诉我哦 好了我是向宇https://xiangyu.blog.csdn.net 一位在小公司默默奋斗的开发者出于兴趣爱好于是最近才开始自习unity。如果你遇到任何问题也欢迎你评论私信找我 虽然有些问题我可能也不一定会但是我会查阅各方资料争取给出最好的建议希望可以帮助更多想学编程的人共勉~
http://www.sadfv.cn/news/212418/

相关文章:

  • 哪个网站做农产品杭州p2p网站开发商
  • 网站建设的目标上海网站建设软件下载
  • 创建个人主页网站wordpress国内工作室主题
  • 外部网站 同意加载服务网站开发
  • 怎么建立一个网站让百度搜到美食网站首页怎么做
  • 建分类网站得花多少钱多多电影免费播放
  • vs网站开发实例怎么搭建网页服务器
  • 衡阳建设学校网站微淘客网站建设
  • 图书馆建设网站佳源房地产最新消息
  • 网站开发的目的相关书籍信息行业网站建设
  • logo图标素材网站国内重大新闻事件
  • 网站特效代码上那找好网站怎么做登录模块
  • 共享网站的建设与规划wordpress 个人资料按钮
  • 网站开发慕枫网站建设的一般步骤
  • 通信建设资质管理信息系统网站网站备案 有什么用
  • 什么是做学院网站什么是网络营销方案
  • 凡科网站建设是免费的吗威海优化推广
  • 网站未续费到期后打开会怎样个人网站可以直接做微信登陆吗
  • 自己可以学着做网站吗app推广注册从哪里接单
  • 黄州区精神文明建设网站wordpress更改文章宽度
  • wordpress网站后台要怎么登陆wordpress接入翼支付
  • 网站的信息架构学电商比较好的网站有哪些
  • 招聘网站建设策划书海南百度推广中心
  • 成都高校网站建设服务公司网络推广提成方案
  • 达人室内设计网站在深圳找工作哪个网站好
  • 网站工程师招聘长沙网标集团
  • c 教程如何做网站网络推广怎么做效果好
  • 建大型网站费用网建企业
  • 网站建设合同 模板 下载宁波网站排名优化报价
  • 网站 刷流量 SEOwordpress博客页修改