https://connect.unity.com/p/zui-jia-shi-jian-dui-xiang-fang-zhi-he-wu-li-xiao-guo
最佳实践系列文章将探讨我们在与客户合作时遇到的一些常见的问题。这些都是我们的合作团队辛苦得出的经验和教训,我们很自豪能够和大家分享他们的智慧。我们已经为大家分享过以下内容:

《影子战术》层级优化经验分享
最佳实践 | 碰撞性能优化
最佳实践 | Unity项目设置
这其中的很多问题只有在真正制作主机游戏、手机游戏、或者处理巨量游戏内容时才会出现。如果能在开发早期就将这些问题考虑进去,那么开发过程就会更轻松,而游戏也会更炫酷。
将对象放置到理想位置
尽管摆放对象是在Unity中最为常见的任务之一,我们还是看到不少团队为了如何能更好地完成这项工作而苦恼。要把对象排列完美,不让角色跑出世界,不让寻路出现障碍,并让各个物理对象能够放置在理想的位置,这的确不是件轻松的事。
Unity提供了一些工具来方便处理这个问题,这些工具各自扮演着不同的角色。尤其是在我们想要制作大量重复使用的内容,或是制作一张放置了大量动态物理对象的场景,了解这些工具的使用方法则尤为重要。
使用正确的辅助工具
Unity中提供了变换、旋转和缩放工具,在Unity 2017.3中还加入了能同时拥有这三个功能的通用工具。这些小工具能在3D环境下修改游戏对象的变换属性。除此之外,还有2D环境下处理对象的矩形变换工具(Rect Transform)。
所有这些辅助工具的运作方式都与其所处的工作模式直接相关。如果将模式设为中心(Center),辅助工具将使用根据对象边界计算得出的对象中心点。这个计算结果是个近似值,所以在处理复杂对象时或许会感觉该中心点偏移了真正的中心点。
如果将辅助工具模式设为轴心(Pivot),辅助工具将使用对象自身引用框的原点(0,0,0)。这个轴心点是由创建该资源的作者在制作时设定的。通常需要将对象按照彼此相对的位置进行摆放时,我们推荐使用轴心模式,而且在制作资源时要留意轴心点的位置。
第二个切换按钮,全局/局部(Global / Local)切换按钮,确定了操作对象时所处的空间。设为全局(Global)意味着辅助工具将会对齐世界(x,y,z)坐标轴,而设为局部(Local)将会对齐对象自身的(x,y,z)坐标轴。通常我们需要在局部空间下处理对象。但如果我们想要让多个对象互相对齐,则会切换到全局坐标系,并使用网格对齐工具来排列对象。
吸附对象
在Unity中,最为直接的定位工具是按下CTRL键(Windows系统)或是Command键(OSX系统)来吸附网格。在我们通过坐标轴手柄(也就是分别为蓝、红、绿的坐标轴辅助工具)来移动对象时,按下吸附键会让对象根据当前网格大小计算的增量而移动,这个增量可以自行修改。
自动吸附设置(Snap Settings)菜单能为网格大小设置每个轴的数值,让我们控制旋转角度和缩放大小的吸附,还能将所选对象的当前变换属性近似取其最近的网格线。
吸附所有坐标轴(Snap All Axes)按钮在排列任意对象时十分有用。我们可以选择一组对象,将它们在坐标轴上吸附到网格,然后重新定位,这样就能把他们排列好了。效果如下图所示:
这个方法在处理规则几何体、大型关卡布局和设置碰撞块时十分管用。如果我们需要处理更为复杂的放置情况,则需要下面这些工具。
顶点吸附
在使用变换工具时按住V,变换辅助工具会切换为顶点吸附模式,显示为一个小方框。然后点击所选对象网格上的一个顶点,将其拖到光标下的任意顶点上。在处理任意网格的对齐时,尤其是要处理那些复杂的或是不存在碰撞的网格对齐时,这个方法很实用。
在上图中,不管是电线还是台灯都没有紧凑的碰撞网格,而且它们也都不是规则的立方体,所以它们不能用网格吸附或碰撞吸附处理。
如果需要这样放置多个游戏对象,我们也可以将顶点吸附模式保持在打开状态。按下Ctrl+Shift+V打开,按下Ctrl+V关闭。这样便不需要一直按住V就能顶点吸附多个对象了。
碰撞吸附
按下CTRL + SHIFT可以启用碰撞吸附。启用后,必须拖拽变换辅助工具中心的黄色小方框,而不是使用坐标轴控制工具。这样会让所选对象与光标下对象的碰撞体相对齐。
用顶点吸附或网格吸附来对齐网格在处理静态几何体时十分出色,但如果要处理动态对象,比如说互相穿透并在触碰后发射到空中的对象时,应该吸附到碰撞体而不是可见网格。
碰撞安置
如果有大量动态物理对象,或是十分复杂的关节系统,利用碰撞吸附来放置对象也许就不太合适。幸运的是,现在Unity编辑器中可以运行PhysX。它能模拟几秒的游戏时间,完成物理效果,然后保存完成时对象的位置信息。
下方是示例代码,代码中不仅有大量注释,还包含了调试信息绘制和一个菜单项。只要将其放入项目中的任何一个Editor文件夹里,便能看到一个新的GameMenu->Settle Physics菜单项。
示例代码:PhysicsSettler.cs

using UnityEngine; using UnityEditor; [InitializeOnLoad] class PhysicsSettler { static bool registered = false; static bool active = false; static Rigidbody[] workList; static bool cachedAutoSimulation; const float timeToSettle = 10f; static float activeTime = 0f; static PhysicsSettler() { if (!registered) { EditorApplication.update += Update; SceneView.onSceneGUIDelegate += OnSceneGUI; registered = true; } } [MenuItem("GameMenu/Settle Physics")] static void Activate() { if( !active ) { active = true; workList = Object.FindObjectsOfType<Rigidbody>(); cachedAutoSimulation = Physics.autoSimulation; activeTime = 0f; foreach( Rigidbody body in workList ) { body.WakeUp(); } } } [MenuItem("GameMenu/Settle Physics", true)] static bool checkMenu() { return !active; } static void Update() { if( active ) { activeTime += Time.deltaTime; Physics.autoSimulation = false; bool allSleeping = true; foreach( Rigidbody body in workList ) { if( body != null ) { allSleeping &= body.IsSleeping(); } } if( allSleeping || activeTime >= timeToSettle) { Physics.autoSimulation = cachedAutoSimulation; active = false; } else { Physics.Simulate(Time.deltaTime); } } } static void OnSceneGUI(SceneView sceneView) { if( active ) { Handles.BeginGUI(); Color cacheColor = GUI.color; GUI.color = Color.red; GUILayout.Label("Simulating Physics.", GUI.skin.box, GUILayout.Width(200)); GUILayout.Label(string.Format("Time Remaining: {0:F2}",(timeToSettle - activeTime)), GUI.skin.box, GUILayout.Width(200)); Handles.EndGUI(); foreach( Rigidbody body in workList ) { if( body != null ) { bool isSleeping = body.IsSleeping(); if( !isSleeping ) { GUI.color = Color.green; Handles.Label(body.transform.position, "SIMULATING"); } } } GUI.color = cacheColor; } } }
当了解了何时和为何使用网格、顶点吸附、碰撞吸附时,我们将在关卡设计工作流程获得更好的开发体验。推荐开发者们多多尝试这些工具,例如:对比轴心(Pivot)和中心(Center)模式的区别,或是比较全局(Global)和局部(Local)模式的不同,这样就可以知道什么模式更为适合。花费在布置虚拟对象的时间越少,那么在开发时得到的乐趣就越多。

转载于:https://www.cnblogs.com/xiaoahui/p/10995627.html

unity快捷放置物体操作相关推荐

  1. ARCore之路-放置物体

    一.可视化平面的另一种方式   在上一节中, 我们已经实现了可视化检测到的平面,运行后效果良好,通过代码,我们更清楚的了解到了ARCore是如何让检测到的平面可视化的,这对于我们理解ARCore的工作 ...

  2. Unity三种物体溶解方法

    Unity三种物体溶解方法 @[TOC](Unity三种物体溶解方法 效果展示 1. 利用Noise纹理进行溶解 shader要点 shader代码 2. 屏幕空间棋盘格 shader要点 shade ...

  3. Unity 判断两物体碰撞方向

    Unity 判断两物体碰撞方向 问题描述:游戏玩家可以在两个平面之间不断进行跳跃,且出现玩家顶着上面平面飞着走的情况. 问题原因:玩家碰撞体与平面不断进行碰撞体检测,导致游戏玩家可以不断进行跳跃. 解 ...

  4. Blender2.8入门教程(1): 物体操作、物体编辑、修改器Modifier

    目录 说明及效果 快捷键说明 1. 物体基本操作 2. 物体编辑 3. 调整视图 构建模型 A. 制作雪糕筒 1. 新建Cylinder Object 2. 调整Cylinder的大小 3. 进入Ed ...

  5. Unity 拖动UI物体(干货)

    Unity 拖动UI物体(超级干货) 首先我们先创建一个C#脚本 名字就叫MyMove 代码如下 using System.Collections; using System.Collections. ...

  6. unity 鼠标放置 ui_ui层次结构以及不常见但至关重要的任务放置在哪里

    unity 鼠标放置 ui Modern technology is complex. It's not always complicated though, thanks to our consta ...

  7. unity 多个物体围绕一个点生成圆形状

    unity 多个物体围绕一个点生成圆形状 适用于场景.UI 直接ctr c v 就可用 /// <summary> 需要被实例化的对象 </summary>public Gam ...

  8. Unity点击物体后,移动到物体所在位置

    Unity点击物体后,移动到物体所在位置 方法一:OnMouse检测(需要Collider组件) 脚本挂在被点击的物体上 using System.Collections.Generic; using ...

  9. 上海交通大学方浩树:人类行为理解与机器人物体操作

    不到现场,照样看最干货的学术报告! 嗨,大家好.这里是学术报告专栏,读芯术小编不定期挑选并亲自跑会,为大家奉献科技领域最优秀的学术报告,为同学们记录报告干货,并想方设法搞到一手的PPT和现场视频--足 ...

最新文章

  1. 零基础入门学习Python,我与python的第一次亲密接触后的感受!
  2. DropdownList绑定的两种方法
  3. 6种Python字符串反转方式
  4. 调用webservice时提示对操作的回复消息正文进行反序列化时出错
  5. Java向C++发送结构体
  6. .NET西安社区 [拥抱开源,又见 .NET] 第二次活动简报
  7. php怎么改标题,PHP – 如何更改包含header.php的页面标题?
  8. spring mvc学习(17)Intellij IDEA创建maven项目无java文件问题
  9. 秒速五厘米男主php,秒速五厘米最后男主从事的是什么工作?
  10. linux box 信息发布,使用Instantbox快速搭建一个开箱即用的Web端临时Linux系统
  11. Android打包出多个dex文件,一个APK中包含多个dex方法
  12. 【Computer Organization笔记10】单周期CPU设计:基于7条MIPS指令的数据通路
  13. Tensorflow——Tensorflow的用途、安装、数据流图
  14. Mac Homebrew命令报错/usr/local/Homebrew/Library/Homebrew/version.rb:368:in `initialize’
  15. 新浪Linux运维工程师面试真题曝光
  16. 莫名其妙的解决了MagicDraw中文问题
  17. JAVA基础——循环结构(while)
  18. vue weex 打电话
  19. 青龙面板关闭青龙二级验证
  20. 一个简单的方法修复ubuntu引导损坏

热门文章

  1. 数据库优化 - 多列索引经典题目
  2. 多对一(一对多)的双向关联
  3. 汉字和utf编码转换
  4. 转载:数据库表结构设计方法及原则
  5. 从马云看“穷男人”如何创业——看后信心倍增!
  6. mysql动态变量查询_MySQL将变量传递给动态查询
  7. 目标检测排行榜_3D领域重大突破!大华股份人工智能取得KITTI Object 3D车辆检测排行榜第一名...
  8. php filespl,PHP SPL--遍历目录
  9. php返回类中方法,php如何获取类中所有的方法名
  10. 挖一挖产品经理的核心竞争力