游戏场景_游戏场景建模 - CSDN
精华内容
参与话题
  • 游戏引擎-场景编辑器

    千人学习 2018-10-22 21:38:08
    4.实现场景管理,采用节点方式实现高效的场景管理. 5.实现复杂的摄像机操作,可以旋转,缩放以及通过鼠标移动整个场景. 6.实现Ray方式拾取场景中的节点,模型. 7.实现模型的配置以及显示. 8.实现包围盒的计算和显示.
  • 游戏场景资源

    2020-07-22 23:30:44
    unity游戏场景资源;unity游戏场景资源;unity游戏场景资源;
  • 游戏场景

    2019-09-29 10:56:04
    场景的设计 只是简单的概括的流程; 场景管理器 { map<t_RoleID, GamePlayer*> m_SwtichMapPlayers;//场景里面的玩家 CScene scenes[MAX_SCENE_ID]; //场景容器 } 场景 { 用容器管理格子是否可行, ...

     

    场景的设计

    只是简单的概括的流程;

    场景管理器
    {
     map<t_RoleID, GamePlayer*> m_SwtichMapPlayers;//场景里面的玩家
     CScene scenes[MAX_SCENE_ID];      //场景容器
    }
    场景
    {
     用容器管理格子是否可行,
     用容器是否安全区
     预先生成每个格子的附近格子
    }
    格子
    {
     bool m_bNeedSync;    //格子是否需要同步
     CSceneCell* nearCell[9];  //包括自己附近的格子九宫格
     Tint32 CellId;
     Tint32 m_X;
     Tint32 m_Y;
     set<GamePlayer*> m_PlayerSet; //附近玩家列表
    }

    SceneMgr
    [
     Scene[]
     [
      SceneCell
      {
      }
     ]
    ]

    位置同步
    fuction(同步)
    {
     if(格子不需要同步)
     {
      return
     }
     ChangeDataList(改变列表)
     for(格子上面的所有玩家)
     {
      if(现在的坐标和上一次一次的坐标不一样)
      {
       if(间隔大于同步间隔||在战斗中)
       {
        ChangeDataList.add(改变的玩家)
       }   
      }
     }
     msg(被发送的数据)
     sendMsg(发送函数)
     for(附近的玩家)
     {
      for(ChangeDataList)
      {
       msg.add(改变的玩家)
       if(100 <= msg.size())
       {
        sendMsg(msg)
        msg.Reset(清空发送包)
       }
      }
      if(0 < msg.size())
      {
       发送剩余不足100的(sendMsg)
      }
     }
    }

    转载于:https://www.cnblogs.com/byfei/p/6389801.html

    展开全文
  • 视频链接:游戏开发入门(八)游戏中的场景管理(5节课 时常:约2小时07分钟) 授课者通过2D围棋的例子,逐步拓展成3D的虚拟游戏世界。...什么是游戏场景? 游戏中所有具有空间属性的物体都是场景物体。 所有...

    视频链接:游戏开发入门(八)游戏中的场景管理(5节课 时常:约2小时07分钟)

    授课者通过2D围棋的例子,逐步拓展成3D的虚拟游戏世界。这个3D游戏世界基本上就可以涵盖市面上所有类型的游戏了,我们通过各种手段去管理好这个游戏世界,就能快速的进行各种游戏逻辑的开发。


    笔记与总结(请先学习视频内容):

    1.什么是场景物体?什么是游戏场景?
    游戏中所有具有空间属性的物体都是场景物体。
    所有场景物体构成的集合成为游戏场景。

    2.一般情况下哪些内容属于场景物体,哪些不属于场景物体?
    场景物体:玩家,NPC,场景建筑,地形,粒子特效,场景中的道具(武器等),还有一些看不到的对象如volume、摄像机等
    非场景物体: UI,UI上的道具,玩家(NPC)技能,玩家(NPC)状态,碰撞盒,物体的材质
    个人觉得,非场景物体并没有什么严格意义的概念,刨除所有场景物体,其他的都是非场景物体。或者严格来说,他们并不是我们通常认识下的物体,只是单纯的游戏逻辑对象。比如说玩家的状态,他在场景中并没有实体,不过我们完全可以给状态创建一个类对象来表示某个角色的状态。

    3.场景管理的意义

    • a.便于玩家快速的定位场景里面的对象
    • b.妥善处理巨大场景带来的内存开销问题
    • c.处理巨大场景带来的渲染效率问题
    • d.处理大量对象的碰撞检测的效率问题

    4.2D游戏需要场景管理么?
    我们接触的大部分游戏都有一个虚拟的游戏世界,玩家通过操作来改变这个世界。这个世界复杂一点,可以像各种大型MMO游戏一样(3D),这个世界简单一点,可能像视频中的围棋一样(2D,或者如超级玛丽的那种)。所以无论是哪种游戏,总是有那么一个场景空间(或者说一个游戏世界)去存放游戏对象,这个空间就需要我们去统一的管理。这样,我们才能在游戏进行时方便快速的找到我们需要的对象,再去做进一步的处理。如果2D空间内对象数量庞大的话,也可以采用一定策略进行优化。
    所以,2D游戏也一样需要场景管理。

    5.2D场景管理与3D场景管理的差别?
    面临的问题不同:2D场景相比3D场景,一般来说无论是渲染开销还是内存开销都要小的多。

    6.关于非物理碰撞检测的问题与优化方案
    问题:对于一个非基于物理引擎的碰撞检测,我们一般需要遍历场景中所有对象的位置并判断二者间距离(假设对象都是球型的),才能检测二者是否发生碰撞。一旦对象数量多起来,CPU根本无法承受。
    优化:实际上,我们知道距离很远的两个对象一定时间内是不会发生碰撞的。为了减小碰撞检测的开销,我们可以将场景划分成N*N块,然后将所有的对象规分到不同的块里面,不同块(且不相邻)之间的对象不会发生碰撞,这样就减小了碰撞检测的开销。
    注:其实一般的物理引擎的逻辑开销比我们没有优化的也还要复杂的多,因为他可能会有更多更详细的检测逻辑,不过像physX引擎在检测时还会借助GPU来提高效率。

    7.四叉树与八叉树
    二维空间的管理与对象检测可以使用四叉树进行处理。
    三维空间的管理与对象检测可以使用八叉树进行处理。
    不过八叉树的相对开销相比四叉树要高不少。
    这两个概念其实并没有那么高深,和我们平常学习的数据结构没什么差别,只不过他的每个节点下面有四/八个子树。这样的处理完全是因为这两种结构符合我们逻辑检测的思路。

    8.关于碰撞检测的优化思路
    其实这与我们处理搜索,排序的思路是类似的,N^2肯定不是最优解,起码我们会想到类似二叉树,二叉堆的的数据结构。如果再去结合我们游戏中空间分布的实际情况,也就不难想到四叉树这样的处理办法。当然,理论上还应该有其他的优化思路,效率如何博主暂时没有深入去研究过。

    9.关于视野渲染的优化
    与现实世界相似,我们无法看到无线远的东西,或者是无限远的东西几乎是看不清的。所以,游戏世界里面的玩家也类似,每个玩家的视野限制在一个视锥里面。这对于游戏的优化是非常重要的

    • a.渲染上,因为不在视野内的东西,我们完全就可以不去渲染,即渲染剔除
    • b.游戏逻辑上,因为玩家的视野有限,过于远的场景数据可以完全不去加载,即场景动态加载
    • c.在视野范围但是又很远的东西,我们可以给他换一个精度比较低的模型,即LOD

    10.入口管理
    对于一些房间内(场景比较小)的游戏,玩家的视野只局限在一个房间里面。这时候其实房间外的任何东西都不需要加载与处理(假如与当前游戏逻辑无关)
    这样,我们就可以在玩家切换房间(如开门)的时候再去加载其他房间场景,这对于游戏的优化是很有帮助的。

    11.游戏天空的实现
    天空盒:用一个完整的封闭的空间来包围整个游戏场景,在这个空间表面贴上天空效果的贴图。一般来说非常大,要比实际游戏场大,接近玩家视野的极限。
    天空盒组成:

    • 大气颜色层
    • 云层
    • 天体层
    • 远景片

    12.LOD
    前面提到过,视野远处的东西玩家是看不到细节的,所以也就不需要给其渲染那么复杂的模型(贴图等)。LOD就是基于这个原理根据与相机位置的距离动态切换资源(高精度资源与低精度资源),是游戏中常用的渲染优化方式

    13.地形的处理
    游戏场景中的地形可以说仅次于天空盒大小的存在了,与天空盒不同,玩家与地形的距离非常近,所以一般来说地形的表现细节应该足够丰富才行。但是问题是如果给所有的地形都赋予足够的精度,就需要占用大量的内存,这是不现实的,所以地形也要有LOD处理,远处的地形不需要太精细的效果。另外,在游戏中的大地形是不存在球形的。其实地形只是一个面片,玩家只在面片的上面进行移动。
    地形制作:一般由美术在客户端进行刷,构建完毕后会以高度图的形式存储在地图数据信息里面。
    高度图:其实就是一个二维表,记录每个坐标的高度值(Z值)
    地形LOD的处理方法: 按照距离大小,视觉贡献度(斜面的贡献度比平面高)来分配不同精度的LOD模型

    14.地表纹理处理
    由于地形面积过大,正常情况下需要提供大量的贴图来表现不同位置的不同效果。为了节省贴图资源所占用的内存空间,同时还想表示出丰富的地貌效果,就需要用到多层纹理混合技术。只需要几个贴图,按照不同权重的混合就能达到多种不同的效果。

    15.水
    前面渲染的课简单说到了水的渲染一般是通过UV动画(法线贴图)来实现的,但是更逼真的水还需要考虑到反射与折射,甚至是与玩家
    的互动。这就需要进一步添加反射贴图等更深层次的处理。

    16.植被
    实现方式1:记录每株草的位置、贴图、材质等信息,运行时生成草的模型,将使用同样贴图的草合并为若干组。
    实现方式2:记录植被区域,记录区域内植被贴图、材质等信息,设定区域植被的密度、变异因子等信息,运行是生成若干组随机植被。


    上一篇:游戏开发入门(七)特效系统
    下一篇:游戏开发入门(九)游戏同步技术

    原文链接(转载请标明):http://blog.csdn.net/u012999985/article/details/79265254

    展开全文
  • 游戏场景测试

    2020-10-06 16:18:01
    游戏场景测试 游戏场景在百度百科中的定义是游戏中的环境、建筑、机械、道具等。游戏场景通常可以理解为根据策划的要求还原出游戏中的建筑物、树木、天空、道路等可用元素(包含武器道具等)。游戏场景的测试不仅仅...

    游戏场景测试

    游戏场景在百度百科中的定义是游戏中的环境、建筑、机械、道具等。游戏场景通常可以理解为根据策划的要求还原出游戏中的建筑物、树木、天空、道路等可用元素(包含武器道具等)。游戏场景的测试不仅仅要测试上述部分,还包括了程序、用户体验等其他方面的问题。

    在拿到了正式美术资源之后,首先关心的就是场景的寻路和碰撞问题。寻路是游戏中人可以行走的区域,碰撞是场景中得物体所占的空间。对于这2个问题,不同的游戏有着不同的处理方式。 有的是服务端有一份数据,客户端生成一份数据,然后2份数据进行对比就可以很方便的找出不一样的地方。但是我们的游戏不是这样做的,美术在做好场景后,生成2份文件放在服务端,一份寻路文件,一份碰撞文件,然后客户端部分没有放这2份文件,而是引擎在加载模型的时候,根据模型的属性自动生成了寻路与碰撞。所以对于我们的测试来说就要测试服务端的正确性,测试服务端与客户端的一致性,测试客户端的表现。

    测试服务端的正确性:首先查看的是美术输出的文件是不是会跟发布的美术资源对应。有时候可能美术在导出的时候可能忘了提交,然后就会出现对应不上的情况。在出现了对应不上的情况下,就会出现客户端表现上是可以穿越的,而实际上是不可以的或者相反的情况。

    这里先讲一下寻路属性和碰撞属性的关系。只有模型的寻路属性勾选的情况下,该模型才参与寻路。这里的参与寻路指的不一定是形成寻路,也可能是形成阻挡而影响寻路。碰撞则对模型形成阻挡作用。寻路属性是碰撞属性的基础,只有在勾选了寻路属性的基础上碰撞属性才有效。没有勾选寻路的情况下(不管有没有勾选碰撞),人物都是无法通过的,等同于是有阻挡的;在勾选寻路的情况下,模型没有勾选碰撞,那模型就是可以穿越的。只有勾选了碰撞之后,模型才会起到阻挡的作用。

    在提交正确的情况下打开场景编辑器,加载相应的文件,在场景编辑器中打开寻路界面,检查寻路是否有不合理的地方(比如寻路面包括了一颗大树,这就是不正常的)。这时候可以试着自己查找下问题的原因。像寻路面包括了一颗大树的情况,是大树没有勾选碰撞属性,将大树勾选碰撞属性后,更新下,就可以看到正确的寻路界面了。这样可以快速发现一些明显的没有勾选碰撞而产生寻路异常的问题。然后再打开碰撞界面,观察碰撞体跟寻路面有没有重合的部分,有重合的部分就是错误的。因为人是有体积的,在寻路面跟碰撞体重合的地方,会出现人的半截身子嵌在场景物体里面的诡异情况,这种情况是不允许的。用这种方法会查找到一些比较隐蔽的问题(比如一个小石头的碰撞体做的很大,美术本来就不想让玩家经过,那这种检查就能找出来)。

    测试客户端与服务端的一致性:本来编辑器就是引擎提供的,一般来说美术通过场景编辑器编辑好场景,编辑器输出的寻路文件和引擎在客户端自动生成的寻路信息是一致的。所以,在服务端的寻路文件的正确性已经得到保证的情况下,如果客户端的寻路出现问题,就说明引擎的加载存在问题也就是说客户端与服务端的寻路信息产生了不一致,一般这种问题在验证客户端表现的时候就可以发现。

    测试客户端的表现:首先确保服务端的寻路信息已经正确,然后在客户端中打开寻路功能,在场景中按照寻路信息区大致跑一遍,如果人物走到了场景中的不该走到的地方或者寻路的信息区有中断的情况,则说明引擎加载客户端的寻路信息出现了问题。

    在测试完客户端的寻路之后,就可以关闭寻路,真正的去游戏中体验游戏场景了,这时进行的就是合理性测试了。合理性测试可以分为下面几种:

    美术方面:在跑地图的过程中,你就会发现美术存在的一些问题。比如路面或屋顶上存在着阴影闪烁;物体上出现了深色的色块;美术的碰撞做的太大,例如树的碰撞模型为一个很大的长方体,导致很远的地方就不能朝树的方向走去;模型的阴影闪烁;阴影缺失;模型的材质,贴图;灯光;最高效果与最低效果下引擎的渲染、不同分辨率下场景的表现;
    技能特效:技能特效与美术资源的冲突。比如地表贴花,就是有斜面等情况下贴着地面的特效会有一部分嵌进地下,或者映射出地面的边块(就是在地面上显示了地块方正的边角);特效残留;技能特效与墙面等碰撞的冲突导致技能未到达墙面而特效开始播放;桥,阶梯等特殊地方的鼠标点击效果(鼠标点选地上有特殊效果,特殊地方可能会没有);
    程序方面:地图坐标和雷达或者区域地图坐标显示一致;地图衔接点(传送点)的功能正确;地图上标记点的同步刷新(比如地图上显示任务的坐标点);地图上其他附加功能的实现(比如点击地图自动寻路);场景地图加载的时间;场景太大采用的动态加载会不会人走太快而却出现寻路信息没加载出来;加载过的场景资源的释放;未探索区域与已探索区域的区别;场景切换;
    游戏设定不合理:场景出现了不该出现的东西比如马路上出现蘑菇,热带雨林的场景中树木很少,有大片的草地;冰原上出现了一些非耐寒的动植物;
    用户体验方面:场景是否可调可视范围和摄像机角度;有方向引导性的路要设计的宽一点,不能设计成一条小径;锁定视角的情况下,树木等不要挡住道路;人物不要长时间被场景遮挡住;在摄像机角度和远近可以调整的情况下,人物将视角调到远景时,远处要有相应的景色,而不是什么都没有的黑色;
    场景测试是一个有很大的工作量的工作,有很多琐碎细小的工作要做,需要耐心与毅力,需要全面,不遗漏。在测试的过程中,我们也可以向美术学习专业的美术知识,不断的充实与提高自己,然后就可以更快地找出问题,更快地解决问题。

    转载至:https://blog.csdn.net/x_xingduo_2315/article/details/106814709
    
    展开全文
  • 游戏场景游戏GUI设计

    2019-11-21 01:33:19
    1)笔记 1)场景主页GUI 2)3D场景异步加载进去 3)摇杆的制作,3D物体导入后,将由摇杆去控制 4)进入场景之前,要做一个界面,资源的异步... 就看到了主游戏3D场景和UGUI这些东西了 5)gui--> UI10 skillicon g...

    1)笔记

    1)场景主页GUI
    
    2)3D场景异步加载进去
    
    3)摇杆的制作,3D物体导入后,将由摇杆去控制
    
    4)进入场景之前,要做一个界面,资源的异步加载,因为复杂的3d场景可能要加载
      一段时间,所以要做一个加载的进度条在这里,加载完成后,把界面销毁掉,自然
      就看到了主游戏3D场景和UGUI这些东西了
    
    5)gui-->
        UI10
        skillicon
        game_scene
    
    6)先创建UI-->Canvas;
      1024*768、固定高度
    
    7)屏幕适配:
      (1)修改背景的宽高,容纳最大的分辨率宽高
      (2)Canvas
              -->game_ui(全屏)
                   -->user_info(左上)
                   -->game_info(中心靠上)
                   -->joystick(左下)
                   -->...
    
    8)进度条
      bg
      process: 设置成和福气你是一样大的
    
    9)遥杆
      EventTriger
      (1)Drag
    
    10)在Drag里面获得鼠标触摸的位置
       可是呢,我们的UGUI它的这个stick的位置是相对于UGUI的相对位置来的,
         所以我们要把触摸的位置转成我们鼠标的这个位置;
    
       函数功能: 把我们的鼠标位置转成在我们的UGUI的下面的这个相对坐标;
    
       把屏幕坐标转为我们的
    
       二维向量转化为三维向量,z是0
    
    11)back   
    
    y
    | /z
    |/
    --->X
    
    12)限定后坐标的计算: 相似三角形
    
    13)将方向传递给外面, touch_dir
    
    14)归一化: 
      你这个方向千奇百怪,
      我们把他们统一到一个单位圆上面来
    
      好处:不论你外围的图换成什么样子,我们这个数值都是一定的,
        把所有的方向转成单位一的圆心上面来了,
    
      同时还有一个好处: 我们的方向上的坐标x,y,如果你转到单位一上面来了,
        那么cos阿尔法 = x/1 = x 
            sin阿尔法 = y/1 = y,
        同时到圆点的距离是1,这样我们使用x,y就很方便使用了cos和sin,因为我们
          方向经常要分解,cos和sin很常用,所以我们不用过多的算这个角度,直接
          拿过来就有了, 而且不管你是哪个位置的方向,我们都转到单位1位圆的这个
          坐标下,那么这个坐标给出来的就是一个可预期的值,因为你像这个pos,它就是
          不可预期的,有可能半径是1,也有可能是20,30,80,所以我们统一放到半径为1
          的这个圆上, max_R = 1带入公式(或者相似三角形)
    
       (cos, sin)
    
    15)我们公布一个接口,只要get方法获得dir即可;只能获取,不能修改
    
    16)首选in我们是loading加载这个资源;
       加载成功以后,我们就把这个3d场景放进来;
       加载结束以后,我们把这个loading删掉;
       我们就看到了我们的操作界面和我们复杂的3D场景;
       到时候我们的主人公就会出现在这个里面,用摇杆来控制我们的主人公;

     

    展开全文
  • 1.画家算法 早期的gpu是没有z-buffer的,为了得到正确的图像,必须使用画家算法,也就是从后往前绘制几何体。几何体每帧都需要根据摄像机的位置进行排序,进而实现从后往前的绘制。画家算法不仅低效,还有一些无法...
  • Unity3D,场景转换和退出游戏

    万次阅读 2018-08-23 16:49:43
    Scnen切换:  1.添加:using UnityEngine.SceneManagement;  2.调用:SceneManager.LoadScene...  value 可以是场景名字,加“”,也可以是数字(Build&amp;Setting里排序)。第二个参数可省略。  ...
  • 前一篇文章介绍了游戏开始场景的制作,可还没有任何交互,按理说,我的设计是点击界面然后直接到游戏场景,但看到了雨松的这篇文章--Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条后,决定尝试下用...
  • Unity3D-场景切换&场景间信息传递

    千次阅读 2014-09-11 11:38:42
    我在用Unity3D做一个回合制的战斗游戏,有两个场景(小镇的场景和战斗的场景),每当角色遇到怪兽,游戏就切换到战斗场景,角色就在这里战斗,直到打败怪兽或者被击败。 问题是怎样才能在回到townScene时保持进入...
  • 1.改变游戏对象的初始值。在脚本之中使用Getcomponet()函数获得物体的 Transform或者Rigidbody,之后调用随机函数Random.range()来对游戏对象的初始数值进行一个随机化。并在检测到鼠标左键点击之后重置场景,之后...
  • unity 3D游戏场景转换

    万次阅读 2015-07-07 14:50:08
    //////////////////2015/07/07//////// /////////////////by xbw/////////////// ///////////////环境 unity 4.6.1// 当需要多个场景时,就用到了场景转换, ...要想运行完开长镜头后接着运行游戏场景,需要
  • Unity3d中提供了场景Scene的概念,Scene就是一组相关联的游戏对象的一个集合,通常每个集合就是一个场景,但是也有可能只是一个场景的一部分! 场景中的游戏对象是任意的,可以是HUD的UI组件,场景地图,模型等等 ...
  • unity3d实现Loading进度条异步加载场景

    千次阅读 2015-09-22 23:28:59
    一款大型游戏,开始游戏加载场景的时候一般都带有进度条加载模式,这将与进度条加载速度同步来加载场景。如果没有了进度条,我们开始游戏或者进入下一个场景的时候,因为电脑要加载大场景需要一定的时间,我们就会卡...
  • 在同步加载游戏场景的时候通常会使用方法 Application.LoadLevel(“yourScene”); 这句代码执行完毕后程序会干什么呢??如下图所示,这是我随便找了一个游戏场景, 在Hierarchy视图中我们可以看到该场景中“天生...
  • 编辑器里,游戏结束后重新进入游戏场景后场景灯光变暗Application.LoadLevel(Application.loadedLevel); 原因如下: 选择的光照是GI realtime实时光照,编辑器在当前场景时,它的灯光是已经渲染好了,但重新加载...
  • Unity中的场景切换

    万次阅读 2016-03-24 10:02:09
    与电影类似,一个游戏往往需要多个场景。而如果场景中资源较少,那么可以很快的完成切换,如果较多的话,可能需要十几秒时间。在这段时间内播放加载动画等等,可以减少玩家的不耐烦。 同步切换场景 Application....
  • 新建项目与新建场景 新建项目 每一个游戏都是一个独立的项目。 打开 Unity,输入项目名称 --&gt; 选择本地存储位置 --&gt; 选择 3D模式 --&gt; 点击“Creat Projeect”完成项目创建。 项目存储...
  • unity 入门学习之(一)创建基本的3D游戏场景

    万次阅读 多人点赞 2016-05-14 21:41:03
    1.准备工作,创建新工程2创建好的工程如下图中所示,在scene场景中包含一个主摄像机(main camera)和一个方向光(DirectionalLight),如下图右中所示,点击主摄像机在场景的右下角会出面预览窗口。3.创建基本的3D...
  • Unity创建游戏的理念可以被jian'da
1 2 3 4 5 ... 20
收藏数 178,563
精华内容 71,425
关键字:

游戏场景