unity3d怎么通过脚本改变颜色
答案:2 悬赏:50 手机版
解决时间 2021-03-21 23:10
- 提问者网友:杀手的诗
- 2021-03-21 01:31
unity3d怎么通过脚本改变颜色
最佳答案
- 五星知识达人网友:上分大魔王
- 2021-03-21 03:04
定义renderer。
然后用不同的材质表示不同的颜色。
比如红色。你建个材质,改成红色,定义material1;
绿色,定义material2;
然后获取物体的renderer,renderer.matertal=material1;
这样就是让该物体变成红色。
然后用不同的材质表示不同的颜色。
比如红色。你建个材质,改成红色,定义material1;
绿色,定义material2;
然后获取物体的renderer,renderer.matertal=material1;
这样就是让该物体变成红色。
全部回答
- 1楼网友:一袍清酒付
- 2021-03-21 04:14
c#是一种非常典雅而强大的编程语言,它的dot-syntax命名法则基于java,所以如果你具有java编程背景将感到非常舒服。不过区别也还是有一些的,最明显的应该是在c#中属性以及方法的名称约定俗称都是以大写字母开头的。 c#的特性列表实在太长,这使得actionscript实在是看起来有些相形见绌。 c#与actionscript从本质上是极为相似的。
运算符重载
它允许程序员为+-*/这样的运算符定义特殊的行为。它的优势在向量加法运算中就可以明显体现出来,在actionscript中,要计算向量之和,你需要书写类似下面的代码:
view sourceprint?1.var c:vector3d = a.add(b);
复制代码
在多于两个向量相加时代码的易读性会变得很差。如果在c#中重载+运算符,代码将会变成下面的形式:
view sourceprint?1.vector3 c = a + b;
复制代码
在unity3d中所有向量的运算符都进行了重载。如果你希望自己实现,运算符重载也非常简单,对于上面的例子,代码大致是下面这个样子的:
view sourceprint?1.public static vector3 operator + (a:vector3, b:vector3) {
return new vector3(a.x + b.x, a.y + b.y, a.z + b.z);
}
复制代码
这其中有一些简单的规则:运算符函数永远都是静态的(static),并且需要返回它所定义的对象类型。不过它的参数可以是任何类型的,因此完全可以重载加法或乘法运算符使其支持向量与浮点数或者与矩阵的运算——而这一切都要得益于c#对运算符重载功能的支持。
方法重载
方法重载可以允许我们定义多个同名但参数不同的方法。它不但对一般方法起作用而且也可以应用于构造函数——如果有多种途径来初始化一个对象,那么你可以为每一种途径定义一个专有的构造函数。而且方法重载同样可以应用于运算符方法,这一点上面已经提到了。
在unity3d api中一个关于运算符重载最好的例子就是’transform.rotate()’这个方法,它被重载了三次以满足不同的旋转参数:
view sourceprint?1.void rotate (vector3 eulerangles, space relativeto)
void rotate (float xangle, float yangle, float zangle, space relativeto)
void rotate (vector3 axis, float angle, space relativeto)
复制代码
你可以指定欧拉角,也可以指定旋转轴以及旋转角度。actionscript可以使用默认参数来模拟方法重载,但是这样做并不方便也不便于理解。
getter/setter语法
c#声明参数的方法非常简明扼要,在actionscript中需要两个方法——一个’get’一个’set’,而在c#中的代码则是这样的:
view sourceprint?1.public float size { get; set; }
复制代码
在这种情况下,你不需要额外做任何工作编译器就会自动创建一个私有属性,当然,这样的定义没什么用处,下面列举一个稍微复杂点的,包括一个public的get以及private的set:
view sourceprint?1.public float area {
get { return size * size; };
private set { size = mathf.sqrt(value) };
}
复制代码
想必你应该已经注意到了,尽管c#源自java,在c#中却并不使用’function’和’var‘关键词——这样做之所以好是因为这两个关键词完全是冗余的病情不会为代码增加任何有价值的信息。对于其他特性,我推荐看看indexers,generic types,structures以及enumerators,在上面提到的c# pocket book中都有详细介绍,许多c#教程中也有涉及。
编辑c#
很多编辑器都支持c#,微软提供的visual c# express edition免费而且非常好用,支持代码自动补完功能,但是只对应windows平台(显然的)。对于max平台mono develop看起很强大但是还并不是很稳定。 不幸的是eclipse的c# plugin目前为止非常不稳定,所以我并不推荐,但好在它目前还处于alpha阶段。当然,不论如何,我们最后至少还可以求助于textmate。
最后需要提到的是unitron——unity3d自带的默认编辑器。在开发者中间它并不怎么流行,而且我看到有人抱怨他过于基本了,我并不认同这种观点。虽然它不如fdt之于actionscript那样强大,但是它非常稳定而且具备基本的代码自动补完功能,自动补完功能在默认设置下是关闭的,要开启该功能需要打开’preferences’,你会在’general’面板的底端找到这个选项,如此一来我相信unitron还是值得一用的。
我们中很多人都是在浏览器环境下认识javascript的,而javascript也是很多人平生第一次使用的编程语言。如果是这种情况的话,你很可能会立刻开始使用javascript进行unity3d的编程而不必操心要学习什么新东西,毕竟,如unity3d所说,任何使用c#可以完成的事同样可以使用javascript完成。
但是从长远考虑的话,c#可以提供更好的代码管理,完整的oop支持,strong typing以及掌握一门优秀编程语言所带来的成就感。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯