Unity编辑器下添加圆锥模型
网上资料已经有了,生成圆锥的模型的代码,但是没有保存生成的Mesh,运行会看不到圆锥的,所以这里将代码改了一下将生成的圆锥保存到工程的一个路径里,下面是生成圆锥的代码Mesh的代码。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;public class ConeCreatorEditor
{static string meshPrefabPath = "Assets/Models/Mesh/";//圆锥Mesh保存路径static string meshName = "Cone.asset";//圆锥[MenuItem("GameObject/3D Object/Cone", false, priority = 7)]public static void CreateCone(){SpawnConeInHierarchy();}private static void SetMesh(GameObject go){if (null == go)return;//仿Cylinder参数float myRadius = 0.5f;int myAngleStep = 20;Vector3 myTopCenter = new Vector3(0, 1, 0);Vector3 myBottomCenter = Vector3.zero;//构建顶点数组和UV数组Vector3[] myVertices = new Vector3[360 / myAngleStep * 2 + 2];//Vector2[] myUV = new Vector2[myVertices.Length];//这里我把锥尖顶点放在了顶点数组最后一个myVertices[0] = myBottomCenter;myVertices[myVertices.Length - 1] = myTopCenter;myUV[0] = new Vector2(0.5f, 0.5f);myUV[myVertices.Length - 1] = new Vector2(0.5f, 0.5f);//因为圆上顶点坐标相同,只是索引不同,所以这里循环一般长度即可for (int i = 1; i <= (myVertices.Length - 2) / 2; i++){float curAngle = i * myAngleStep * Mathf.Deg2Rad;float curX = myRadius * Mathf.Cos(curAngle);float curZ = myRadius * Mathf.Sin(curAngle);myVertices[i] = myVertices[i + (myVertices.Length - 2) / 2] = new Vector3(curX, 0, curZ);myUV[i] = myUV[i + (myVertices.Length - 2) / 2] = new Vector2(curX + 0.5f, curZ + 0.5f);}//构建三角形数组int[] myTriangle = new int[(myVertices.Length - 2) * 3];for (int i = 0; i <= myTriangle.Length - 3; i = i + 3){if (i + 2 < myTriangle.Length / 2){myTriangle[i] = 0;myTriangle[i + 1] = i / 3 + 1;myTriangle[i + 2] = i + 2 == myTriangle.Length / 2 - 1 ? 1 : i / 3 + 2;}else{//绘制锥体部分,索引组起始点都为锥尖myTriangle[i] = myVertices.Length - 1;//锥体最后一个三角形的中间顶点索引值为19myTriangle[i + 1] = i == myTriangle.Length - 3 ? 19 : i / 3 + 2;myTriangle[i + 2] = i / 3 + 1;}}//构建meshMesh myMesh;if (!File.Exists(meshPrefabPath + meshName)){myMesh = new Mesh();myMesh.name = "Cone";myMesh.vertices = myVertices;myMesh.triangles = myTriangle;myMesh.uv = myUV;myMesh.RecalculateBounds();myMesh.RecalculateNormals();myMesh.RecalculateTangents();if (!Directory.Exists(meshPrefabPath))Directory.CreateDirectory(meshPrefabPath);AssetDatabase.CreateAsset(myMesh, meshPrefabPath + meshName);AssetDatabase.SaveAssets();AssetDatabase.Refresh();}else{myMesh = AssetDatabase.LoadAssetAtPath<Mesh>(meshPrefabPath + meshName);}//分配meshMeshFilter mf = go.AddComponent<MeshFilter>();mf.mesh = myMesh;//分配材质MeshRenderer mr = go.AddComponent<MeshRenderer>();Material myMat = new Material(Shader.Find("Standard"));mr.sharedMaterial = myMat;}private static void SpawnConeInHierarchy(){Transform[] selections = Selection.GetTransforms(SelectionMode.TopLevel | SelectionMode.ExcludePrefab);if (selections.Length <= 0){GameObject cone = new GameObject("Cone");cone.transform.position = Vector3.zero;cone.transform.rotation = Quaternion.identity;cone.transform.localScale = Vector3.one;//设置创建操作可撤销Undo.RegisterCreatedObjectUndo(cone, "Undo Creating Cone");SetMesh(cone);return;}foreach (Transform selection in selections){GameObject cone = new GameObject("Cone");cone.transform.SetParent(selection);cone.transform.localPosition = Vector3.zero;cone.transform.localRotation = Quaternion.identity;cone.transform.localScale = Vector3.one;//设置创建操作可撤销Undo.RegisterCreatedObjectUndo(cone, "Undo Creating Cone");SetMesh(cone);}}
}
将代码放到Editor文件夹下,然后再右键找到创建模型cone;
Unity编辑器下添加圆锥模型相关推荐
- Unity 编辑器下运行没有声音
Unity 编辑器下运行没有声音 一.环境 Mac 二.问题 游戏场景中导入一个音频文件运行时没有声音 三.原因 按下去运行时就没有声音了 四.解题过程 1.Mac本身似乎没有能够单独控制某个软件的音 ...
- Unity3D中项目在Unity编辑器下正常运行打包成功exe后无法正常运行
Unity3D中项目在Unity编辑器下正常运行打包成功exe后无法正常运行 一.遇到的情况描述: 项目中涉及到了文件读取的相关操作 项目在Unity下能够正常获取到文件信息并且不报错 项目能够成功打 ...
- Unity编辑器下Console面板查看完整打印日志
最近在做客户端遇到这样一个问题,对于Console面板上的打印日志,每条打印的内容是有上限的,比如我有一个包含100个国王信息的消息打印日志 往下拖动 划到底也只是显示了63条国王信息. 解决方法: ...
- Unity编辑器下红点树实现方案
背景 开发过程中,经常会对装备,背包,邮件等按钮设置红点状态,内部的查看状态,影响外部红点状态,这时候加入红点树方案,会方便,快捷,易于管理.上篇文章的方案不是最佳,刚好发现一种比较不错的方案. 操作 ...
- 如何在Unity编辑器中添加你自己的工具
在这篇教程中你会学习如何扩展你的Unity3D编辑器,以便在你的项目中更好的使用它.你将会学习如何绘制你自己的gizmo,用代码来实现创建和删除物体,创建编辑器窗口,使用组件,并且允许用户撤销他们所作 ...
- 实现Unity编辑器模式下的旋转
最近在做一个模型展示的项目,我的想法是根据滑动屏幕的x方向差值和Y方向的差值,来根据世界坐标下的X轴和Y轴进行旋转,但是实习时候总是有一些卡顿.在观察unity编辑器下的旋转之后,发现编辑器下的旋转非 ...
- 【Unity3D】使用 FBX 格式的外部模型 ( 向 Unity 中添加 FBX 模型 | 向 Scene 场景中添加 FBX 模型 | 3D 物体渲染 | 3D 物体材质设置 )
文章目录 一.向 Unity 中添加 FBX 模型 二.向 Scene 场景中添加 FBX 模型 三.3D 物体渲染 四.3D 物体材质设置 一.向 Unity 中添加 FBX 模型 Unity 中使 ...
- 【Unity3D】Unity 编辑器窗口布局 ( 创建 Unity3D 项目 | 添加物体 | 层级窗口 | 场景窗口 | 游戏窗口 | 属性窗口 | 项目窗口 | 控制台窗口 | 窗口位置修改 )
文章目录 一.在 Unity Hub 中创建 Unity 2020 编辑器版本的 Unity3D 项目 二.Unity 编辑器窗口布局 1.添加物体 2.菜单栏和工具栏 3.Hierarchy 层级窗 ...
- UNITY编辑器模式下static变量的坑
UNITY编辑器模式下static变量的坑 在unity中写编辑器扩展工具,如在编辑器中加个菜单,点击这个菜单项时执行打包功能. 类如下,其中的静态变量,如果每次进来不清空,则LIST会越来越大,打包 ...
最新文章
- sysenter Hook
- python 类中方法的动态特性
- 图的m着色问题pascal程序
- android通讯录上传服务器,Android 实现读取通讯录并上传服务器
- 锁大全与 GDB调试
- 《TCP/IP详解》学习笔记(三):IP协议、ARP协议
- SSH远程管理OpenSSH使用
- 根目录_Ubuntu的根目录下的var/log/apt突然爆满,电脑卡死
- 手机modem开发(4)---高通QXDM抓modem log
- 正则表达式那些事儿(一)
- 大华平台linux命令,大华平台软件简介.docx
- PHPWAMP开启SSL,PHPWAMP配置ssl证书
- java中object类对象转换成int对象的两种方法
- iOS闪退日志的收集和解析
- 银海系统服务器登录不上,解决登录问题 - Skype for Business | Microsoft Docs
- 华为如何关闭系统更新提示
- 基于小波分解与LSTM的城市轨道短时客流预测
- 美拉德不做鬼佬BBQ,只做中国餐饮文化
- Leetcode跳跃游戏
- sqlite3 实现批量处理 sql语句,避免频繁操作数据库,从而影响性能的问题
热门文章
- 创业后每天干的事情至少 90% 是贴着一线的
- jQuery实现html的table表的th和td标签的显示和隐藏
- java大型多店铺商城源码 java多店铺商城系统b2b2c
- 鸿蒙os应用打包,鸿蒙OS基础,DevEco Studio 生成签名文件并打包
- jasperreport生成html,解决JasperReport 导出 Html 时图片显示问题 | 谢邵虎的博客
- 广东高中生多少人_18岁中国小伙单场70分,号称广东最强高中生
- 高通WLAN框架学习(33)-- WLAN/P2P get IOCTLs(iwpriv)命令大全
- ios 视频播放代码Demo
- 名词解释(普通二极管)
- 你知道文字转语音软件有哪些吗