二十一 预制体
- 预制体
- 预制体创建
- 预制体的实例
- 预制体的编辑
- 单独编辑
- 原位编辑
- 选择场景中预制体,点击open
- 显示模式:normal/gray/hidden
- 覆盖编辑
- 选择场景中预制体,直接编辑
- overeides|Appyy或Revert
- 多级节点
二十二 动态创建实例
- 动态创建实例
- 使用Prefab
- Object.Instantiate(obj perfab,parent)
- 实例的初始化
- position位置
- eulerAngles旋转
- Script
- 实例销毁
- Object.Destroy(obj)超类静态方法
- 练习:火控,炮塔控制
- 创建炮塔,炮管,子弹预制体
- 脚本
- 火控
- 子弹脚本
- 炮塔控制
- 控制炮塔旋转
- 如果要限制转动角度
- 使用转动角度变量
- eulerAngles范围为[0,360]
- 控制射击
二十三 物理系统
二十四 碰撞检测
- 运动学刚体
- 碰撞检测
- 碰撞体组件:Trigger触发器
- 消息函数OnTriggerEnter(Collider other)
- 碰撞体的编辑
- 练习 击毁目标
二十五 射击游戏项目实例
附件 脚本汇总
//脚本
//this当前脚本组件继承自MonoBehaviour
//消息函数
void Start()
void Update()
//获取物体,读写其属性
//获取当前物体
GameObject obj = this.gameObject;
//获取场景内其他物体
flag = GameObject.Find("红旗");
//获取位置
//this.gameObject.transform等同于this.transform
Vector3 pos = this.transform.position;
pos = this.transform.localPosition;
//访问父子层级
this.transform.parent
this.transform.parent.gameObject//获取父节点
public Transform RusCude;
Transform child = RusCude.GetChild(index);
//资源使用
//音频和材质,准备好材料和player
public Material[] colors;
public AudioClip[] musics;
MeshRenderer mr;
AudioSource musicPlayer;
musicPlayer.clip = musics[index];
musicPlayer.Play();
mr.material = colors[index];
//物体运动
//匀速运动:根据速度设置前进距离
distance = speed * Time.deltaTime;
this.transform.Translate(0, 0, distance);
//运动方向
this.transform.LookAt(flag.transform);
//匀速转动
this.gameObject.transform.localEulerAngles += new Vector3(0, rotationSpeed * Time.deltaTime, 0);
float rotationSpeed = 120;
this.transform.Rotate(0, rotationSpeed * Time.deltaTime, 0, Space.Self);
//定时调用
Invoke("ChangeColor", 4);//递归用法模拟重复调用
//监听输入
Input.GetMouseButtonDown(0)
Input.GetKey(KeyCode.W)
//使用预制体
//实例化,使用
public GameObject bulletPre;
GameObject bullet = Instantiate(bulletPre,bullets);
bullet.transform.position = cannonMouth.position;
bullet.transform.rotation = cannonDirection.rotation;
//超类静态方法销毁
Object.Destroy(this.gameObject);
//物理碰撞
//消息函数,Collider类
private void OnTriggerEnter(Collider other)
//全局设置
//设置近似帧率
Application.targetFrameRate = 60;
//常用类的静态属性&方法
//时间
Time.time
Time.deltaTime
//屏幕
Screen.width
//输入
Input.mousePosition
//摄像机
Camera.main.WorldToScreenPoint(this.transform.position)
//数学
Random.Range(int min,int max)