首页 > 其他分享 >网格制作圆柱

网格制作圆柱

时间:2023-01-06 10:58:35浏览次数:40  
标签:圆柱 vh float 网格 num new white 制作 public

 

 

 

 

 

 

 

 

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class YuanZhu : MonoBehaviour
{

public MeshFilter meshFilter;
public MeshRenderer meshRenderer;
public int num = 10;//角的数量
public float r = 10;
public Texture texture;
public Action<float> action;
public void SetAction(Action<float> action)
{
this.action = action;
}

// Start is called before the first frame update
void Start()
{
meshFilter = gameObject.AddComponent<MeshFilter>();
meshRenderer = gameObject.AddComponent<MeshRenderer>();
gameObject.AddComponent<BoxCollider>();

Mesh mesh = new Mesh();
VertexHelper vh = new VertexHelper();
//添加圆心
vh.AddVert(Vector3.up, Color.white, new Vector2(0.5f, 0.5f));
//计算每个角的弧度
float ang = (2 * Mathf.PI) / num;
//存储上盖顶点坐标
List<Vector3> upv = new List<Vector3>();

for (int i = 0; i < num; i++)
{
float x = Mathf.Sin(i * ang) * r;//Sin算x;
float z = Mathf.Cos(i * ang) * r;//Cos算y;
float uvx = (x + r) / (2 * r);//算UVx点
float uvy = (z + r) / (2 * r);//算UVy点
vh.AddVert(new Vector3(x, 1, z), Color.white, new Vector2(uvx, uvy));
upv.Add(new Vector3(x, 1, z));
//添加绘制
if (i == 0)
{
vh.AddTriangle(0, num, 1);

}
else
{
vh.AddTriangle(0, i, i + 1);
}
}
//前面上盖已经用过Num+1个顶点了不能再用了
int after = num + 1;
//下盖
//存储下盖顶点坐标
List<Vector3> downv = new List<Vector3>();
//添加圆心
vh.AddVert(Vector3.down, Color.white, new Vector2(0.5f, 0.5f));


for (int i = 0; i < num; i++)
{
float x = Mathf.Sin(i * ang) * r;//Sin算x;
float z = Mathf.Cos(i * ang) * r;//Cos算y;
float uvx = (x + r) / (2 * r);//算UVx点
float uvy = (z + r) / (2 * r);//算UVy点
vh.AddVert(new Vector3(x, -1, z), Color.white, new Vector2(uvx, uvy));
downv.Add(new Vector3(x, -1, z));
//添加绘制
if (i == 0)
{
vh.AddTriangle(0 + after, 1 + after, num + after);

}
else
{
vh.AddTriangle(0 + after, i + 1 + after, i + after);
}
}
//画边
//上盖和下盖用过的不能再用
int after2 = (num + 1) * 2;
for (int i = 0; i < num; i++)
{
vh.AddVert(downv[i], Color.white, new Vector2((float)i / (float)num, 0));
vh.AddVert(upv[i], Color.white, new Vector2((float)i / (float)num, 1));
//添加完一圈再补充两个,让边闭合
if (i == num - 1)
{
vh.AddVert(downv[0], Color.white, new Vector2(1, 0));
vh.AddVert(upv[0], Color.white, new Vector2(1, 1));
}
vh.AddTriangle(i * 2 + after2, (i + 1) * 2 + 1 + after2, i * 2 + 1 + after2);
vh.AddTriangle(i * 2 + after2, (i + 1) * 2 + after2, (i + 1) * 2 + 1 + after2);

}

//顶点助手转网格
vh.FillMesh(mesh);

mesh.RecalculateNormals();
gameObject.GetComponent<MeshFilter>().mesh = mesh;

Material material = new Material(Shader.Find("Standard"));
material.mainTexture = texture;
gameObject.GetComponent<MeshRenderer>().material = material;
 

// Update is called once per frame
void Update()
{

}


}

标签:圆柱,vh,float,网格,num,new,white,制作,public
From: https://www.cnblogs.com/qinhuanghan5/p/17029780.html

相关文章

  • 网格制作方形
    usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEngine.UI;publicclassRectangular:Graphic//这个类加上后自动添加渲染......
  • 制作正方体
    usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEngine.UI;publicclassTheCube:MonoBehaviour{publicMeshFilterme......
  • 程序转制作人——游戏设计课程导论
    手机游戏中的社交互动与任务剧情一个游戏数值策划的自白:我所理解的数值工作《刀塔传奇》付费设计分析​​如何设计出令人惊叹的关卡:来自策划、美术与程序的标准​​......
  • Ventoy制作启动盘和使用VMware测试启动盘(论文版)
    -1Ventoy1.1 Ventoy是什么Ventoy是可用于制作启动U盘的开源工具,在占用少量引导分区容量后,其他空间依旧可以正常当一般的U盘读写文件。它的最大特点是只要将iso、win......
  • 站酷基于服务网格ASM的生产实践
    作者:服务网格ASM背景介绍站酷(ZCOOL)2006年8月创立于北京,深耕设计领域多年,聚集了1500万设计师、摄影师、插画师、艺术家、创意人,在设计创意群体中具有一定的影响力与号召......
  • 圣诞树拼图游戏unity制作
    2022年圣诞节到来啦,很高兴这次我们又能一起度过~一、前言提示:使用unity来制作一个拼图游戏,图片便是圣诞树。二、创意名圣诞树拼图游戏三、效果展示圣诞树拼图游戏最终效果。......
  • Unity小地图Minimap制作全面功能介绍篇
    本系列文章将讲述如何制作小地图。功能如下:  小地图的局部放大地图,缩小功能。小地图展开成为大地图,以及与大地图的互相切换  大地图的人物图标跟随角色旋转和移动 ......
  • Unity制作聊天室功能
    用untiy作客户端、用VS的控制台程序来做服务器。首先是服务器端的代码,分两个类一个Program,一个ForClient类。分别如下:usingSystem.Net.Sockets;usingSystem.Collections.......
  • 噩梦系列篇之Player之激光制作及射击完成
    下面完成player的射击功能。该功能设定为自动开枪,也就是用计时器来开枪。。。。首先给player加入一个脚本Gunshoot如图:然后要给player在射击的时候加入光效,很简单,在枪口的位......
  • Unity和Easy AR制作一个AR的APP
    这个不是什么正规的项目。。。就是觉得AR好玩,研究了一下,很早之前就玩过了,现在再做的时候竟然忘记了。看来还是要记录一下的。。。功能就是:用手机扫描一个图片,然后会出现一个......