CG 计算机图形学 预设体 Prefab

预设体 Prefab

prefab

材质、纹理:静态属性
transform
碰撞器、碰撞检测
把脚本组建挂到模板上去
动态行为
空的预设体其实就是一个容器

把模型拖到预设体上就完成了模型的创建

Demo:CrazyRobot

create-prefab
rename-“egg”
egg.prefab现在还是空盒子
sphere选中拖到Assets中的egg
Hierarchy面板中
由白色变为蓝色,是预设体的一个实例
现在没有啥区别,但是在设计子弹的时候会有区别

静态生成方式:手动拖动,cv

鸡蛋颜色改为红色,有两种方式

  1. 改变当前创建的预设体本身
  2. 改变预设体实例
    改变eggmaterial材质球颜色相当于改变全部预设体实例
    egg预设体展示颜色仍未刷新

改变实例
改变其中一个实例的大小、形状后,prefab栏目apply

子弹具有相同的外形、相同的形状
如何利用预设体技术进行动态生成

cylinder绕x轴旋转90度
rotation:90
Position:Y4 Z20

子弹
Scale:XYZ0.2

blue材质球
C#script:FlightingBullets

创建子弹预设体bullet

两个对象各自行为:两个代码

  1. 枪管发出子弹CreateBullet.cs
    谁的行为谁负责,面向对象基本思想,谁的动作就把这个代码赋给谁

创建子弹的过程就是动态实例化
2.

界面对象 public GameObject bullet;
把预设体而不是预设体的实例拖进来
动态效果:在update中实现代码
Input.GetMouseButtonDown()
0左键1右键

void Update(){
	if(Input.GetMouseButtonDown(0))
		for(int i=0;i<10;i++)
		{
			//danamically create the bullets
			Vector3 position=new Vector3(Random.Range)
			Instantiate(bullet,position,transform.rotation)
		}
}

Instantiate(bullet,随机位置,朝向)

把预设体prefab拖进None
因为预设体的实例会销毁

update函数中平移translate

void Update(){
this.transform.Translate(Vector3.back*Random.Range(10.0f,13.0f)*Time.deltaTime,Space.world);
}
void Update(){
this.transform.Translate(Vector3.back*Random.Range(10.0f,13.0f),Space.world);
}

vector3.back(0,0,-1)
Random.Range()
Time.deltaTime()
Update一秒钟之内被调用25帧
Time类中的deltaTime两针之间的时间差1/25
子弹速度即为Range(10.0f,13.0f)

子弹飞走
动态实例化和动态销毁
Destroy

void Update(){
	this.transform.Translate(Vector3.back*Random.Range(10.0f,13.0f)*Time.deltaTime,Space.world);
	if(this.transform.posiiton.z<0){
		Destroy(this.gameObject)
}
}

写一个逻辑if

public GameObject

把子弹预设体实例拖给bullet,z<0时已经被销毁destroy了
预设体本身是一直存在的

用户输入与控制

建模-渲染-动画(交互、输入)

和输入处理相关的C#脚本都应该放在Update函数中

mousePosition只读
GetMouseButtonDown第一帧
GetMouseButton期间
GetMouseBottonUp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值