目录
书接上回,
unit 2
如何在unity中限制对象在某个区域内可以重写Update接口
void Update() {
if (transform.postion.x < -10) {
transform.position = new Vector3(-10, transform.position.y, transform.position.z);
}
}
继续强调unity界面是一个方便用户提供对象操作的窗口,整体就是面向对象的思想,从代码上也可以看出。
在前文中说过,从资源文件夹中拖动放入界面中,其实类似与通过类创建了对象,
在用户在界面中创建出对象或者修改过的对象,还可以通过对象反向创建出类,即预设物体(prefab)。方式上,只是方向反一下,从场景把物体拖动到资源文件夹中
Prefab是一种资源类型——存储在项目视图中的一种可反复使用的游戏对象。因而当游戏中须要非常多反复使用的对象、资源等时,Prefab就有了用武之地。它拥有下面特点:
能够放到多个场景中。也能够在同一个场景中放置多次
当加入一个Prefab到场景中,就创建了它的一个实例
全部的Prefab实例链接到原始Prefab,本质上是原始Prefab的克隆。
不论项目中存在多少实例。仅仅要对Prefab进行了改动。全部Prefab实例都将随之发生变化
在脚本中,如果想生成prefab,可以定义一个变量
public GameObject projectilePrefab;
然后可以通过窗口将对象拖动赋值给该成员变量
在创建的时候使用Instantiate
Instantiate(projectilePrefab, transform.position, projectile.transform.rotation)
而删除一个对象可以使用
Destory(gameObject);
检测按键输入
Input.GetKeyDown(KeyCode.Space)
在把对象从场景拖动到资源文件夹的时候会有选项要求
预制体(Prefab)和预制体变体(PrefabVariant)
讲解
在场景中,可以创建一个空对象,从而使场景中能够有一个不可见的可使用实例对象,
对象数组创建
public GameObject[] animalPrefabs;
间隔调用函数使用
InvokeRepeating("SpawnRandomAnimal", startDelay, spawnInterval);
如果想为物体添加碰撞,可以在界面上为对象添加碰撞体
碰撞事件需要重写 OnTriggerEnter
void OnTriggerEnter(Collider Other) {
Destory(gameObject);
Destory(other.gameObject);
}
可以看出,当发生碰撞时,会将碰撞对象的碰撞体作为参数传入函数中
从而可以控制对象,每一个物体本身都包含一个gameObject,可以用于对其参数的访问。
//大写开头GameObject 与gameObject的区别
//大写开头GameObject 是类,是class
//小写开头gameObject 具体的个体,是对象
调试信息显示,使用
Debug.Log("Game Over!);