Unity3D⼀些⽐较基本的脚本及组件(C#)通过代码创造图形
//创建顶点,创建序列,创建⽹格,然后把⽹格赋给⽹格序列器
//draw a triangle
void Start () {
Vector3[] vs = new Vector3[3];
vs[0] = new Vector3(0,0,0);
vs[1] = new Vector3(1,0,0);
vs[2] = new Vector3(0,1,0);
int[ts] = new int[3];
ts[0] = 0;
ts[1] = 1;
ts[2] = 2;  //要注意顺序,要⽤左⼿系,法线向外,拇指向外
Mesh mesh = new Mesh();
GetComponet<MeshFilter>().mesh = mesh;
mesh.vertices = vs;  // vertices⾄⾼点
}
///*                                      *///
//draw a triangle程序封装代码
public GameObject Create Triangle()
{
GameObject obj = new GameObject(“Triangle”);
MeshFilter mf = obj.AddComponet<MeshFilter>();
obj.AddComponent<MeshRender>();
Mesh mesh = new Mesh();
mesh.vertices = nes[]
{
new Vector3(0,0,0);
new Vector3(3,0,0);
new Vector3(0,3,0);
};
{
0,2,1//不⽤分号,初始化系,直接把初始值放进去
};
return obj;
}
Camera 的性质与使⽤
/
/Camera的实例性质
public CameraClearFlags clearFlags;  //clearFlags是相机清除表识
public ColorbackgroundColor; //给定他的颜⾊,背景⾊,只有单⾊才起作⽤
public int cullingMask; //提出掩码
public class chapter6 : MonoBehaviour
{
public GameObject cube;
void Start(){
cube.laber = 9;  //把cube设置在第9层
Camera cam = this.GetComponet<Camera>()’
cam.clearFlags = CameraClearFlags.SolidColor;
cam.backgroundColor = new Vector3(1,0,0,0);  //表⽰设置颜⾊
cam.cullingMask = 9;  //表⽰第9层的都不会被渲染出来,也就是说cube不会显⽰出来
}
}
unity3d入门//CameraClearFlags是⼀个枚举类型,有以下四个成员:
solidColor 表⽰⽤backgroundColor所制定的填充背景
skybox 表⽰天空盒,模拟天空效果填充
Depth 只是清除深度缓存,保留上⼀帧所使⽤的颜⾊
Nothing 不进⾏背景清除,这种情况在游戏和模拟应⽤中⽐较少⽤
public bool orthographic;//⽤于读取和设定相机的投影⽅式,如果为true则表⽰是正交投影,否则为透视投影;正交投影可⽤于UI和2D开发
public float orthographicSize; //⽤以指定正交投影的视景体的垂直⽅向尺⼨的⼀半
public Rect rect; //相机对应的视⾓⼝的位置和⼤⼩,rect以单位化形式制定相机视⼝在屏幕中的位置和⼤⼩,位置⼤⼩取值范围为0~1,满屏为1
Camera main = this.gameObject.GetComponet<Camera>();
this.gameObject.SetActive(false);
Camera cam0 = camGO0.AddComponet<Camera>();
< = new Rect(0f,0f, 0.5f, 0.5f);  //前两个参数是camera的位置,后⾯两个参数设置相机⼤⼩(0.5f,0.5f)表⽰占x轴的⼆分之⼀,y轴的⼆分之⼀,所以总共占渲染窗⼝的四分之⼀
Camera cam1 = camGO1.AddComponet<Camera>();
< = new Rect(0.5f, 0.5f, 0.5f, 0.5f);
}
Material,Shader,Texture(材质,着⾊器,纹理)
光照、纹理等让物体更加的真实。
材质在⼏何物质的基础下增加额外的东西,让物体显得更加真实。
着⾊器:核⼼最后的渲染过程。特殊的⼀串代码,⽤特殊语⾔所写,实现⼀定的算法。计算每个像素
点的颜⾊。根据定点信息,光照,材质,计算顶点颜⾊,最后显⽰出来。Unity提供多种着⾊器提供选择。有专门⼀本书提供着⾊器的介绍。主流⼯具语⾔是Cg(C语⾔+graph)
纹理:图⽚,增加在物体表⾯,复制在材质上,材质再复制给物体。美⼯的过程。
程序开发⼈员主要处理的是材质。
Rendering Mode,渲染模式,进⼀步确定着⾊器类型,在Standard系列下,有四种类型:Opaque(不透明), Cutout(表⽰在透明和不透明区域之间具有尖锐边沿,没有不透明
效果,⽐如说⼀些镂空边缘或者⼀些草的材质), Fade(渐变,⽤以表⽰材质的透明度逐渐改变), Transparent(处理透明的,⽐如说玻璃材质)
Albedo,反照率,表⽰⼀种材质对⽩光的反射能⼒,是材质的散射、反射、折射和半透明成分的总和,相关参数控制物体表⾯的基⾊,纯⿊⾊「RGB=(0,0,0),Albedo=0」;⽩
⾊「RGB=(1,1,1), Albedo=1」。alpha通道控制材质透明度,alpha值越⼩,Albedo的实现效果越微弱(因为alpha越透明度越⾼,当透明度极⾼的时候甚⾄不可以看到表⾯效
果,所以有材质没材质,有调Albedo和没调也⼀样)。
Metallic,表⽰材质处于⾦属模拟⼯作流metalness workflow下。⾦属模拟⼯作流与镜⾯反射⼯作流specular workflow是两种处理光反射的不同模式。
光照于CG中⼗分重要。PBR(physical base render)基于物理渲染,可以模拟光线于现实的情况,实现光线追踪。
Smoothness,光滑度,最光滑相当于镜⾯反射。
MeshFilter&MeshRender
⽹格渲染器
Cast shadows,⼀个开关,该⽹格物体是否产⽣阴影
Receive Shadows,⼀个开关,是否接受其他物体投射到其上⾯
Motion Vectors,运动适量,⽤于追踪⼀个物体从⼀帧到下⼀帧的空间位置,并可⽤于后期处理效果,⽐如说运动模糊处理和时域抗锯齿效果。
Coding for materials
Shader shader; Texture texture; Color color;
void Start(){
Renderer rend = GetComponet<Renderer>();
rend.material = new Material(shader); //把着⾊器、材质、颜⾊复制给该物体
rend.material.mainTexture = texture;
rend.material .color = color;
}
Using colors
public class Example: MonoBehaviour{
Color colorStart = d;
Color colorEnd= ; //颜⾊差值算法
float duration = 1.0f;
Renderer rend;
void Start(){
rend = GetComponent<Renderer>()
}
void Update(){
float lerp = Mathf.PingPong(Time.time, duration)/duration);  //如果⼤于该值则截断,返回上⼀个值, 然后开始往回缩⼩值,类似打乒乓球⼀样 //该参数为,从0到1,在从1到0,如果是0则为纯粹的红⾊,如果为1则为纯粹的绿⾊,动态的改变,包括颜lor = Color.Lerp(colorStart, coloredEnd, lerp);  //lerp只能是在0~1之间,所以上⾯⼀定要除以duration
}
}
纹理⼤⼩要满⾜2的n次⽅(2、4、8、… 、1024、2048)等, Unity允许倒⼊的最⼤纹理为8k
Operating textures with codes
public class ExampleClass:MonoBehaviour{
public Texture[]texture;
public float changeInteval = 0.33F;
public Renderer rend;
void Start( rend = GetComponet<Renderer>;)
void Update(){
if (textures.Length == 0)return;
int index = Methf.FloorTolnt(Time.time/changelntervla);
index = index % textures.Length;
rend.material.mainTexture = textures[index];
}
}
物理组件(刚体组建)
Rigidbody:
Is Kinematic,勾选上物体运动将不会受物理引擎没有关系,只纯粹受transform影响,但是会受其他影响;虽然缸体⾃⾝不受⼒和碰撞的影响,但会通过⼒的碰撞传导给别的物
体;
Interpolate,差值;
Collosion Detection, ⽤于检测与其他刚体的碰撞,其主要⽬的之⼀是防⽌物体之间的穿越 [默认为Discrete,表⽰每⼀帧做⼀次检查,缺点是快速移动游戏对象会有穿透现象];Constraints,刚体约束,可以冻结游戏对象在某个⽅向限制的移动和旋转。eg.,如果选择了Freeze Position中的X,表⽰冻结游戏对象在X轴上的运动;如果选择Free Rotation下
的X,表⽰冻结游戏对象在X轴上的旋转。[ 使⽤价值,⽐如说挂钩有时候只会在⼀个⽅向上乱动,所以冻结其他⽅向的数值,从⽽不让该物体受到⼒的影响后在其他⽅向上乱
晃 ];
通过控制⾯板,Rigibody类的使⽤⽅法:
public class fvc_rigibody_falling: MonoBehaviour{
private Rigibody rg; //通过代码实现⾃由落体
void Start(){
rb = this. gameObject.AddComponent<Rigibody>();
rb.isKinematic = false; //受物理引擎影响,isKinematic不开启
rb.detectCollisions = ture;
rb.useGravity = true;
rb.mass = 0.1f;
}
void Update(){
rb.drag = Mathf.Repeat(Time.time*15f, 8.0f);
}
}
//模拟⼀个球平抛运动
public class fvc_rigibody_falling: MonoBehaviour{
private Rigibody rg; //通过代码实现⾃由落体
///*
[Range(0,20)]
public int speed = 5;
public GameObject humanbeing;
*///
privare Vector3 old_pos;
void Start(){
rb = this. gameObject.AddComponent<Rigibody>();
rb.isKinematic = false; //受物理引擎影响,isKinematic不开启
rb.detectCollisions = ture;
rb.useGravity = true;
rb.mass = 0.1f;
rb.velocity = 5.0f* Vector3.right; //给物体增加⼀个速度
old_pos = transform.position;
/
/ansform.Translate(0,0,speed*Time.deltaTime,Space.World);
}
void FixedUpdate(){ //把抛物线画出来
Debug.DrawLine(old_pos, transform.position, d, 60,false); //把抛物线画出来
old_pos = transform.position;
}
void Update(){
rb.drag = Mathf.Repeat(Time.time*15f, 8.0f);
}
}
angularVelocity表⽰⾓速度
centerOfMass表⽰刚体质⼼
//让刚体旋转
public class fvc_rigibody_falling: MonoBehaviour{
private Rigibody rg; //通过代码实现⾃由落体
void Start(){
rb = this. gameObject.AddComponent<Rigibody>();
rb.angularVelcity = new Vector3(0,2.4f,0); //通过物理引擎来模拟旋转效果,底层驱动是物理引擎
rb.detectCollisions = false;
re.angularDrag = 0.01f;
}
void Update(){
if(Input. GetKeyDown(KeyCode.Space)){
rb.freezeRotation = true;
}
if(Input. GetKeyDown(KeyCode.Z)){
}
if(Input. GetKeyDown(KeyCode.X)){
}
}
}
force表⽰⼒的⽮量,该⽮量长度表⽰⼒的⼤⼩,参数mode表⽰模式
public void AddForce(Vector3 force, ForceMode mode = ForceMode.Force); //给物体加⼒效果,第⼀个force表⽰给刚体的加速度,该⼒是在世界坐标下,eg,.橙⾊坐标public void AddForceAtPosition(Vector3 force, Vector3 position, ForceMode mode = FforceMode.Force);//围着质⼼的轴旋转,和上⾯的⼀样,不过多了个position参数public void AddRelativeForce(Vector 3 force, de = ForceMode.Force );//加相对⼒,相对于⼒的局部坐标下,eg,.绿⾊坐标

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。