找回密码
 立即注册
查看: 299|回复: 0

Unity3D新手入门教程(四)预制体,动态管理对象,物理系统,射击游戏实例

[复制链接]
发表于 2022-5-5 20:10 | 显示全部楼层 |阅读模式
二十一 预制体


  • 预制体
      *.prefab

  • 预制体创建
      仅包含引用信息

  • 预制体的实例
      UpPack取消关联

  • 预制体的编辑

    • 单独编辑
        双击资源管理器中prefab

    • 原位编辑
        选择场景中预制体,点击open显示模式:normal/gray/hidden

    • 覆盖编辑
        选择场景中预制体,直接编辑overeides|Appyy或Revert

    多级节点
二十二 动态创建实例


  • 动态创建实例
      使用PrefabObject.Instantiate(obj perfab,parent)

  • 实例的初始化
      position位置eulerAngles旋转Script

  • 实例销毁
      Object.Destroy(obj)超类静态方法

  • 练习:火控,炮塔控制
      创建炮塔,炮管,子弹预制体
    • 脚本

      • 火控
          创建子弹,位置,角度,速度,距离,生命周期

      • 子弹脚本
          控制自毁别绑到炮塔上了

      • 炮塔控制

        • 控制炮塔旋转
            如果要限制转动角度使用转动角度变量eulerAngles范围为[0,360]
          控制射击



二十三 物理系统


  • 物理系统
      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[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)
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-22 13:38 , Processed in 0.090347 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表