U3D没有u3d阴影强度是怎么个情况

后使用快捷导航没有帐号?
只需一步,快速开始
查看: 1725|回复: 1
求教,U3D角色阴影问题
TA的其他好贴
马上注册,加入CGJOY,享用更多功能,让你轻松玩转CGJOY。
才可以下载或查看,没有帐号?
考虑到资源消耗问题,角色投射地面的阴影如果用光照来实现的话太费资源。
请问大神,我想用一个面片附一张贴图作为角色阴影,如果地面有起伏,面片会和地面穿插,这个问题如何解决啊?
感觉碰到U3D类的问题好无力,,动不动可能都要代码。
喜子老师U3D高级班
掌握VR游戏制作就等于将前途放在了口袋中
【奖15张券】提高账户安全,完善个人资料!
Powered by史上最齐全U3D插件大集合一贴在手插件我有--NO1CG-CG教程网|CG资源网|模型下载|AE模板|影视动画
由分享到&>&&>& 发布于 16:47:07 来源于互联网
历史上最强悍的U3D插件集合180个U3D的插件绝对足够你使用下载100个在一起下载地址里面每个文件夹名字都标注十分详细了小伙伴们可以选择对应的资源而去下载&希望小伙伴们不要一次性转存 这个样子会导致链接失效 其他小伙伴们就下载不了啦&疯狂吧骚年unity3d 游戏插件 自定义 碰撞体 形状 优化 Concave Collider链接: &密码: 8rxxunity3d 游戏插件 战争迷雾Tasharen Fog of War 1.0链接: &密码: s3vtunity3d 游戏插件 原件 乐高 模块 模型 素材 Game Template链接: &密码: ppm7unity3d 游戏插件 宇宙 空间 框架 搭建 带大量模型 SPACE for Unity v1.02链接: &密码: i7bjunity3d 游戏插件 游戏 小地图 多平台 高效 KGFMapSystem (minimap)链接: &密码: f3njunity3d 游戏插件 优化 降低 drawcalls 合并 材质 Mesh Baker 2链接: &密码: fcf2unity3d 游戏插件 移动平台天气系统 UniStorm Mobile链接: &密码: n23bunity3d 游戏插件 液体 水 浮力模拟开发包 Buoyancy Toolkit v1.41链接: &密码: 8asxunity3d 游戏插件 性能优化 分析 场景内帧速率跟踪分析图形化 FPS Graph链接: &密码: kc8cunity3d 游戏插件 行星 星系 恒星 星云大气散射构建包Space Graphics Toolkit链接: &密码: kd3xunity3d 游戏插件 现代下水道模型构建包 Modern Sewer Construction Kit链接: &密码: 3rmpunity3d 游戏插件 物理系统 Complete Physics Platformer Kit v1.2链接: &密码: j2erunity3d 游戏插件 天气 气候 模拟 Nuaj' v1.2 天气制作系统链接: &密码: r289unity3d 游戏插件 体素地形 实时地形变形挖坑插件 Voxeland链接: &密码: w4e7unity3d 游戏插件 声音 管理 控制 开关 音量 工具 Audio Toolkit v6.2链接: &密码: qenqunity3d 游戏插件 摄像机 KGFCameraSystem v1.7 相机管理系统链接: &密码: h6tsunity3d 游戏插件 溶解特效插件 - Dissolve Shader链接: &密码: jtjxunity3d 游戏插件 人工智能 AI 目标 自动 跟踪 TargetPRO v4.1.2链接: &密码: 47w8unity3d 游戏插件 内付费 内购 IOS StoreKit In App Purchase Plugin链接: &密码: n5yvunity3d 游戏插件 漫游 自定义 路径 移动 Simple Waypoint System链接: &密码: 5yb4unity3d 游戏插件 开发 战旗类 Tile Based Map and Nav 新版链接: &密码: 9dsjunity3d 游戏插件 角色控制系统 Character System 新版 v4.2.5链接: &密码: dddfunity3d 游戏插件 角色扮演游戏开发包 ORK Okashi RPG Kit 源码 v1.2.5链接: &密码: 6k6dunity3d 游戏插件 交互性水体流体插件 Flow Machine链接: &密码: mtycunity3d 游戏插件 环境反射插件 Cubemapper 新版链接: &密码: 8iw4unity3d 游戏插件 关卡页面创建管理 Mad Level Manager v1.0.1链接: &密码: dw36unity3d 游戏插件 骨骼动画系统 EasyMotion2D链接: &密码: xxc6unity3d 游戏插件 高效 小地图 全景图 缩放 NJG MiniMap链接: &密码: i28qunity3d 游戏插件 高级塔防游戏开发包Tower Defense ToolKit TDTK链接: &密码: w5vnunity3d 游戏插件 仿神庙逃亡开发包 Infinite Runner Starter Pack 新版链接: &密码: gg3iunity3d 游戏插件 多平台 统一 http 链接 解决方案 UniWeb v1.9.23链接: &密码: 8nizunity3d 游戏插件 动作角色扮演开发包 Action-RPG Starter Kit 最新版 v2.0链接: &密码: k8xaunity3d 游戏插件 动态 模型 优化 减面 节约内存 自动 lod Cruncher链接: &密码: q2cwunity3d 游戏插件 地牢 场景 编辑 快速 地图编辑器 UniRPG Tile Ed v1.8b链接: &密码: fpequnity3d 游戏插件 大型多在线游戏开发包 Ratspell MMO Toolkit(v1.3c)链接: &密码: yii5unity3d 游戏插件 存储 多种数据 mysql 支持 多平台 Easy Save 2 保存加载链接: &密码: ayafunity3d 游戏插件 场景 管理 过场切换 特效 Scene Manager v1.4.4链接: &密码: 87aiunity3d 游戏插件 编辑器内建模工具gamedraw链接: &密码: w3x6unity3d 游戏插件 编辑器 扩展 Snowify 冬季 雪 覆盖 效果链接: &密码: fe4cunity3d 游戏插件 XML-JSON Serialization链接: 密码: qkp5unity3d 游戏插件 Weapon System 武器系统 v2.0链接: 密码: 9uh6unity3d 游戏插件 Wave Creator 真实波浪制作 v1.2.2链接: 密码: p41uunity3d 游戏插件 Water+ for Free & Mobile 1.2 快速高效水面效果链接: 密码: 57geunity3d 游戏插件 Wall Vision Outline Image Effect 轮廓效果插件链接: 密码: t9i3unity3d 游戏插件 volumetric light beam kit 体积光工具链接: 密码: r5adunity3d 游戏插件 VMOTOR 多视角摩托赛车游戏开发包 源码 功能全链接: 密码: g5ivunity3d 游戏插件 VisionTimer 计时器链接: 密码: rgfnunity3d 游戏插件 Vision System 视觉系统链接: 密码: nfi2unity3d 游戏插件 Virtual Joystick Texture Volume 1 控制杆界面图集链接: 密码: 77kmunity3d 游戏插件 Vertex Painter 2 材质编辑器(支持手机)链接: 密码: 19baunity3d 游戏插件 v21's Image Effects 图像特效链接: 密码: pdemunity3d 游戏插件 uSpeak Voice Chat 网络音频语音聊天插件扩展链接: 密码: hwkxunity3d 游戏插件 URG! Developer Edition 布娃娃 系统 内置链接: 密码: n64hunity3d 游戏插件 unisky1.2.7 天气变化控制工具 C#和JS版本链接: 密码: 81dhunity3d 游戏插件 UniShare 跨平台分享 支持 新浪 腾讯 微博 facebook链接: 密码: xcusunity3d 游戏插件 Ultimate Rope Editor 动态绳索插件工具链接: 密码: 8uv4unity3d 游戏插件 Ultimate Networking Project M2H 网络项目合集链接: 密码: yc8qunity3d 游戏插件 Ultimate MMO RPG Kit 在线 mmo rpg 游戏开发包链接: 密码: nsqxunity3d 游戏插件 Ultimate FPS Camera链接: 密码: 2djpunity3d 游戏插件 UI Starter Kit Starlink 星际界面效果 v1.1.1链接: 密码: wg9sunity3d 游戏插件 Totally Cosmic Skybox Art 宇宙太空天空盒子链接: 密码: 4qgrunity3d 游戏插件 Toon Effects Volume 1 卡通特效 31个 适合mobile链接: 密码: ijk2unity3d 游戏插件 Thinkscroller 滚动插件 1.5.4链接: 密码: 4u9vunity3d 游戏插件 TextFx 最新 超酷 字体动画 插件链接: 密码: yqedunity3d 游戏插件 terrainComposer &地形编辑 5A级别 地貌 制作 工具链接: 密码: wigzunity3d 游戏插件 Terrain Tile Editor 地形砖块编辑器 v1.2.1链接: 密码: kztgunity3d 游戏插件 Terrain Slicing & Neighboring Kit地形切割和邻接插件链接: 密码: 583gunity3d 游戏插件 Ten skyboxes 10个漂亮的天空盒子链接: 密码: tma1unity3d 游戏插件 TATAKAI Tactical Battle FX 战争特效 逼真的弹道 v1.12链接: 密码: qq7funity3d 游戏插件 Tank Track Simulator 坦克履带 轨迹模拟 系统 v1.1链接: 密码: 3xgjunity3d 游戏插件 Tagarela Lip Sync System 模型 说话 口型 同步链接: 密码: mttnunity3d 游戏插件 SuperSplines Pro 编辑器内曲线工具带源码链接: 密码: bapvunity3d 游戏插件 Sunshine! v1.3.0 代码程序 灯光 光影 阴影链接: 密码: cjhzunity3d 游戏插件 SUIMONO Water System 模拟角色在水面中运动链接: 密码: t764unity3d 游戏插件 Subsurface Scattering Shader 通透材质链接: 密码: syrzunity3d 游戏插件 Substance Database 程序材质集 最新版 v1.2.1 无缝贴图链接: 密码: 4cszunity3d 游戏插件 Storm Effects 天气特效支持IOS链接: 密码: p6qnunity3d 游戏插件 SplineBend 物体弯曲插件 v1.45链接: 密码: 94mpunity3d 游戏插件 Spline Trail Renderer 样条轨迹呈现器 v1.1链接: 密码: sw2munity3d 游戏插件 Speecher 模型 说话 口型 自动 同步 音轨对位链接: 密码: xxvaunity3d 游戏插件 SpaceD UI 太空UI界面 带PSD链接: 密码: ya1junity3d 游戏插件 Smart Water Basic+Mobile 完美水场景 支持手机链接: 密码: upjbunity3d 游戏插件 Simple RPG Camera 超好用rpg相机系统链接: 密码: tm4tunity3d 游戏插件 Shooter Kit - Halloween Range v1.2射击游戏框架源码链接: 密码: miurunity3d 游戏插件 Shmup Starter Kit for PlayMaker 空战游戏开发包链接: 密码: j29uunity3d 游戏插件 shaderbox 高级材质 高品质材质链接: 密码: m1xjunity3d 游戏插件 shader Toony Colors Pro + Mobile卡通着色器链接: 密码: cn72unity3d 游戏插件 Sci-fi Spaceship Effect Pack 宇宙船射击效果链接: 密码: iwckunity3d 游戏插件 Sage Anim Graph Editor 可视化动画混合机编辑器链接: 密码: m9dgunity3d 游戏插件 Ruaumoko iso 地形 地表 生成 插件 工具链接: 密码: dv6eunity3d 游戏插件 RTP- Relief Terrain Pack 编辑器地形扩展工具链接: 密码: n6siunity3d 游戏插件 RPG新手开发包RPG Starter Kit 2.0 最新版链接: 密码: jb5aunity3d 游戏插件 Relation Physics 1.1 汽车动力学 公路AI系统链接: 密码: gqw9unity3d 游戏插件 Real Flames - Basic Set 真实火焰效果链接: 密码: 96upunity3d 游戏插件 QuickRopes Rope Physics 动力学绳索插件链接: 密码: 8vcrunity3d 游戏插件 QuickDecals v1.0 快速 贴花 贴图 印图 工具 多平台链接: 密码: sdebunity3d 游戏插件 ProBuilder 2.0 场景建模工具链接: 密码: vqcsunity3d 游戏插件 Prime31 插件合集(2013新版)链接: 密码: syjyunity3d 游戏插件 Post-Process效果合集Colorful - Image Effects链接: 密码: b1c9unity3d 游戏插件 PoolManager v5.0 游戏内存优化链接: 密码: umfsunity3d 游戏插件 Playmaker 可视化编程 v1.7.3链接: 密码: t3crunity3d 游戏插件 Playmaker Windows Phone 8 Add-On 1.7.3 扩展链接: 密码: wqz9unity3d 游戏插件 Particle Director 粒子特效系统链接: 密码: ddtcunity3d 游戏插件 NGUI Next-Gen UI (新版) 界面制作链接: 密码: wt3nunity3d 游戏插件 NGUI Joystick 动态操作杆 需要NGUI链接: 密码: aqmjunity3d 游戏插件 NGUI Depth Manager链接: 密码: mc67unity3d 游戏插件 MultiPlatform ToolKit 多平台工具包 v1.95链接: 密码: 9yf8unity3d 游戏插件 MUI (Mobile User Interface) 手机平台控制插件链接: 密码: zs7zunity3d 游戏插件 Motorbike Mobile Starter Kit 摩托开发包 手机 移动设备链接: 密码: 99pmunity3d 游戏插件 Mobile Starter Pack 射击游戏移动版链接: 密码: gkt9unity3d 游戏插件 Mobile Movie Texture 视频播放 视频纹理 v1.17a链接: 密码: d6xy&unity3d 游戏插件 Mobile Joystick Controller 移动平台动态操作杆&链接: &&密码: mvif&
下载地址: 本站点资料用于学习交流之用,勿作它用;若需商业使用,需获得版权拥有者授权,并遵循国家相关法律、法规之规定。如因非法使用引起纠纷,一切后果由使用者承担。
分享一次即可获得全站2小时内免费下载权限,分享后刷新页面即可!关于u3d的日记
每天了解他一点点,时间长了,我们就混熟了~
Unity3D教程:优化Draw CallPosted on 日 by U3d / Unity3D 基础教程&/被围观 461 次Unity3D教程:优化Draw Call 。在屏幕上渲染物体,引擎需要发出一个绘制调用来访问图形API(iOS系统中为OpenGL ES)。每个绘制调用需要进行大量的工作来访问图形API,从而导致了CPU方面显着的性能开销。
Unity在运行时可以将一些物体进行合并,从而用一个绘制调用来渲染他们。这一操作,我们称之为“批处理”。一般来说,Unity批处理的物体越多,你就会得到越好的渲染性能。
Unity中内建的批处理机制所达到的效果要明显强于使用几何建模工具(或使用Standard Assets包中的CombineChildren脚本)的批处理效果。这是因为,Unity引擎的批处理操作是在物体的可视裁剪操作之后进行的。Unity先对每个物体进行裁剪,然后再进行批处理,这样可以使渲染的几何总量在批处理前后保持不变。但是,使用几何建模工具来拼合物体,会妨碍引擎对其进行有效的裁剪操作,从而导致引擎需要渲染更多的几何面片。
只有拥有相同材质的物体才可以进行批处理。因此,如果你想要得到良好的批处理效果,你需要在程序中尽可能地复用材质和物体。如果你的两个材质仅仅是纹理不同,那么你可以通过&纹理拼合&操作来将这两张纹理拼合成一张大的纹理。一旦纹理拼合在一起,你就可以使用这个单一材质来替代之前的两个材质了。
如果你需要通过脚本来访问复用材质属性,那么值得注意的是改变Renderer.material将会造成一份材质的拷贝。因此,你应该使用Renderer.sharedMaterial来保证材质的共享状态。
动态批处理
如果动态物体共用着相同的材质,那么Unity会自动对这些物体进行批处理。动态批处理操作是自动完成的,并不需要你进行额外的操作。
1、批处理动态物体需要在每个顶点上进行一定的开销,所以动态批处理仅支持小于900顶点的网格物体。
2、如果你的着色器使用顶点位置,法线和UV值三种属性,那么你只能批处理300顶点以下的物体;如果你的着色器需要使用顶点位置,法线,UV0,UV1和切向量,那你只能批处理180顶点以下的物体。
请注意:属性数量的限制可能会在将来进行改变。
3、不要使用缩放尺度(scale)。分别拥有缩放尺度(1,1,1)和(2,2,2)的两个物体将不会进行批处理。
4、统一缩放尺度的物体不会与非统一缩放尺度的物体进行批处理。使用缩放尺度(1,1,1)和&(1,2,1)的两个物体将不会进行批处理,但是使用缩放尺度(1,2,1)和(1,3,1)的两个物体将可以进行批处理。
5、使用不同材质的实例化物体(instance)将会导致批处理失败。
6、拥有lightmap的物体含有额外(隐藏)的材质属性,比如:lightmap的偏移和缩放系数等。所以,拥有lightmap的物体将不会进行批处理(除非他们指向lightmap的同一部分)。
7、多通道的shader会妨碍批处理操作。比如,几乎unity中所有的着色器在前向渲染中都支持多个光源,并为它们有效地开辟多个通道。
8、预设体的实例会自动地使用相同的网格模型和材质。
静态批处理
相对而言,静态批处理操作允许引擎对任意大小的几何物体进行批处理操作来降低绘制调用。因此,静态批处理比动态批处理更加有效,你应该尽量低使用它,因为它需要更少的CPU开销。
为了更好地使用静态批处理,你需要明确指出哪些物体是静止的,并且在游戏中永远不会移动、旋转和缩放。想完成这一步,你只需要在检测器(Inspector)中将Static复选框打勾即可,如下图所示:
使用静态批处理操作需要额外的内存开销来储存合并后的几何数据。在静态批处理之前,如果一些物体共用了同样的几何数据,那么引擎会在编辑以及运行状态对每个物体创建一个几何数据的备份。这并不总是一个好的想法,因为有时候,你将不得不牺牲一点渲染性能来防止一些物体的静态批处理,从而保持较少的内存开销。比如,将浓密森里中树设为Static,会导致严重的内存开销。
静态批处理目前只支持Unity iOS Advanced。
原文地址:作者:
研究一下Unity3d自带的AngryBots项目,了解基本的游戏运行机制:
1.&人物的动作控制逻辑***Player对象***[外形]Player对象里有一个对象具有Skinned Mesh Renderer组件,该组件使用的Mesh名为main_player_lorez。类似的还有表达武器的,名为main_weapon001的GameObject。
[操作]:&(InputManager)**移动**定义:移动在InputManager里添加了2种操作方式:水平移动,名为 Horizontal垂直移动,名为 Vertical并设置了一些属性,比如对应的按键,加速度,类型等等。在脚本(PlayerMoveController.js)里,通过Input.GetAxis(&Horizontal&)&和 Input.GetAxis(&Vertical&)获得玩家的按键状态转化成的运动方向。并储存在MovementMotor.js脚本定义的movementDirection变量里。
实现:Player添加了RigidBody组件,该组件提供了按物理规律改变GameObject的Transform的能力。在FreeMovementMotor.js脚本里,定义了一些参数,用于和movementDirection一起,计算出作用于RigidBody对象上的力(Force)。角色就开始向指定方向移动了。
**面向(facingDirection)**直接使用Input.mousePosition作为屏幕坐标,用角色所在位置定义一个平面,求得射线焦点,将该角色所在位置到该点的方向作为面向。并储存在MovementMotor.js脚本定义的facingDirection变量里。
[动作播放]:Player Animation(Script)(PlayerAnimation.js)var moveAnimations : MoveAnimation[];&因为是public变量,所以可以在inspector中直接修改,例子中定义了6个动作 run_forward/run_backward/run_right/run_left 和 idle/turn 。由于这个例子里角色的动作定义了6个clip,和上述6个动作名称一一对应。
动作的播放不是在转向发生,或是ASWD按下时发生的。该脚本对比Player的Transform在2帧内的变化,根据面向、移动方向,计算出具体播放哪个动作。同时,有动作混合逻辑,使得动作的切换是有过程并且平滑的。上半身转动到一定角度,下半身也会调整,这个也是逻辑做的功能。
2.&从射击到命中的整个处理流程,射击特效的制作原理[创建子弹]Cache对象ObjectCache类var prefab : GameOvar cacheSize : int = 10;Spawner.jsvar caches : ObjectCache[];function Awake ()&{caches[i].Initialize ();}static function Spawn(...);static function Destroy(...);
有一个对象cache池,即为objectCache对象的实例,该对象初始化固定数量的对象实例,并顺序的提供对象实例。Spawner对象按Prefab类型将多个ObjectCache对象组织起来,并通过Spawn 和 Destroy 函数提供统一的接口来创建和销毁各种对象实例--例如子弹,导弹。
[发射子弹的时机]WeaponSlotTriggerOnMouseOrJoystick.jspublic var mouseDownSignals : SignalSpublic var mouseUpSignals : SignalSSignalSender.jspublic function SendSignals (sender&: MonoBehaviour)public var receivers : ReceiverItem[];AutoFire.jsfunction Update ()if (firing)&{if (Time.time&& lastFireTime + 1 / frequency)&{var go : GameObject = Spawner.Spawn (bulletPrefab, spawnPoint.position, spawnPoint.rotation * coneRandomRotation) as GameO
WeaponSlot(GameObject)对象有一个脚本组件&,&名为TriggerOnMouseOrJoystick该脚本的update方法通过Input.GetMouseButtonDown (0)&来监测鼠标左键的按下状态,同时使用SignalSender对象将事件Fire出去。SignalSender本质上来说是一个发布订阅模式,EventSource通过声明SignalSender变量,来声明会发起的事件(event name),并在必要的时机,调用SignalSender.SendSignals(this)来fire事件。事件的接收方由SignalSender的receivers变量给出。因为它是个全局变量,所以可以在inspector里设置。客户方的处理逻辑和事件源就是通过这样的方式关联起来的。事件的名称也是通过inspector来设置的。
SendSignals方法接受的参数为MonoBehaviour类型,因此可以通过这个事件机制,在不同的脚本中调用不同的功能。由于GameObject的SendMessage的实现原理,只需要保证事件的接收方包含与事件名称相同的函数,即会被自动调用。(疑惑:这种方式是不带参数的,如果需要对Event做额外的参数传递怎么办呢?能想到的是在一个公共的地方做数据交换)通过SignalSender,武器的逻辑状态--&开火&--已经被逻辑识别了,例子将结果保存在AutoFire脚本的firing变量中。
开火后,在AutoFire里,激活了子弹的实例对象。[开火的特效]WeaponSlotAutoFire.jsmuzzleFlashFront.active =audio.Play ();
通过SignalSender,武器的逻辑状态--&开火&--已经被逻辑识别了,例子将结果保存在AutoFire脚本的firing变量中。同一时刻,也播放了一些开火的特效:*武器开火的音效,这只是调用AudioSource组件。*武器枪口的火花,muzzleFlashFront对象,在inspector中指定为一个GameObject。其中包含一些Mesh和一个Light,以及一个将Mesh旋转和缩放以达到比较酷的喷射火光的脚本。*人物的射击动作--通过另一组监听实现的,不在AutoFire脚本中触发。
[命中时的事情]PerFrameRaycast.jsprivate var hitInfo : RaycastHAutoFire.js(命中判定)var hitInfo : RaycastHit = raycast.GetHitInfo ();AutoFire.js(击退敌人)var force : Vector3 = transform.forward *&(forcePerSecond&/ frequency);hitInfo.rigidbody.AddForceAtPosition (force, hitInfo.point, ForceMode.Impulse);AutoFire.js(播放击中的音效)var sound : AudioClip = MaterialImpactManager.GetBulletHitSound (hitInfo.collider.sharedMaterial);AudioSource.PlayClipAtPoint (sound, hitInfo.point, hitSoundVolume);
游戏中实现的命中,和子弹飞行无关,是通过PerFrameRaycast.js脚本提供的射线查询结果来做的命中判定。PerFrameRaycast每帧做一次射线查询,将得到的结果保存在hitInfo中。AutoFire在update的时候,检查是否命中了对象。如果命中了对象,计算各种伤害,并调用Health脚本组件的相关方法。(Health相关的事情稍后详细描述)
[子弹的飞行]子弹是一个名为InstanceBullet的GameObject,它由名为InstanceBullet的Prefab对象来描述,主要包含了一个表达子弹轨迹的长条形的mesh,和一个用于控制其飞行的脚本SimpleBullet.js。
SimpleBullet.jsfunction Update ()&{tr.position += tr.forward * speed * Time.deltaT
function Update ()&{if (Time.time&& spawnTime + lifeTime || dist & 0)&{Spawner.Destroy (gameObject);
SimpleBullet.js包含了一些参数,保证子弹有以下行为:沿创建的方向飞行有时限,时间到了会被休眠(Spawner.Destroy)有距离上限,超过距离会休眠(Spawner.Destroy)
AutoFire.jsbullet.dist = hitInfo.除了上述2种方式消隐子弹实例外,子弹可以穿过场景里的石头,但是无法穿越箱子,也无法穿越将石头移开后露出的场景边界。这是因为在AutoFire做命中判定的同时,根据射线查询的结果调整了子弹的距离上限参数。
3.&怪物的激活、攻击、动作控制原理,你所遇到的第一个怪物KamikazeBuzzer的攻击特效的实现原理[第1个KamikazeBuzzer]SimpleBuzzers7EnemyArea.jsBox Collider
KamikazeBuzzerKamikazeMovementMotor.jsBuzzerKamikazeControllerAndAi.jsDestroyObject.jsHealth.jsAudioSource
[外形]buzzer_bot
[动作]这个怪物的mesh没动作。
[激活]EnemyArea.jsfunction OnTriggerEnter (other&: Collider)&{if (other.tag&==&&Player&)ActivateAffected (true);
角色进入 Box Collider 的范围时,会触发OnTriggerEnter,这时会将SimpleBuzzers7的子对象KamikazeBuzzer设置为激活的。挂载到KamikazeBuzzer对象上的脚本组件也就可以开始执行了。
[移动]KamikazeMovementMotor.js该脚本控制KamikazeBuzzer的刚体属性,根据参数和一定的计算规则计算出力,作用于刚体,让KamikazeBuzzer动起来,类似于Player的移动原理。
BuzzerKamikazeControllerAndAi.js该脚本根据怪物和Player之间的位置关系,按一定计算规则算出KamikazeMovementMotor需要的参数,从而达到控制其移动的目的。
direction =&(player.position&- character.position);因为方向总是朝着player,所以看起来就有个“追击”的效果。
rechargeTimer & 0.0f && threatRange && Vector3.Dot (character.forward, direction)&& 0.8f这个判断达到了“追过头”的效果。
[攻击特效]当移动流程里“追到了”条件达成后,主要调用DoElectricArc函数来表达攻击方式。
zapNoise = Vector3 (Random.Range&(-1.0f, 1.0f), 0.0f, Random.Range(-1.0f, 1.0f))&* 0.5f;zapNoise = transform.rotation * zapN这里有些小随机,是为了让每次电到Player的位置不一样。
public var electricArc : LineRelectricArc.SetPosition (0, electricArc.transform.position);electricArc.SetPosition (1, player.position + zapNoise);主要靠LineRenderer来描述闪电弧。LineRenderer用来构造若干条连续的线段,可以设置起始的宽度和结束的宽度。[被击]DamagePos(GameObject)Transform(Component)KamikazeBuzzer(GameObject)Health.jsHealth.jsprivate var damageEffect : ParticleEfunction OnDamage (amount&: float, fromDirection : Vector3)&{damageEffect.Emit();
DamagePos对象聚合了一个Transform组件,该组件为被击效果提供坐标信息。KamikazeBuzzer聚合了一个Health.js,其中的damageEffect指定为ElectricSparksHitA(prefab)。在之前子弹的命中流程中,被击中的target,会调用其Health组件的OnDamage函数。KamikazeBuzzer的Health的OnDamage,就是创建ElectricSparksHitA(Clone)&对象,从而达到播放被击特效。[死亡和爆炸]Health.jspublic var dieSignals : SignalSfunction OnDamage (amount&: float, fromDirection : Vector3)&{if (health&&= 0){dieSignals.SendSignals (this);
SpawnObject.jsfunction OnSignal ()&{spawned = Spawner.Spawn (objectToSpawn, transform.position, transform.rotation);
DestroyObject.jsfunction OnSignal ()&{Spawner.Destroy (objectToDestroy);
当health值减少到0及0以下,对象就被判定为死亡了。DamagePos对象聚合了一个SpawnObject.js脚本。在其OnSignal函数里创建一个ExplosionSequenceBuzzer(prefab);ExplosionSequenceBuzzer是用来表达爆炸效果的。在其EffectSequencer.js脚本中,控制了一些粒子的变化。KamikazeBuzzer对象聚合了一个DestroyObject.js脚本。在其OnSignal函数里销毁了KamikazeBuzzer对象实例。
4.&人物与怪相关的health处理相关流程Player和怪物的血量,都是通过聚合一个Health.js脚本组件来完成。伤害计算则是在各自的组件里独立编写计算的。Player是AutoFire,KamikazeBuzzer是在其AI脚本里。
Health组件主要定义了血量被击特效受伤的痕迹被击事件死亡事件协作方式已经在分析Player和KamikazeBuzzer的行为方式时有所表述。
5.&摄像机跟随与控制PlayerMoveController.js里面根据角色位置计算摄像机位置。根据鼠标位置,微调摄像机位置。6.&雨滴相关效果的实现原理,包括雨滴掉落、落到地面产生的波纹、地表水面的实现与反射效果等【雨滴】[相关GameObject]Rain 表达雨声RainBox 表达雨滴RainEffect 将各种东西组织起来的Root对象RainDrops 雨滴掉落的Root对象RainslpashesBig 表达雨滴的大涟漪的Root对象RainslpashesSmall 表达雨滴的小涟漪的Root对象splashbox 表达涟漪
[Mesh&Material]RainDrops_LQ0/1/2RainsplashesBig_LQ0/1/2RainsplashesSmall_LQ0/1/2
[Shader]RainRainSplash
[组织关系]Environment(dynamic)RainEffects(位置000)RainDrops(RainManager.js)RainBox*NRainBox.jsRain(Shader)RainDrops_LQ0(Mesh)RainslpashesBig(RainsplashManager.js)splashboxRainsplashBox.jsRainSplash(Shader)RainsplashesBig_LQ0(Mesh)RainslpashesSmallsplashboxRainsplashBox.jsRainSplash(Shader)RainsplashesSmall_LQ0(Mesh)
[落雨]RainManager.jsfunction CreateMesh ()&: Mesh {public function GetPreGennedMesh ()&: Mesh {
RainManager 在运行期创建了雨幕的Mesh和Material,思路为在固定大小的长方体里,随机生成只有4个顶点的小片。生成的对象和名字有关,即为 GameObject.name + _LQ0/1/2,一共3种类型的Mesh,只是生成的片的位置,uv坐标等不一致。
RainBox.jsfunction Update()&{function OnDrawGizmos ()&{
Update里的逻辑让雨幕Mesh在Y方向上从上自下的循环运动,从而达到雨滴落下的效果。OnDrawGizmos函数是为了在编辑期绘制雨幕的外形。
[涟漪的创建]RainsplashManager.jsRainsplashBox.js
涟漪的创建方式和雨幕原理一样,只是在小片生成时的坐标,法线方向略有不同。大涟漪和小涟漪只是创建的片的数量和区域大小不同而已。
[涟漪的扩散]RainSplash(Shader)里,对传进来的定点上的uv坐标和颜色做了一定的变换,从而做出涟漪从小变大和逐渐消隐。
(疑问)材质从哪里指定的?inspector手工指定?(疑问)RainBox.js 里的enable,禁止和允许了哪些调用?
【地表水面与反射】[相关GameObject]polySurface5097 地表RealtimeReflectionInWaterFlow.shader 处理水面模拟和反射的shaderMain CameraReflectionMain Camera 反射摄像机RealtimeReflectionReplacement.shader 备用的shader方案Main Camera 主摄像机ReflectionFx.cs 生成反射贴图的脚本public System.String reflectionSampler =&&_ReflectionTex&;&反射贴图reflectionMask
[关键代码]ReflectionFx.cspublic Transform[] reflectiveOprivate Camera reflectionCpublic LayerMask reflectionM计算反射摄像机的位置和朝向,将变换合并为反射矩阵渲染到反射贴图
RealtimeReflectionInWaterFlow.shader_ReflectionTex(&_ReflectionTex&, 2D)&=&&black&&{}v2f_full vert (appdata_full v)o.fakeRefl = EthansFakeReflection(v.vertex);fixed4 frag (v2f_full i)&: COLOR0fixed4 rtRefl = tex2D (_ReflectionTex,&(i.screen.xy&/ i.screen.w)&+ nrml.xy);rtRefl += tex2D (_FakeReflect, i.fakeRefl + nrml.xy * 2.0);
RealtimeReflectionReplacement.shader
[LateUpdate]在LateUpdate里处理反射因为反射需要等所有对象的运动都结束了。
[reflectiveObjects]reflectiveObjects是可以产生反射的对象,手工添加的,例子里有3个,分别是:polySurface5097polySurface425polySurface5095
[helperCameras为什么要Clear]helperCameras从设计意图上来看,是为了支持游戏里任意数量的摄像机的反射,也就是ReflectionFx.cs的通用性。为了确保一帧之内只渲染一次反射贴图,所以就clear了。
[被反射对象的筛选]reflectionMask可以被反射的对象必须是以下layer之一ReflectionPlayerEnemies这个通过Inspector设置GameObject的Layer属性即可。
7.&其它你觉着重要的主题Coroutine.协程,协程不是多线程,是将代码的执行控制权转移出去的一种机制。通过这种机制,可以让代码的执行流程不那么顺序化,达到各种模块协作的目的。AudioSource 音源对象,需要AudioClip载入声音资源,用AudioListener(ears)一起计算音频的声音大小。Animation 动画对象,控制骨骼动画相关,支持混合和IK。WWW 封装URL操作的类,可以支持http,https,file,ftp协议。其中ftp只能支持匿名登录。NGUI 一个轻量级UI库
原文链接:.cn/s/blog_79616bdd0101ei4r.html
原创文章如需转载请注明:转载自
&&&&&&&&&&&&&&&&& Unity4动画系统Mecanim
使用过PlayMaker的同学在接触Mecanim后应该都会有一个共同的感觉。就是Mecanim的Animator状态机和PlayerMaker的状态机很像,无论从界面上还是操作上。
总的来说完成新的Mecanim动画系统需要两大步骤:
一&导入模型&
(1)导入模型并设置Model,Rig,Animations。
(2)如果是Humonoid人模式,则需rig下configure检查
二 Animator构建
(1)将模型拖入场景成Animator
(2)新建AnimatiorController,并设置状态,状态动画及状态切换条件。
下面是各步骤的详细介绍:
一&导入模型&
(1)导入模型并设置Model,Rig,Animations。
有三栏设置。
第一栏Modle:
ScaleFactor导入的模型缩放系数
Read/Write Enabled 网格数据是否能被改变
第二栏Rig:选择类型
Legacy 传统类型,可以用Animation
Generic 普通Animator&
Humanoid 人体
第三栏Animations:动画设置
主要是检查一遍动画对不对,如果是legacy的话是没有右图Loop和Root的这些设置的。
Start 动画起始帧
End 动画结束帧
loop match 循环匹配
(2)如果是Humonoid人模式,则需在rig栏下面的configure里面检查一遍骨骼节点是否都是绿的(表示骨骼节点设置正确)
点击任意骨骼都会在scene和hierarchy下显示对应的位置
到目前位置导入工作就完成了。下面是Animator的实现
二 Animator构建
(1)将模型拖入场景成Animator
(2)新建AnimatiorController,并设置状态,状态动画及状态切换条件。
设置状态&一般有两种,state和Blend Tree。state就是普通状态,对应单独的动作。Blend Tree可以理解为特殊的state,该state对应的是多个动作的混合。
state:&&黄色state表示默认初始状态
可以在Animator窗口右键new一个。
或者直接把动作从Assets栏下拖拽进来,直接生成一个和动作同名的state。
下图的Motion即state的对应动作
state之间的transition:
从一个state转换到另一个state的&触发条件即下图的Conditions.本图中的意思是&当speed大于等于0.5时,会从idle状态切换到run状态。
Blend Tree:
1.创建&右键-& Create -& From New Blend Tree
2.双击进入下图
按+&添加motion。
不勾Automatic Thresholds则可设置 Threshold,&否则Threshold是自动分配的固定值。
红线表示当前的参数值。
左右拖拽左下方的圆钮即可看见&随着input值的变化,状态也在跟着变化
可以用来做局部动作或者混合动作。
如新建一个layer并命名presslayer,动作是左手下压,
新建一个Avatar Mask将其他部位如下图的红色部分都选出来。
在presslayer里,
Mask &&&&&&&&&&选择创建好的Avatar Mask,意思是在本layer,Mask设置的上图的红色部分都被屏蔽了,只有绿色部分在本layer能动。
Blending &&& override表示该layer的动作会覆盖其他layer动作,addictive表示该layer的动作会与其他layer动作混合。
如果是addictive的话,最后能实现的效果就是不管人整体的动作是跑还是走路,左手的动作都会和presslayer的左手下压动作混合。
Inverse Kinematics,&反向动力学,一般来说骨骼动画都是传统的从父节点骨骼到子节点骨骼一直到根节点骨骼的带动方式。但很多情况,如行走时踩到一块石头落脚点比动画要高时,这时候就需要IK了。IK是指骨骼动画都是从根节点骨骼一直到父节点骨骼的带动方式。
下图第一步设置IK权重,第二步设置LeftHand这个根骨骼的位置
创文章如需转载请注明:转载自&
&&&&&&&&&&&&&&&&&&&&& Shader第三讲:Vertex and Fragment Shader
Vertex and Fragment Shader:最强大的Shader类型,也是本系列的重点,下文中简称V&F Shader,属于可编程渲染管线.&使用的是CG/HLSL语法。分为2个部分vertex顶点部分和Fragment像素部分。下面依然通过写几个简单的Shader来学习。
例一:显示一张贴图
新建Unity工程,新建一个Cube立方体,新建一个名为Exam1的Shader(Project视图-&Create-&Shader),输入如下代码。&
Shader &Custom/Exam1&&{
Properties&{
_MainTex&(&Texture&, 2D)&=&&white&&{&}
#pragma vertex vert
#pragma fragment frag
#include &UnityCG.cginc&
sampler2D _MainT
float4 _MainTex_ST;
struct v2f {
&&& float4& pos : SV_POSITION;
&&& float2& uv : TEXCOORD0;
v2f vert (appdata_base v)
&& o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);
float4 frag (v2f i)&: COLOR
float4 texCol = tex2D(_MainTex,i.uv);
&&& float4 outp = texC
详细讲解如下图
之后我们把之前创建的立方体的shader设置为Exam1,Inspector里有对应的Texture。然后把第三行代码中&Texture&&改为&“Exam 1 texture”,这时回到Inspector面板,你会发现什么?没错贴图的名字提示也相应的改变了。就这么简单,到这你已经学会,将任意贴图赋给任意模型的方法了。
原创文章如需转载请注明:转载自&&&&&&&&&&&&&&&&&&&&&&&Shader第二讲:Fixed Function ShaderFixed function shader简介:&&属于固定渲染管线&Shader,&基本用于高级Shader在老显卡无法显示时的情况。使用的是ShaderLab语言,语法与微软的FX files 或者NVIDIA的 CgFX类似。例一:显示单一颜色下面我们来看第一个例子,显示单一颜色,注释写得挺详细了,照着格式写即可。
//根Shader
Shader &Custom/1_1color&&{
&&&//&属性
&&& Properties {
&&&&&&&&//定义一个颜色
&&&&&&& _Color (&Main Color&, Color)&=&(1,.5,.5,1)
&&&&//&子shader
&&& SubShader {
&&&&&&& Pass {
&&&&&&&&&&& Material {
&&&&&&&&&&&&&&&&//显示该颜色
&&&&&&&&&&&&&&& Diffuse [_Color]
&&&&&&&&&&&&}
&&&&&&&&&&&&//打开光照开关,即接受光照
&&&&&&&&&&& Lighting On
例二:显示一张贴图
Shader &Custom/1_2show1texture&&{
&&& Properties {
&&&&&&& _MainTex (&Base&(RGB)&, 2D)&=&&white&&{}
&&&&&&& _Color(&Main color&,Color)&=&(1,1,1,1)
&&& SubShader {
&&&&&&& Pass
&&&&&&&&&&& Material
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& Diffuse[_Color]
&&&&&&&&&&&&}
&&&&&&&&&&& Lighting on
&&&&&&&&&&& SetTexture[_MainTex]
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&//combine color部分,alpha部分
&&&&&&&&&&&&&&&&//&&&&&&材质&*&顶点颜色
&&&&&&&&&&&&&&& Combine texture * primary,texture * constant
&&&&&&&&&&&&}
例三:两张贴图叠加
Shader &Custom/1_3merge2texture&&{
&&& Properties {
&&&&&&& _MainTex (&Base&(RGB)&, 2D)&=&&white&&{}
&&&&&&& _MainTex2 (&Tex2&(RGB)&, 2D)&=&&white&&{}
&&&&&&& _Color(&Main color&,Color)&=&(1,1,1,1)
&&& SubShader {
&&&&&&& Pass
&&&&&&&&&&& Material
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& Diffuse[_Color]
&&&&&&&&&&&&}
&&&&&&&&&&& Lighting on
&&&&&&&&&&& SetTexture[_MainTex]
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&//&&&&&&第一张材质&*&顶点颜色
&&&&&&&&&&&&&&& Combine texture * primary
&&&&&&&&&&&&}
&&&&&&&&&&& SetTexture[_MainTex2]
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&//&&&&&&第二张材质&*&之前累积(这里即第一张材质)
&&&&&&&&&&&&&&& Combine texture * previous
&&&&&&&&&&&&}
原创文章如需转载请注明:转载自引言,在Unity3d里,所有的图形绘制都必须通过Shader,即着色器。一般的使用过程中,我们用到的都是unity自带的Shader,即build-in shader。学习Shader后,自己写的Shader能做出很多你想要的特殊效果,增强游戏的画面表现。例如&水的倒影。 LOGO的光影闪过等等效果等等。&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Shader的分类
Shader按管线分类一般分为固定渲染管线与可编程渲染管线
1)固定渲染管线&——这是标准的几何&光照(Transforming&Lighting)管线,功能是固定的,它控制着世界、视、投影变换及固定光照控&制和纹理混合。T&L管线可以被渲染状态控制,矩阵,光照和采制参数。功能比较有限。基本所有的显卡都能正常运行。
2)可编程渲染管线——对渲染管线中的顶点运算和像素运算分别进行编程处理,而无须象固定渲染管线那样套用一些固定函数,取代设置参数来控制管线。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Unity3d的三种Shader
Unity的Shader分为三种:
(1)Fixed function shader &&属于固定渲染管线&Shader,&基本用于高级Shader在老显卡无法显示时的Fallback(之后有详细介绍)。使用的是ShaderLab语言,语法与微软的FX files 或者NVIDIA的 CgFX类似。
(2)Vertex and Fragment Shader &最强大的Shader类型,属于可编程渲染管线.&使用的是CG/HLSL语法。
(3)Surface Shader Unity3d推崇的Shader类型,使用Unity预制的光照模型来进行光照运算。使用的也是CG/HLSL语法。
&&&&&&&&&&&&&&&&&&&&&&&&&& Unity3d三种Shader对比
三种Shader共同点:
(1)都必须从唯一一个根Shader开始
(2)Properties参数部分,作用及语法完全相同
(3)具体功能都在SubShader里(Subshader:&子Shader,Shader会自上而下运行第一个硬件能支持的Subshader,主要作用是对不用硬件的支持。)
(4)都可以打标签,例如Tags {&&RenderType&&=&&Opaque&&}&&& LOD 200 &&&&以及Lighting On等
(5)都可以Fallback
(6)都可以处理基本的功能,例如光照漫反射(Diffuse)以及镜面反射(Specular)。但是Vertex and Fragment和Surface都能实现Fixed function实现不了的高级功能,例如基于uv计算的效果等等。
三种Shader不同点:
(1)Fixed function shader以及Vertex and Fragment Shader在subshader下面还有pass{},但是Surface Shader,由于已经将具体内容打包在光照模型了,不能加pass{},加了会报错。
(2)Fixed function shader每句代码之后没有分号';'&&&但是V&F shader以及Surface shader每句代码之后都必须加分号';'
(3)核心结构不同:
Fixed function shader的核心是
Material{}&以及 SetTexture[_MainTex]{}
Vertex and Fragment Shader的核心是
#pragma vertex vert
#pragma fragment frag &&&&&&&&&
#include &UnityCG.cginc&
Surface Shader的核心是
(1)这套用的是Unity3d自带光照模型Lambert,也不做顶点处理,那么只需要一个表面处理函数surf即可CGPROGRAM
#pragma surface surf Lambert
或者(2)这套表示使用的是自己写的光照模型lsyLightModel,并且使用了顶点处理函数vert
//&&&&& surface 表面处理函数&&&光照模型函数&&&&&&顶点处理:函数
#pragma surface& surf &&&&&&& lsyLightModel &&&& vertex:vert
//执行顺序&&&顶点处理函数&-&&表面处理函数&-&&光照模型函数&-&颜色值
ENDCG&&&&&
&中的GUI也比较好用,但是还是想通过一些插件来做UI,尤其是这个uniSWF插件,在制作UI时,真是如虎添翼。首先创建一个项目,然后导入uniSWF插件,如果事先没有安装,要先安装一下:
Unity3D的uniSWF使用教程
&由于uniSWF需要AIR的环境,如果你没有安装过Flash、FB的话可能需要先下载AIR进行安装,然后点击Installer。因为我事先使用过,所以第2步那里显示已经安装完毕。&&想使用flash素材的话,我们需要先创建一个Flash文件,然后在场景随便画一个东西,我画了一个正方形,然后转化为MC,点击高级选项,需要到处类才可以,这一部非常重要,不要在Unity中是找不到Flash素材的。你可以在MC中做动画,但是不要做形状补间动画,Unity中是不识别的。你可以吧东西转换成MC后在做动画就可以了。&&&
Unity3D的uniSWF使用教程
Unity3D的uniSWF使用教程
&然后我们在Unity中创建一个文件夹,把我们做好的flash和swf文件拖放到文件夹中,这时uniSWF会识别你的文件并导入到Unity项目中。&&&
Unity3D的uniSWF使用教程
&现在创建一个Plane,选择Plane之后,做下面的操作:&&&
Unity3D的uniSWF使用教程
Unity3D的uniSWF使用教程
&然后我们在Inspecter面板中可以设置文件,首先是swf的文件路径和导出类的名字,下面的loop是否循环播放,gotoAndStop可以让我们选择运行的时候让这个UI停在UI的第几帧。draw scale是材质的变形大小,默认是0.001,可能非常小,想让材质变大,吧0.001变大就可以了。&但是接下来我们可能会面临一个问题,就是以前做好的UI,现在可能要替换新的元素,那怎么办呢?很多人首先想到把flash改了重新发布一下就可以了??这样做在Unity中确实是不行的。那要怎么办呢?我们需要找到自己创建的Flash项目,然后在Unity项目综合那个找到它并把它删除了。&&&
Unity3D的uniSWF使用教程
&然后再重新导入更新过的Flash项目才可以。&不然就会像上面一样,会被重新导入为新的一套UI。&
首先、&灯光烘焙&:Unity
FBX模型导入、选项Model 不导入资源球、Rig&不导入骨骼、Animations&不导入动画。在Model选项勾选 Generate Linghtmap UVs 。否则、灯光烘焙、会出现阴影错乱。灯光烘焙时FBX Shader 选项 Mobile/Unlit(Supports Lightmap).
&&&&动态随机地图:地图拼接的时候、注意地图不要产生重叠、有些时候、会没有问题、但是有些时候、重叠部位、会产生闪烁。&&&图集&:Atlas 如果是UI&界面、最好一个界面一个图集、要是图片公用、最好单独放到一个单独的图集。&&&粒子特效:粒子特效让&我们又爱又恨、爱的是效果好、恨得是Draw Call高。&&&序列帧动画:&最好别用& TOOLKIT 推荐使用 swf 不过swf&记得记得把做好的动画放到一个元件里面、不然倒入unity&之后、没办法用。&&&动作系统:大部分NPC的动作最好公共。砍杀类的、近距离砍杀、支持少量的粒子鲜血飞溅效果、如果是群攻技能、最好不要播放粒子特效。&&&资源池:NPC 怪物类&:最好使用资源池管理、否则一次生成太多、游戏会出现卡顿、影响游戏体验。&&&模型:&IOS ——600-1000的高模可以接受、包括天气系统、粒子动画、周边的场景树、树叶、都可以有。&&——&基本300的低模吧、树木可以有、树叶就别要了、&&&&&关于安卓的优化:&图集大小最好不要高于1024、因为楼主之前遇见过、游戏安装之后、低端机直接崩溃、原因是手机系统版本低于2.2、超过1000的图集无法读取、导致。&2.2 以上没有遇见这个情况。&注意手机的RAM 与 ROM、小于 512M的手机、直接放弃机型适配。&&&挂接SDK:&挂接PP助手:IOS的童鞋们小心、之前PP提供的挂接、在使用重力感应的时候、会让任何游戏(不管是2D 还是&&)出现慢镜头的情况。具体是PP那边的挂接SDK的问题。有挂接PP的童鞋们要注意。&电信SDK:启动界面只能显示&电信&爱游戏&启动logo。道具购买只能在提审点购买。不允许重复够卖(这个很操蛋)。&&&关于字库:&游戏中、若描述信息较少、可使用图片字、若描述过多、使用字库请注意:字库在unity 中压缩率为20%左右、一个10M&的字库、在打包只后、占用包大小为 8M左右。所以、若游戏描述过多、推荐使用 40K-1M 的字库、为嘛呢、为了你后期游戏包大小做提前优化、包大小每压缩1M&用户大概会上升5%。&&&机型适配:&&&百度与360云测试:测试之后的结果、不可全信、测试结果中有问题的机型、建议童鞋们自己使用同型号的机型、安装游戏、进行人工测试。之前楼主所在公司的测试童鞋、使用百度与360进行测试(非黑我度娘)、通过率为78.1%、失败的机型、人工测试没有任何问题。所以、若使用云测试、问题机型、建议人工测试为准、云测试的结果、仅供参考。(免得程序员被虐成程序猿)&&&地图优化:如果地图使用频繁&如楼主的游戏:有草地、沙漠、雪地、可使用一个Prefab 在地图生成的时候、使用代码替换材质。灯光图烘焙的时候、最好把所有地图的灯光图做成一个。3D地图、尽量不要有丁字路口、否则、烘焙的灯光阴影会出卖你的。&&&关于Atlas的创建:&1、不推荐使用NGui的Atlas maker 创建图集。因为图集剩余空间较大。建议使用其他工具。比如 TexturePackerGUI 自己弄。&2、使用NGui的Atlas maker 创建图集、建议修改 UIAtlasMaker、修改创建方式为动态创建、缺点:损耗一定的性能。&优点:占用内存较小。&&&导入FBX文件:&倒入之后、记得干掉自动生成的 Material 文件夹。&&&关于图片压缩:(本人项目示例、仅作参考)&
&&&64X64以下的图片就没必要了&&&关于动态更新:&如果是要做更新这块、建议是在游戏初期、就把架构、和服务器端准备好、所有的资源、代码、在服务器端管理、据说&只能更新UI部分、有挂脚本的预物体、更新之后、脚本不能被使用(最近在研究这个、研究完了、再开一帖说这个。)感觉比较蛋疼吧?解决思路有一个、没测试、有兴趣的可以自己试试看:把游戏做成几个&控制器、所有代码部分、用代码挂到预物体上(思路有了、我还没测试过)。&&&单机与网游的通信区别:&网游不说了、随时要求联网。&单机不一样、单机一般情况下、不建议、让用户近游戏时就强制取昵称。这样会让一部分懒人用户流失。因为单机、不一定需要昵称才能玩、所以、用户在进入排行榜的时候、或者其他需要和服务器交互数据的地方、再提示他联网、然后输入昵称。在用户没有网络的情况下、把游戏数据存入本地。有网络的情况下、再用本地数据、和服务器交互。&&关于游戏包加密:&很不幸、之前游戏上线24小时、破解版就出来了、lz 拿到破解包之后研究发现、包签名被修改了、然后查阅资料、给包加了个外壳。反编译破解暂时无效、不知道有没有其他的方法。还在试验中。&&关于外接SDK:&虽然LZ的游戏升级1.01加密外壳、但是、只能(暂时?)防止游戏包被破解为内购版。外接某通信巨头SDK、发现该SDK、回调的信息、并未执行加密操作。所以、LZ现在表示很蛋疼、但是还是得提醒大家、记得给自己的游戏&穿件衣裳。防小人。&&&关于是否被破解的推断:&LZ的游戏上线之后、第二天凌晨、从BI发现大量用户购买各种道具、ARPU达到128、查看游戏数据、手机购买量、每天最高消费50RMB、但是有些用户消费值高达800RMB。各种道具购买。所以判断游戏异常、被破解。&&&游戏破解之后的处理:&1、联系破解游戏发布论坛、先以公司商务部向对方联系、和谐的处理此事。删帖、禁止下载。&2、不能和谐、就直接以公司名义发布律师函。&&值得注意:&1、大部分论坛都会删帖、做出处理、有小部分非主流论坛会阳奉阴违。&2、百度网盘下载地址、举报之后、处理速度较快。(点赞)&3、至于3、6、0这流、氓则无效、举报联系之后、未作处理。&&&
作者:木木栎&来自:}

我要回帖

更多关于 u3d 实时阴影 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信