以下.cs需要放置在名称为 Editor 的文件夹下
EditorFlipMeshNormals.cs

#if UNITY_EDITORusing UnityEditor;
using UnityEngine;/// <summary>
/// 在 Hierarchy 视图对象的快捷菜单中增加 Flip Mesh Normals(反转网格法线)项
/// </summary>
public class EditorFlipMeshNormals : Editor {/// <summary> 翻转网格的法线 </summary>private static void FlipMeshNormals (Mesh mesh) {int[] triangles = mesh.triangles;for (int i = 0, len = triangles.Length; i < len; i += 3) {// 交换三角形的首尾索引int t = triangles[i];triangles[i] = triangles[i + 2];triangles[i + 2] = t;}mesh.triangles = triangles;}/// <summary> 翻转多个游戏对象网格的法线 </summary>private static void FlipMeshNormals (GameObject[] gameObjects) {for (int i = 0, len = gameObjects.Length; i < len; i++) {GameObject go = gameObjects[i];Mesh mesh = null;SkinnedMeshRenderer skinnedMeshRenderer = go.GetComponent<SkinnedMeshRenderer>();if (skinnedMeshRenderer) {mesh = skinnedMeshRenderer.sharedMesh;} else {MeshFilter meshFilter = go.GetComponent<MeshFilter>();if (meshFilter) {mesh = meshFilter.sharedMesh;}}if (mesh) {string path = AssetDatabase.GetAssetPath(mesh);// 是否为 Assets 文件夹下的资源(Assets 文件夹下的资源才能编辑,避免编辑到 Unity 的内置资源的网格)bool isAssetFolder = path.IndexOf("Assets/") > -1;if (isAssetFolder) {FlipMeshNormals(mesh);}}}}/// <summary> 验证所选择的游戏对象有网格时菜单才可用(不计算子级) </summary>[MenuItem("GameObject/Flip Mesh Normals", true)]private static bool ValidateFlipMeshNormalsOnGameObject () {bool isEnableMenuItem = false;GameObject[] gameObjects = Selection.gameObjects;for (int i = 0, len = gameObjects.Length; i < len; i++) {GameObject go = gameObjects[i];Mesh mesh = null;SkinnedMeshRenderer skinnedMeshRenderer = go.GetComponent<SkinnedMeshRenderer>();if (skinnedMeshRenderer) {mesh = skinnedMeshRenderer.sharedMesh;} else {MeshFilter meshFilter = go.GetComponent<MeshFilter>();if (meshFilter) {mesh = meshFilter.sharedMesh;}}if (mesh) {string path = AssetDatabase.GetAssetPath(mesh);// 是否为 Assets 文件夹下的资源(Assets 文件夹下的资源才能编辑,避免编辑到 Unity 的内置资源的网格)bool isAssetFolder = path.IndexOf("Assets/") > -1;if (isAssetFolder) {isEnableMenuItem = true;break;}}}return isEnableMenuItem;}[MenuItem("GameObject/Flip Mesh Normals", false, 11)]private static void FlipMeshNormalsOnGameObject () {FlipMeshNormals(Selection.gameObjects);}}
#endif

Unity 反转法线,在 Hierarchy 视图对象的快捷菜单中增加 Flip Mesh Normals(反转网格法线)项...相关推荐

  1. 蒙皮骨骼动画 unity_在Unity中沿航路点设置蒙皮网格动画

    蒙皮骨骼动画 unity This post is a guide to importing a skinned mesh with a looping animation and then anim ...

  2. Unity 3D Hierarchy视图

    Unity 3D 的 Hierarchy 视图包含了每一个当前场景的所有游戏对象(GameObject),如下图所示.其中一些是资源文件的实例,如 3D 模型和其他预制物体(Prefab)的实例,可以 ...

  3. Unity Hierarchy视图介绍

    Unity Hierarchy视图介绍 题外话:写文章的习惯又兜兜转转捡起来了,希望能帮到更多人吧.. 1.Hierarchy视图总述 如图所示,打开新的Unity项目or创建一个新的Scene时,默 ...

  4. Unity实用小工具或脚本——可折叠伸缩的多级(至少三级)内容列表(类似于Unity的Hierarchy视图中的折叠效果)

    目录 一.前言 二.实现 2.1.创建ScrollView 2.2.制作层级预设体BaseLevelPartObj 2.3.设置该预设体的初始化处理方法 2.4.读取Hierarchy的内容并创建UI ...

  5. C#开发Unity游戏教程之Scene视图与脚本的使用

    C#开发Unity游戏教程之Scene视图与脚本的使用 Unity中Scene视图的快捷操作 Scene视图是开发者开发游戏时,操作最频繁的视图.因为一旦一个游戏对象被添加到游戏的场景中,就需要首先使 ...

  6. Hierarchy视图里的Transform和Camera组件

    Hierarchy视图里的Transform和Camera组件 在Hierarchy视图里,选中Camera,然后在Inspector视图里查看其各组件,如图1-8所示.对于Transform和Cam ...

  7. Unity 2.Space Shooter(碰撞器Collider,WebGL,刚体中属性,(定时)实例化、销毁游戏对象,触碰OnTriggerEnter/Exit,爆炸效果,音频,文字,定时调方法)

    目录 项目介绍 WebGL发布 游戏对象设置 灯光.相机 背景 移动游戏对象 Debug 制作子弹 射击动作 清理离开边界的游戏对象 制作危险物 添加爆炸,移动小行星,作为预制件 创建游戏控制器 循环 ...

  8. Android应用程序窗口(Activity)的视图对象(View)的创建过程分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8245546 从前文可知道,每一个Activit ...

  9. java 视图对象转换_java-如何从onItemSelected()方法返回的视图对象...

    onItemSelected()方法应该返回一个View作为其对象之一,在这种情况下,它是一个TextView,通过在Logcat中获取该对象的描述和哈希值进行了验证,因此该View实际上是一个Tex ...

  10. adf4351使用_使用ADF绑定创建视图对象行CreateInsert操作

    adf4351使用 在这篇简短的文章中,我将重点介绍与在任务流中创建新记录的一种非常常见的方法有关的一个小陷阱. 让我们考虑一个简单的任务流程示例,该任务流程创建一个新的VO行,如果用户单击" ...

最新文章

  1. MongoDB之副本集
  2. java读取Resources下文件
  3. 测试结果表明开车打手机比酒后开车更危险
  4. php命名空间更麻烦了,紧急求教PHP命名空间问题,12:10了我还没有吃饭呢,各位帮忙!!...
  5. APT 组织将目标锁定Linux
  6. flutter中的列表组件
  7. HFSS脚本建模入门
  8. 韩立刚《计算机网络》| 第6章 应用层
  9. 开源iTunes替代品– aTunes
  10. 陈年老调-log4j(分环境配置+动态修改)
  11. 我的世界java版和基岩版对比_我的世界:java版和基岩版你更看好哪个?未来的发展,谁会更好...
  12. 解决Android手机开发者选项经常自动关闭的问题
  13. 操作系统基础教程——第六章课后答案
  14. python 条形图 负值_使用python matplotlib获取正负值的堆积条形图
  15. 基于Xposed框架截取安卓手机应用数据信息
  16. 触类旁通Elasticsearch:关联
  17. 常用的http响应状态码大全
  18. android Stopwatch实例
  19. Apollo代码学习(六)—模型预测控制(MPC)
  20. 凉了7年的快播,竟然以这种方式登上排行榜第一

热门文章

  1. 网络Excel平台(myEXCEL.net)企业应用
  2. 宏基d260linux系统,千呼万唤始出来 宏碁D260新本仅售2499
  3. React 360 全景VR交互项目实战
  4. vscode vue代码格式化无效详细解决方案
  5. NIC不变量检测对抗样本
  6. 身份证二要素,帮你轻松搞定实名认证
  7. navigate实现页面跳转及传参
  8. 提取小米手机系统完整包BOOT,及ROOT!
  9. Windows Server2012搭建Git服务器
  10. Xiangqi UVA - 1589