网上资料已经有了,生成圆锥的模型的代码,但是没有保存生成的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编辑器下添加圆锥模型相关推荐

  1. Unity 编辑器下运行没有声音

    Unity 编辑器下运行没有声音 一.环境 Mac 二.问题 游戏场景中导入一个音频文件运行时没有声音 三.原因 按下去运行时就没有声音了 四.解题过程 1.Mac本身似乎没有能够单独控制某个软件的音 ...

  2. Unity3D中项目在Unity编辑器下正常运行打包成功exe后无法正常运行

    Unity3D中项目在Unity编辑器下正常运行打包成功exe后无法正常运行 一.遇到的情况描述: 项目中涉及到了文件读取的相关操作 项目在Unity下能够正常获取到文件信息并且不报错 项目能够成功打 ...

  3. Unity编辑器下Console面板查看完整打印日志

    最近在做客户端遇到这样一个问题,对于Console面板上的打印日志,每条打印的内容是有上限的,比如我有一个包含100个国王信息的消息打印日志 往下拖动 划到底也只是显示了63条国王信息. 解决方法: ...

  4. Unity编辑器下红点树实现方案

    背景 开发过程中,经常会对装备,背包,邮件等按钮设置红点状态,内部的查看状态,影响外部红点状态,这时候加入红点树方案,会方便,快捷,易于管理.上篇文章的方案不是最佳,刚好发现一种比较不错的方案. 操作 ...

  5. 如何在Unity编辑器中添加你自己的工具

    在这篇教程中你会学习如何扩展你的Unity3D编辑器,以便在你的项目中更好的使用它.你将会学习如何绘制你自己的gizmo,用代码来实现创建和删除物体,创建编辑器窗口,使用组件,并且允许用户撤销他们所作 ...

  6. 实现Unity编辑器模式下的旋转

    最近在做一个模型展示的项目,我的想法是根据滑动屏幕的x方向差值和Y方向的差值,来根据世界坐标下的X轴和Y轴进行旋转,但是实习时候总是有一些卡顿.在观察unity编辑器下的旋转之后,发现编辑器下的旋转非 ...

  7. 【Unity3D】使用 FBX 格式的外部模型 ( 向 Unity 中添加 FBX 模型 | 向 Scene 场景中添加 FBX 模型 | 3D 物体渲染 | 3D 物体材质设置 )

    文章目录 一.向 Unity 中添加 FBX 模型 二.向 Scene 场景中添加 FBX 模型 三.3D 物体渲染 四.3D 物体材质设置 一.向 Unity 中添加 FBX 模型 Unity 中使 ...

  8. 【Unity3D】Unity 编辑器窗口布局 ( 创建 Unity3D 项目 | 添加物体 | 层级窗口 | 场景窗口 | 游戏窗口 | 属性窗口 | 项目窗口 | 控制台窗口 | 窗口位置修改 )

    文章目录 一.在 Unity Hub 中创建 Unity 2020 编辑器版本的 Unity3D 项目 二.Unity 编辑器窗口布局 1.添加物体 2.菜单栏和工具栏 3.Hierarchy 层级窗 ...

  9. UNITY编辑器模式下static变量的坑

    UNITY编辑器模式下static变量的坑 在unity中写编辑器扩展工具,如在编辑器中加个菜单,点击这个菜单项时执行打包功能. 类如下,其中的静态变量,如果每次进来不清空,则LIST会越来越大,打包 ...

最新文章

  1. sysenter Hook
  2. python 类中方法的动态特性
  3. 图的m着色问题pascal程序
  4. android通讯录上传服务器,Android 实现读取通讯录并上传服务器
  5. 锁大全与 GDB调试
  6. 《TCP/IP详解》学习笔记(三):IP协议、ARP协议
  7. SSH远程管理OpenSSH使用
  8. 根目录_Ubuntu的根目录下的var/log/apt突然爆满,电脑卡死
  9. 手机modem开发(4)---高通QXDM抓modem log
  10. 正则表达式那些事儿(一)
  11. 大华平台linux命令,大华平台软件简介.docx
  12. PHPWAMP开启SSL,PHPWAMP配置ssl证书
  13. java中object类对象转换成int对象的两种方法
  14. iOS闪退日志的收集和解析
  15. 银海系统服务器登录不上,解决登录问题 - Skype for Business | Microsoft Docs
  16. 华为如何关闭系统更新提示
  17. 基于小波分解与LSTM的城市轨道短时客流预测
  18. 美拉德不做鬼佬BBQ,只做中国餐饮文化
  19. Leetcode跳跃游戏
  20. sqlite3 实现批量处理 sql语句,避免频繁操作数据库,从而影响性能的问题

热门文章

  1. 创业后每天干的事情至少 90% 是贴着一线的
  2. jQuery实现html的table表的th和td标签的显示和隐藏
  3. java大型多店铺商城源码 java多店铺商城系统b2b2c
  4. 鸿蒙os应用打包,鸿蒙OS基础,DevEco Studio 生成签名文件并打包
  5. jasperreport生成html,解决JasperReport 导出 Html 时图片显示问题 | 谢邵虎的博客
  6. 广东高中生多少人_18岁中国小伙单场70分,号称广东最强高中生
  7. 高通WLAN框架学习(33)-- WLAN/P2P get IOCTLs(iwpriv)命令大全
  8. ios 视频播放代码Demo
  9. 名词解释(普通二极管)
  10. 你知道文字转语音软件有哪些吗