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

网站开发背景策划书久久租房网

网站开发背景策划书,久久租房网,世界十大市场调研公司,私人网络服务器资料 Unity - 祖玛游戏 GitHub 说明 用QF一个场景就够了#xff0c;在UIRoot下切换预制体达到面板切换。 但测试中当然要有一个直接跳到测试面板的 测试脚本#xff0c;保留测试Scene#xff08;不然初学者也不知道怎么恢复测试Scene#xff09;#xff0c;所以全文按S…资料 Unity - 祖玛游戏 GitHub 说明 用QF一个场景就够了在UIRoot下切换预制体达到面板切换。 但测试中当然要有一个直接跳到测试面板的 测试脚本保留测试Scene不然初学者也不知道怎么恢复测试Scene所以全文按Scene划分 ---------------------------------------------------- 01 Scene 开始进入(面板脚本主要是 动功能静UI引用分离) 01 先创建一个UIRootQF里面有的 02 做好UI给需要引用的UI加 Bind脚本默认设置看图 03 拖出来做预制体并且 CreateUICode会生成两个脚本(自动生成位置是上一级目录的Scripts/UI)一个管UI引用xxx.Designer一个管功能(xxx)管功能的会自动加到预制体上 xxxPanelData 、xxxPanel不叫Panel叫xxxWindowxxxUI随便 using UnityEngine; using UnityEngine.UI; using QFramework; using UnityEngine.SceneManagement;namespace QFramework.Example {public class StartGamePanelData : UIPanelData{}public partial class StartGamePanel : UIPanel{protected override void OnInit(IUIData uiData null){mData uiData as StartGamePanelData ?? new StartGamePanelData();// please add init code hereScreen.SetResolution(640, 1136, false);//宽高不可修改BtnStart.onClick.AddListener(() {Debug.Log(StartGamePanel);SceneManager.LoadScene(01 SelectLevel);});}protected override void OnOpen(IUIData uiData null){}protected override void OnShow(){}protected override void OnHide(){}protected override void OnClose(){}} } xxxPanel.Designer using System; using UnityEngine; using UnityEngine.UI; using QFramework;namespace QFramework.Example {// Generate Id:29cfe4a1-ad1e-4350-a490-3bdf8cf34278public partial class StartGamePanel{public const string Name StartGamePanel;[SerializeField]public UnityEngine.UI.Button BtnStart;private StartGamePanelData mPrivateData null;protected override void ClearUIComponents(){BtnStart null;mData null;}public StartGamePanelData Data{get{return mData;}}StartGamePanelData mData{get{return mPrivateData ?? (mPrivateData new StartGamePanelData());}set{mUIData value;mPrivateData value;}}} } 04 调用RrsKit.Init();必须调用 /****************************************************文件GameStart.cs作者lenovo邮箱: 日期2023/7/2 22:59:41功能 *****************************************************/using System.Collections; using System.Collections.Generic; using UnityEngine; using Random UnityEngine.Random;namespace QFramework.Example {public class GameStart : MonoBehaviour{#region 生命/// summary首次载入/summaryvoid Awake(){ResKit.Init();UIKit.OpenPanelStartGamePanel();GameObject.DontDestroyOnLoad(gameObject);}#endregion }} 06 写包名标记ResKit才有它在打包的列表中做AB包QF有个相关示例中不打包运行不了剪辑了实际没那么快 06 效果 --------------------------------------------------------------- 02 Scene 选择 世界选择 关卡选择 stars Plugins文件夹名 unity中Plugins文件夹下会被变成firstpass程序集 -------------------------------------------------------- 03 Scene 游戏界面 modify 拆分Enum 对初学者有好点。但实际Unity的内置脚本有枚举写在类内部的 GameUI拆成 Pass面板、Fail面板 Pass面板 using UnityEngine; using UnityEngine.UI; using QFramework; using UnityEngine.SceneManagement;namespace QFramework.Example {public class SuccPanelData : UIPanelData{}public partial class SuccPanel : UIPanel{protected override void OnInit(IUIData uiData null){mData uiData as SuccPanelData ?? new SuccPanelData();// please add init code hereBtnNext.onClick.AddListener(() { GameData.LevelIndex;SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); });}protected override void OnOpen(IUIData uiData null){}protected override void OnShow(){}protected override void OnHide(){}protected override void OnClose(){}} } Fail面板 using UnityEngine; using UnityEngine.UI; using QFramework; using UnityEngine.SceneManagement;namespace QFramework.Example {public class GameOverPanelData : UIPanelData{}public partial class GameOverPanel : UIPanel{protected override void OnInit(IUIData uiData null){mData uiData as GameOverPanelData ?? new GameOverPanelData();// please add init code hereBtnReset.onClick.AddListener((){GameManager.Instance.StartBack();CloseSelf();});BtnReplay.onClick.AddListener(() {SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);});BtnHome.onClick.AddListener(() {UIKit.OpenPanelStartGamePanel();CloseSelf();});}protected override void OnOpen(IUIData uiData null){}protected override void OnShow(){}protected override void OnHide(){}protected override void OnClose(){}} } watch QF中获取一个资源 new ResLoader()这种过时了 爆炸特效 球的预制体 //在扫雷案例中测试的用到WhiteChessResKit.Init();ResLoader loader ResLoader.Allocate();GameObject prefab loader.LoadSyncGameObject(WhiteChess);Instantiate(prefab , transform);处理GameManager成GamePanel 01 首先将子节点的所有脚本上提到父节点 GamePanel 02 将脚本中引用的节点 进行提取重命名和节点名字相同添加Bind脚本。到脚本最上面方便看 03 因为用到UISpriteRenderer该改成Image watch Awake的特点 脚本中只用Awake方法前面就不会有勾选选项 bug AB资源不存在 明明有重新打 bug 3D转UGUI SpriteRenderer转Image后想要用QF的调用面板的方式球移动很小。 方法 生成地图文件之前用同样用UIRoot也就是UGUI而不是原来的世界坐标。此时小心注意父节点的Scale、预制体小球Ball的RectTranfrom的Scale都调为1不然球与球之间的距离会有问题问题就是要么球之间的距离有问题要么轨道不重合 modify 转UGUI Image 3000是球沿着曲线移动的平滑度 0.3也相当于球的直径这个直径就是你要实例的那个球预制体的直径 方法 生成地图文件之前用同样用UIRoot也就是UGUI而不是原来的世界坐标。同时需要乘以倍率试230合适 using System.Collections; using System.Collections.Generic; using UnityEngine;public class MapConfig : ScriptableObject {public float EndPoint { get; private set; }public ListVector3 pathPointList new ListVector3();public void InitMapConfig(){EndPoint pathPointList.Count - 2;}public Vector3 GetPosition(float progress){Camera uiCamera.main.gameObject.FindComponentWithTagCamera(UI);int index Mathf.FloorToInt(progress);//return Vector3.Lerp(pathPointList[index], pathPointList[index 1], progress - index);Vector3 v1 Vector3.Lerp(pathPointList[index], pathPointList[index 1], progress - index);return v1*230f;}}效果 轨道球 ------------------------------------- modify 发射球的发射位置、速度和终点超界判定 发射球的位置 速度 超界的判定 就是把Canvas上的 球 拖到Canvas的边界看坐标 效果 ------------------------------------------- bug 销毁特效的大小和位置 using QFramework; using System.Collections; using System.Collections.Generic; using UnityEngine; using ResLoader QFramework.ResLoader;public class FXManager :MonoSingletonFXManager {Transform FXs;//GameObject destroyFXPrefab;ObjectPoolGameObject destroyFXPool;public void Init(Transform FXs){this.FXs FXs;//ResKit.Init();QFramework.ResLoader loader QFramework.ResLoader.Allocate();destroyFXPrefab loader.LoadSyncGameObject(DestroyFX); destroyFXPool new ObjectPoolGameObject(InstantiateFX, 10);}private GameObject InstantiateFX(){GameObject go Instantiate(destroyFXPrefab, FXs);go.Hide();return go;}public void ShowDestroyFX(Vector3 pos){GameObject go destroyFXPool.GetObject();go.Show();go.transform.localPosition pos;//延时0.5f执行回收操作ScheduleOnce.Start(this, () {go.Hide();destroyFXPool.AddObject(go);}, 0.5f);} } bug 发射器旋转一次就固定朝向左下方 后面又自动好了可能改掉了循环调用打开GamePanel导致存在多个GamePanel bug 自动刷新 点了几下没反应因为原来没加自动刷新 bug 三个mapConfig不能放Resources生成时空白 不放Resources又会 GameManager.Instance.mapConfig运行后为空。这是因为 public class GameSceneConfig : MonoSingleton中的mapconfigArr有的为空 bug 抬起发射时不灵敏 关掉这个 watch 消球后不回退 小球后回退需要 小球后还能存在继续消球的情况在 bug 复活后回退太狠 modify SoundManager 看了示例不需要类似于UIkit的ResKit.Init()的初始化 AudioKit.PlaySound(“resources://Sound/”clipName ); AudioKit.PlayMusic(“resources://Sound/”name,volume:volume); using System.Collections; using System.Collections.Generic; using UnityEngine; using QFramework;public class SoundManager : MonoSingletonSoundManager {static AudioSource bgAudio;public void Init(){bgAudio gameObject.GetOrAddComponentAudioSource();}private static void PlaySound(string clipName){// AudioSource.PlayClipAtPoint(GetAudioClip(clipName), Vector3.zero);AudioKit.PlaySound(resources://Sound/clipName );}public static AudioClip GetAudioClip(string clipName){return Resources.Load(Sound/ clipName, typeof(AudioClip)) as AudioClip;}public static void PlayDestroy() { PlaySound(Eliminate); }public static void PlayShoot() { PlaySound(Shoot); }public static void PlayInsert() { PlaySound(BallEnter); }public static void PlayBomb() { PlaySound(Bomb); }public static void PlayFail() { PlaySound(Fail); }public static void PlayFastMove(){ PlaySound(FastMove); }public static void PlayMusic(string name,float volume0.3f) { //bgAudio.clip SoundManager.GetAudioClip(name);//*-//bgAudio.volume volume;//bgAudio.loop true;//bgAudio.Play();AudioKit.PlayMusic(resources://Sound/name,volume:volume);}} bug shooterSO数据丢失 发生里面的Vector3丢失的情况所以用了以下。暂时不知道管不管用 EditorUtility.SetDirty(fromAsset);bug Object的AB包命名 原本我命名AB为 0_mapconfig打包出也有这个ABbao1 但是右面自动出现了 0_asset并且自动把 文件标记为 0)_asset导致后面打包出现 0_asset bug 通关下一关球没被销毁只是progress0 这是开始初始化的一段小球不动是因为此时的GmaeStateSucc。重新进入游戏需要重置 GameState modify Manager拆分 将Manager从GamePanel中拆分出来 -------------------------------------------------------- Panel两个面板说明 也是采用QF的UI脚本自动生成往里面填代码 。。。。 复活时回退得太多了3D转UGUI的原因需要调数值里面有个回退时间是3秒 。。。。 两个面板的效果在文章最后 Panel 成功 using UnityEngine; using UnityEngine.UI; using QFramework; using UnityEngine.SceneManagement; using QFramework.PointGame;namespace QFramework.Example {public class SuccPanelData : UIPanelData{}public partial class SuccPanel : UIPanel{protected override void OnInit(IUIData uiData null){mData uiData as SuccPanelData ?? new SuccPanelData();// please add init code hereBtnNext.onClick.AddListener(() {UIKit.OpenPanelGamePanel(new GamePanelData() { LevelCountGameData.GetLevelIndex() });CloseSelf();});BtnHome.onClick.AddListener(() {UIKit.OpenPanelStartGamePanel();CloseSelf();});}protected override void OnOpen(IUIData uiData null){}protected override void OnShow(){}protected override void OnHide(){}protected override void OnClose(){}} } Panel 失败 主要是复活不能Close所以失败后先Hide后面 01 复活就Show 02 再来一次就Close在Open 03 回主页 using UnityEngine; using UnityEngine.UI; using QFramework; using UnityEngine.SceneManagement;namespace QFramework.Example {public class GameOverPanelData : UIPanelData{}public partial class GameOverPanel : UIPanel{protected override void OnInit(IUIData uiData null){mData uiData as GameOverPanelData ?? new GameOverPanelData();// please add init code hereBtnReset.onClick.AddListener((){ //复活GameManager.Instance.GameRevive();CloseSelf();});BtnReplay.onClick.AddListener(() { //再来一次UIKit.ClosePanelGamePanel();UIKit.OpenPanelGamePanel( new GamePanelData() { LevelCountGameData.GetLevelIndex() });CloseSelf();});BtnHome.onClick.AddListener(() { //主页UIKit.ClosePanelGamePanel();UIKit.OpenPanelStartGamePanel();CloseSelf();});}protected override void OnOpen(IUIData uiData null){}protected override void OnShow(){}protected override void OnHide(){}protected override void OnClose(){}} } --------------------------------------------------------- Tool 轨道制作 modify BezierPathController 制作Ball预制体我用了红球可以用别的的spriteUGUI原本的是MeshRender3D世界中 节点“Map”是BezierPathController.Awake()中用到的是演示蓝色球坐标的可以注释掉 01 拖一个到“1”节点带有BezierPathController脚本下 01 不断CtrlD复制节点下的预制体每4个基本2个控制弯曲度2个在轨道上红球预制体就有生成一段蓝色球 02 Control Point List里面就是红球的坐标数据世界坐标 06 每4个红色球后Scene中会生成一段蓝色球 03 04 全部做完点击“生成地图文件”“Path Point List”里面就是蓝色球的位置世界坐标 05 Map文件夹下也保存了一份坐标数据 using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Linq; using UnityEditor; using System; using UnityEngine.UI;public class BezierPathController : MonoBehaviour {#region 字属public int segmentsPerCurve 3000;/// summary连线上求和球之间的举例也就是比直径大一点/summarypublic float BallAndBallDis 0.3f;public bool Debug true;public GameObject ballPrefab;/// summary贝塞尔曲线的节点。控制弯曲度的白球/summarypublic ListGameObject ControlPointList new ListGameObject();/// summary贝塞尔曲线的的线段。连线的蓝球的坐标/summarypublic ListVector3 pathPointList new ListVector3();#endregion//private void Awake()//{// Debug true;// foreach (var item in pathPointList)// {// GameObject ball Instantiate(ballPrefab, GameObject.Find(Map).transform);// ball.transform.position item;// }//}private void OnDrawGizmos(){//节点ControlPointList.Clear();foreach (Transform item in transform)//没错就是遍历子节点{ControlPointList.Add(item.gameObject);}//线段ListVector3 controlPointPos ControlPointList.Select(point point.transform.position).ToList();var points GetDrawingPoints(controlPointPos, segmentsPerCurve);Vector3 startPos points[0];pathPointList.Clear();pathPointList.Add(startPos);for (int i 1; i points.Count; i){if (Vector3.Distance(startPos, points[i]) BallAndBallDis){startPos points[i];pathPointList.Add(startPos);}}foreach (var item in ControlPointList){item.GetComponentImage().enabled Debug;//相当于将物体隐身并不会影响物体的脚本运行物体的碰撞体也依然存在。}if (Debug false){ return;} //01 画连线球的球Gizmos.color Color.blue;foreach (var pos in pathPointList){Gizmos.DrawSphere(pos, BallAndBallDis / 2);}//02 画连线球的线Gizmos.color Color.yellow;for (int i 0; i points.Count - 1; i){Gizmos.DrawLine(points[i], points[i 1]);}//03 画连线球的的弯曲度控制线//绘制贝塞尔曲线控制点连线红色Gizmos.color Color.red;for (int i 0; i controlPointPos.Count - 1; i){Gizmos.DrawLine(controlPointPos[i], controlPointPos[i 1]);}}#region 辅助/// summary贝塞尔线段/summaryListVector3 GetDrawingPoints(ListVector3 controlPoints, int segmentsPerCurve){ListVector3 points new ListVector3();for (int i 0; i controlPoints.Count - 3; i 3){var p0 controlPoints[i];var p1 controlPoints[i 1];var p2 controlPoints[i 2];var p3 controlPoints[i 3];for (int j 0; j segmentsPerCurve; j){var t j / (float)segmentsPerCurve;points.Add(CalculateBezierPoint(t, p0, p1, p2, p3));}}return points;}/// summary/// summary贝塞尔曲线的三次方公式/summary/// /summary/// param namet/param/// param namep0起点/param/// param namep1一侧的平滑度调节点/param/// param namep2另一侧的平滑度调节点/param/// param namep3终点/param/// returns/returnsVector3 CalculateBezierPoint(float t, Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3){var x 1 - t;var xx x * x;var xxx x * x * x;var tt t * t;var ttt t * t * t;return p0 * xxx 3 * p1 * t * xx 3 * p2 * tt * x p3 * ttt;}#if UNITY_EDITOR/// summary/// pathPointList写入Assets/Map/map.asset/// 但没有覆盖功能删掉再创建就看得见效果了/// /summary public void CreateMapAsset(){string assetPath String.Format( Assets/Map/{0}.asset,gameObject.name); //写这Vector3数据的MapConfig mapConfig new MapConfig();foreach (Vector3 item in pathPointList){mapConfig.pathPointList.Add(item);}AssetDatabase.CreateAsset(mapConfig, assetPath);AssetDatabase.SaveAssets();} #endif#endregion}#if UNITY_EDITOR [CustomEditor(typeof(BezierPathController))] public class BezierEditor : Editor {public override void OnInspectorGUI(){base.OnInspectorGUI();if (GUILayout.Button(生成地图文件))//详情面板下的按钮{(target as BezierPathController).CreateMapAsset();}AssetDatabase.Refresh();} } #endif modify 保存位置文件命名 保存位置放在Resources会报错 文件命名改为gameObject.name不写死 string assetPath String.Format( “Assets/Map/{0}.asset”, gameObject.name); //写这Vector3数据的 watch 遍历子节点 Transform 内部实现了迭代器所以就可以这样写 //节点ControlPointList.Clear();foreach (Transform item in transform)//没错就是遍历子节点{ControlPointList.Add(item.gameObject);}Tool 青蛙Shooter的位置 GameMapConfig来控制里面有个Vector3数组 modify 修改图片的名字-1方便对应 modify 制作Shooter位置的一个工具 /****************************************************文件MakeShooterPos.cs作者lenovo邮箱: 日期2023/7/19 15:37:17功能 *****************************************************/using System; using System.Collections; using System.Collections.Generic; using UnityEditor; using UnityEngine; using Random UnityEngine.Random;public class MakeShooterPos : MonoBehaviour { #if UNITY_EDITOR/// summary/// pathPointList写入Assets/Map/map.asset/// 但没有覆盖功能删掉再创建就看得见效果了/// /summary public void RecordeShooterPos(){MapConfig fromAsset AssetDatabase.LoadAssetAtPathMapConfig(Assets/Map/shooter.asset);int idx int.Parse( gameObject.name);Transform shooter GameObject.Find(ShooterTrans).transform;fromAsset.pathPointList[idx] shooter.localPosition;AssetDatabase.SaveAssets();AssetDatabase.Refresh();} #endif}#if UNITY_EDITOR [CustomEditor(typeof(MakeShooterPos))] public class MakeShooterPosEditor : Editor {public override void OnInspectorGUI(){base.OnInspectorGUI();if (GUILayout.Button(生成Shooter位置))//详情面板下的按钮{(target as MakeShooterPos).RecordeShooterPos();}AssetDatabase.Refresh();} } #endif 效果 --------------------------------------------------------- 总的效果 01 主要按 S(Success)键快速通关进行测试。 02 主要按F(Fail)键快速失败进行测试 地图数据只做了三关所以最后报空错误了
http://www.sadfv.cn/news/125967/

相关文章:

  • 企业手机网站cms系统个人静态网页制作
  • 无锡建设局网站一号通产品市场推广方案范文
  • 如何用自己电脑做网站服务器西安网站建设托管
  • 洛阳市宜阳建设局网站ppt中仿网站链接怎么做
  • 建设网站是主营成本吗文化传播 wordpress
  • 晋城哪里有做网站的亿寻跨境外贸人才网
  • 管理手机网站首页网站建设技术方案怎么写
  • 如何做自己网站平台珠海多语种网站制作
  • 无极修仙网站mysql数据库网站
  • 贺州市八步区乡镇建设局网站地方门户模板
  • 网站模板商城网站空间数据库需要多大
  • .ent做的网站有哪些装修设计图包括哪些图纸
  • 网站图片的作用南昌做网站优化价格
  • 周村区建设网站如何创建网站内容
  • 做兼职网站的项目方案网络推广网站建设软件定制
  • seo整站优化外包哪家好建一个多用户团购网站需要多少钱
  • 南昌市建设工程质量监督站网站企业网络搭建是什么
  • 网站推广软文几个绝招做电商的需要学哪些东西
  • 网上做网站网站吗论文格式样板模板
  • 东莞专业网站设计制作公司泉州网页制作设计
  • 集团网站建设要多少钱网站的维护和建设
  • 威海网站制作做酒业网站的要求
  • 专业沈阳网站制作拉新推广变现app
  • 陕西网站建设个人网页介绍
  • 网上如何建网站石家庄旅游景点
  • 互动网站开发网站建设竞标书
  • 什么网站招聘外国人做兼职深圳市住房与建设局实名制网站
  • 顺德建设幼儿院报名网站创建公司的基本流程
  • 网站做多语言中国平湖首页规划建设局网站
  • 竹子建站是什么池州市网站建设优化