unity3d 去除阴影中如何去除掉一个GameObject的MeshRenderer

unity3d基础(1)
任何一个模型都是由许多网格面组成的,而面又是由许多三角形组成的。
操作环境:Win7操作系统、Unity3D 4.0
创建网格面的核心就是为其添加2个组件:Mesh Renderer(网格渲染器)和Mesh Filter(网格过滤器)。
添加组件的方法有2种:
(Ⅰ)选择一个游戏对象,然后执行Component→Mesh→Mesh Filter 和Mesh Renderer。
(Ⅱ)通过脚本实现:
【理论分析】
由于网格面是由三角形组成的,所以我们有必要知道三角的三个顶点的位置。数组mesh.vertices就是用于存储三角形顶点坐标。
当顶点数超过3个的时候,我们连接点的顺序不同,就会绘制出不同形状的图形,所以我们必须要获得我们想要的连接点的顺序。数组mesh.triangles就是用来记录连接三角形的顺序的。由于每绘制一个三角形需要知道其三个顶点的顺序,那么绘制n个三角形就需要知道3*n个点的顺序。即数组mesh.triangles的长度是3的倍数。
如上图,如果我们已知顶点的坐标和顺序如上,怎样绘制出这样的图形?
已知5个点,选择3个点来连接,将其全部连接完有很多种方式,这里我就不计算了~嘻嘻嘻。但是不是每一种方式都能连接成上面的图形的。例如:(0,1,2),(1,2,3),(2,3,4)就无法完成上面的图形。所以我们必须要获得三角形顶点的索引顺序。完成上面图形我采用的顺序:(0,1,2),(0,2,3),(0,3,4)。大家也可以使用其他的顺序。那么我的mesh.triangles=new int[]{0,1,2,0,2,3,0,3,4};而mesh.vertices的值就是点的坐标了。
&【案例】拖动鼠标来绘制一个圆弧
【效果图】
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:56450次
积分:1035
积分:1035
排名:千里之外
原创:37篇
转载:58篇
(1)(1)(3)(3)(2)(4)(3)(3)(3)(2)(5)(5)(4)(4)(1)(2)(2)(1)(4)(13)(4)(11)(8)(6)Unity中为什么合并了 SkinnedMeshRenderer后内存会一直增加? - 知乎7被浏览220分享邀请回答blog.csdn.net/qinyuanpei/article/details/26 条评论分享收藏感谢收起//残影实现
using UnityEusing System.Cusing System.Collections.G//引入使用List的命名空间
public class CanYing : MonoBehaviour {
public float interval = 0.1f;//残影的时间间隔
public float lifeCycle = 2.0f;//残影的生存周期
float lastCombinedTime = 0.0f;//上一次组合时间
MeshFilter[] meshFilters =
MeshRenderer[] meshRenderers =
SkinnedMeshRenderer[] skinedMeshRenderers =
List&GameObject& objs = new List&GameObject&();
// Use this for initialization void Start ()
meshFilters = gameObject.GetComponentsInChildren&MeshFilter&();
skinedMeshRenderers = gameObject.GetComponentsInChildren&SkinnedMeshRenderer&(); }
void OnDisable()
foreach (GameObject go in objs)
DestroyImmediate(go);//销毁go
objs.Clear();
} // Update is called once per frame void Update ()
if (Time.time - lastCombinedTime & interval) //控制间隔时间
lastCombinedTime = Time.
for (int i = 0; skinedMeshRenderers != null && i & skinedMeshRenderers.L ++i) //遍历skinedMeshRenderers
Mesh mesh = new Mesh(); //生成一个新的mesh
skinedMeshRenderers[i].BakeMesh(mesh); //烘焙到新生成的mesh
GameObject go = new GameObject(); //生成新的GameObject
go.hideFlags = HideFlags.HideAndDontS //设置属性隐藏不保存
MeshFilter meshFilter = go.AddComponent&MeshFilter&(); //添加MeshFilter
meshFilter.mesh = //将新添加的MeshFilter设置为mesh
MeshRenderer meshRenderer = go.AddComponent&MeshRenderer&();//添加MeshRenderer
meshRenderer.material = skinedMeshRenderers[i].//将新添加的MeshRenderer的材质设置为获取到的材质
InitFadeInObj(go, skinedMeshRenderers[i].transform.position,
skinedMeshRenderers[i].transform.rotation, lifeCycle);//淡入淡出
for (int i = 0; meshFilters != null && i & meshFilters.L ++i)
GameObject go = Instantiate(meshFilters[i].gameObject) as GameO
InitFadeInObj(go, meshFilters[i].transform.position, meshFilters[i].transform.rotation, lifeCycle);
//新生成GameObject并且将其设置淡入淡出
private void InitFadeInObj(GameObject go, Vector3 position, Quaternion rotation, float lifeCycle)
go.hideFlags = HideFlags.HideAndDontS //设置属性隐藏不保存
go.transform.position = //得到position
go.transform.rotation = //得到rotation
FadInOut fi = go.AddComponent&FadInOut&();//添加FadInOut脚本
fi.lifeCycle = lifeC//复制生命周期
objs.Add(go);//放入列表中
//淡入淡出效果实现
using UnityEusing System.C
public class FadInOut : MonoBehaviour {
public float lifeCycle = 2.0f;
float startT
Material mat =
// Use this for initialization void Start () {
startTime = Time.//得到启动时间
MeshRenderer meshRenderer = GetComponent&MeshRenderer&();
if (!meshRenderer || !meshRenderer.material)
base.enabled =//为空的话 禁用
mat = meshRenderer.//得到材质
ReplaceShader();//替换Shader
// Update is called once per frame void Update () {
float time = Time.time - startT//获取运行时间
if (time & lifeCycle)
DestroyImmediate(gameObject);//达到设置时间,销毁
float remainderTime = lifeCycle -//得到剩余时间
//if(mat.HasProperty("_Color"))
得到mat中是否有这个属性
Color col = mat.GetColor("_Color");//得到材质中的shader中的_Color颜色
col.a = remainderT//设置Alpha(剩余时间越小 Alpha值越小)
mat.SetColor("_Color", col);//将修改后的颜色设置回去
col = mat.GetColor("_OutlineColor");//原理同上
col.a = remainderT
mat.SetColor("_OutlineColor", col);
private void ReplaceShader()
if (mat.shader.name.Equals("Custom/Toon/Basic Outline"))//检查当前shader名字是否是& &
mat.shader = Shader.Find("Custom/Toon/Basic Outline Replace");//如果是的话 替换shader
else if (mat.shader.name.Equals("Custom/Toon/Basic"))
mat.shader = Shader.Find("Custom/Toon/Basic Replace");
Debug.LogError("Can't find target shader");
阅读(...) 评论()请教LineRender画的线怎么消除【unity3d吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:74,561贴子:
请教LineRender画的线怎么消除收藏
我在脚本里写的当两个物体距离小于一个值时产生一条连接它们的线,但当他们的距离变大时产生的线还在请问怎么消除
达内unity3d培训全程&实战教学&,unity3d金牌讲师授课.免费unity3d课程试听中!到达内unity3d学院学习unity3d,只需4个月速成unity3d游戏工程师.
Vector3.Distance()
void Update(){if(Vector3.Distance(LineRenderGameObject.transform.position,Cube.transform.position) & 30){Vector3 v0=LineRenderGameObject.transform.Vector3 v1=Cube.transform.lineRenderer.SetPosition(0,v0);lineRenderer.SetPosition(1,v1);}}我的意思是当他俩距离小于30的时候不是lineRender画了一条连接他们的线么 但移动他们距离大于30后这条线还存在场景里 当距离大于30该怎么消除 @5656
获取linerender组件然后enable改为false
楼主怎么解决的啊?
登录百度帐号推荐应用

我要回帖

更多关于 unity3d 去掉启动画面 的文章

 

随机推荐