Unity3D新手入门教程(四)预制体,动态管理对象,物理系统,射击游戏实例
二十一 预制体[*]预制体
*.prefab
[*]预制体创建
仅包含引用信息
[*]预制体的实例
UpPack取消关联
[*]预制体的编辑
[*]单独编辑
双击资源管理器中prefab
[*]原位编辑
选择场景中预制体,点击open显示模式:normal/gray/hidden
[*]覆盖编辑
选择场景中预制体,直接编辑overeides|Appyy或Revert
多级节点
二十二 动态创建实例
[*]动态创建实例
使用PrefabObject.Instantiate(obj perfab,parent)
[*]实例的初始化
position位置eulerAngles旋转Script
[*]实例销毁
Object.Destroy(obj)超类静态方法
[*]练习:火控,炮塔控制
创建炮塔,炮管,子弹预制体
[*]脚本
[*]火控
创建子弹,位置,角度,速度,距离,生命周期
[*]子弹脚本
控制自毁别绑到炮塔上了
[*]炮塔控制
[*]控制炮塔旋转
如果要限制转动角度使用转动角度变量eulerAngles范围为
控制射击
二十三 物理系统
[*]物理系统
Rigidbody刚体组件,拥有重力
[*]物理碰撞
Collider碰撞体组件
[*]反弹与摩擦
[*]Physici Material物理材质
Friction摩擦Bounciness反弹
二十四 碰撞检测
[*]运动学刚体
刚体组件:Kinematic无重力
[*]碰撞检测
碰撞体组件:Trigger触发器
[*]消息函数OnTriggerEnter(Collider other)
other.gameObject对方节点
[*]碰撞体的编辑
球形碰撞体盒形碰撞体
练习 击毁目标
二十五 射击游戏项目实例
[*]需求分析
移动射击打怪音乐
[*]功能设计
[*]角色
主角怪物子弹特效
[*]功能
[*]创建对象
子弹生成销毁怪物的生成销毁
[*]管理对象
主角移动怪物移动
[*]交互逻辑
子弹碰撞
特效背景音乐
[*]功能实现
创建所用预制体分功能编写脚本拖拖拽拽
测试
附件 脚本汇总
//脚本 //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; musicPlayer.Play(); mr.material = colors; //物体运动 //匀速运动:根据速度设置前进距离 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)
页:
[1]