prefab
材质、纹理:静态属性
transform
碰撞器、碰撞检测
把脚本组建挂到模板上去
动态行为
空的预设体其实就是一个容器
把模型拖到预设体上就完成了模型的创建
Demo:CrazyRobot
create-prefab
rename-“egg”
egg.prefab现在还是空盒子
sphere选中拖到Assets中的egg
Hierarchy面板中
由白色变为蓝色,是预设体的一个实例
现在没有啥区别,但是在设计子弹的时候会有区别
静态生成方式:手动拖动,cv
鸡蛋颜色改为红色,有两种方式
- 改变当前创建的预设体本身
- 改变预设体实例
改变eggmaterial材质球颜色相当于改变全部预设体实例
egg预设体展示颜色仍未刷新
改变实例
改变其中一个实例的大小、形状后,prefab栏目apply
子弹具有相同的外形、相同的形状
如何利用预设体技术进行动态生成
cylinder绕x轴旋转90度
rotation:90
Position:Y4 Z20
子弹
Scale:XYZ0.2
blue材质球
C#script:FlightingBullets
创建子弹预设体bullet
两个对象各自行为:两个代码
- 枪管发出子弹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