Unity3D新手入门教程 (b站阿发) 总结框架笔记

Unity3D新手入门教程

个人总结

  • 编辑器操作
    • 窗口布局
    • 资源目录
      • 场景文件*.unity
      • 资源包*.unitypackage
    • 物体操作
      • 父子关系
      • 相对坐标系设置,坐标系模式
      • 编辑模型,材质,纹理,预制体,各种资源
    • 脚本操作
      • 设置脚本优先级
  • 基础知识
    • 坐标系
    • 透视正交
    • 模型FBX
      • mesh网格
      • material材质
      • texture贴图纹理
      • perfab预制体
    • 组件Component
      • Transform
      • 音效,碰撞,刚体,网格,渲染,脚本
    • 脚本组件
  • 脚本编写
    • 执行逻辑
      • 继承
      • 消息
        • Awake
        • Start
        • Update
    • 执行对象
      • MoniBehaviour
        • Invoke
      • GameObject
      • Transform
        • 移动
        • 父子关系
      • Vector3
      • Time
      • Input
      • Camera
      • Screen
      • Object动态创建实例
      • Random
      • 各种组件类

一 课程介绍,二 开发环境

  • Unity窗口布局
    • Hierarchy层级窗口
    • Scene场景窗口,3D视图窗口
    • Game游戏播放窗口
    • Inspector检查器窗口,属性窗口
    • Project项目窗口
    • Console控制台窗口

三 场景与视图

  • scene
    • 先创建
    • 默认场景
  • 游戏场景
    • GameObject游戏物体
  • 3D视图
    • Gizmo导航器
      • shift+点击小方块恢复方向
    • Grid栅格
    • Skybox天空盒
    • 视图操作
      • 旋转
        • alt+lmb
      • 缩放
        • alt+rmb
      • 平移
        • mmb
  • 世界坐标系
    • 左手坐标系
  • 视野中心
    • 聚焦物体
      • 框选+F键
    • 创建物体在视图中心
  • 透视与正交
    • Perspective
    • Orthographic,等距视图Isometric
    • 广角设定Field of view

四 游戏物体

  • 3D原生物体
    • 建模软件
  • 物体的移动
    • 移动工具move tool
  • 旋转与缩放
    • 旋转工具Rotate tool
      • 逆时针为正
      • 精确指定
      • 按住ctrl键,增量增加
    • 缩放工具scale tool
      • 轴向缩放
      • 整体缩放
    • 更多操作
      • 快捷键w,e,r
      • 操作模式
        • 轴心pivot/中心点center
        • global世界坐标系/local局部坐标系
  • 更多操作
    • 多选
    • 复制crtl+D
    • 激活Active
      • 检查器里第一个勾选项
    • 对齐
      • 右键导航器,选择视图
  • AF扩展插件
    • 聚焦,切换视图快捷功能

五 模型

  • 网格mesh
    • 面,顶点,面法向
    • unity观察模式
      • shaded着色模式
      • wireframe线框
      • shaded wireframe线框着色
  • 材质material
    • 物体表面细节
    • mesh renderer组件
  • 纹理texture
    • 物体表面颜色
    • 给材质用
  • 外部模型
    • 标准模型FBX
      • mesh
      • material
    • 贴图
    • 预览
  • 更多细节
    • 背面无渲染
    • 默认材质
  • FBX的使用
    • 贴图路径
      • 同路径
      • 同级Textures目录
    • 多个材质
    • 材质替换
      • 操作.fbx文件
      • 重映射Remap
      • 使用外部材质use external materials
  • 分解重组
    • 点开.fbx直接用里面的东西

六 资源文件

  • Assets资源目录
    • Modle,Texture,AudioClip,Script,Material
    • Meta,描述文件
  • 场景文件*.unity
    • 场景全局设置
    • 节点
    • 组件
    • 属性参数
  • 资源包*.Unity Package
    • 导入
    • 导出
      • 依赖文件
  • Unity资源商店

七 物体操作

  • 轴心Pivot
    • 物体操纵基准点
  • 父子关系
    • 两个物体之间组合,依赖
    • 相对坐标
  • 空物体EmptyObject
    • 容器
    • 作用
      • 节点组织管理
      • 标记
  • Global和Local
    • Global世界坐标系
    • Local本地坐标系
    • 左手坐标系
  • Pivot和Center
    • 轴心模式:自定义操作基准
    • 几何中心模式

八 组件Component

  • 代表功能
  • 添加删除组件
    • light
    • mesh filter
    • mesh renderer
  • AudioSource
  • Transform
    • 必须项,不可被删除
  • 摄像机Camera
    • z轴为拍摄方向
    • Align with View对齐视角

九 脚本

  • 脚本:游戏驱动逻辑
    • 脚本名与类名一致
    • 挂载
  • 当前物体
    • this当前脚本组件对象
      • this.gameObject当前物体
      • this.gameObject.name当前物体名字
      • 利用物体对象获取其他属性
      • 简写
        • this.gameObject.transform等同于this.transform
    • using UnityEngin(API命名空间)
      • 脚本类继承自MonoBehaviour
      • 三维向量类Vector3
  • 物体的坐标
    • transform.position世界坐标
    • transform.localPosition本地坐标
      • 以父节点为基准
      • 以自己为基准
    • Vector3三维向量类
  • 播放模式
    • 实时显示
    • 更改不保存

十 帧更新

  • 帧更新
    • Frame,FrameRate,FPS
    • Update()
    • Time
      • Time.time
      • Time.deltaTime时间差
      • Application.targetFrameRate近似帧率
  • 移动物体
    • 更新positaion
    • 匀速运动
      • 设置speed
      • distance=speed*Time.deltaTime;
      • 以vector3为基本单位

十一 物体的运动

  • 物体的运动
    • transform.Translate(dx,dy,dz,…)
  • 相对运动
    • tarnsform.Translate(dx,dy,dz,space)
    • space=Space.World|space.Self
  • 运动方向
    • 获取目标物体
      • GameObject.Find()
    • 转向目标
      • transform.LookAt()
      • z轴指向目标
  • 小练习:达到目标停止
    • vector.magnitude获取向量值
    • if语句

十二 物体的旋转

  • 物体旋转
    • transform.rotation不建议用
    • transform.eulerAngles
    • transform.LocalEulerAngles
    • 匀速转动
  • 相对旋转
    • transform.Rotate()
  • 自转和公转
    • 公转:围绕另一个物体一起转动

十三 脚本的运行

  • 脚本的运行
    • 场景的加载过程
      • 创建节点
      • 实例化组件
      • 实例化脚本组件
  • 消息函数(事件函数,回调函数)
    • Awake
    • Start
    • Update
    • OnEnable
    • OnDisable
  • 脚本执行顺序
    • 消息函数调用顺序
      • 第一阶段初始化Awake()
      • 第二阶段Start()
      • 帧更新
    • 脚本优先级
      • Execution Order
  • 主控脚本
    • MainLogic

十四 脚本的参数

  • 脚本参数
    • 公有数据成员
  • 参数赋值顺序
    • 类中初始化默认值
    • 检查器赋值
    • Awake
    • Start
  • 值类型
    • 结构体类型
      • int,float,boll…
      • Vector3,Color
    • 引用(类)类型
      • 节点
      • 组件
      • 资源
      • 数组类型
  • 运行时调试保存参数
    • play mode下copy component
    • edit mode下paste component values

十五 鼠标键盘输入

  • 鼠标输入
    • Input.GetMouseButtonDown(int)
    • Input.GetMounseButtonUp(int)
    • Input.getMouseButton(int)
    • 0左键,1右键,2中键
  • 更多细节
    • 事件只触发一次
    • 状态每帧一次
    • 全局事件互不干扰
  • 屏幕坐标
    • 获取屏幕坐标
      • Input.mousePosition
      • 左下角原点
    • 世界坐标转化屏幕坐标
      • Camera.main.WorldToScreenPoint(world pos)
    • 屏幕对象
      • Screen.Width
  • 键盘输入
    • Input.GetKeyDown(keycode)
    • Input.GetKeyUp(keycode)
    • Input.GetKey(keycode)
      • KeyCode.A

十六 组件的访问

  • 组件的调用
    • AudioSourse audio = this.GetComponent<>()
    • audio.Play()
  • 组件的参数
    • 获取组件后访问公有数据成员
  • 引用其他节点组件
    • 先获取节点,在获取组件
    • 直接声明组件,将含有组件的节点拖过去,unity自动完成引用
  • 引用脚本组件
  • 消息调用
    • 获取节点target
    • 发送消息
      • target.SendMessage(methondName,value)
    • 反射机制,同步调用
  • 练习 简单飞控
    • 主控脚本
    • 飞行脚本
    • 旋转脚本

十七 物体的访问

  • 获取节点
    • GameObject node = GameObject.Find(“”);
    • 声明公有变量,拖过去
  • 父子物体
    • 利用Transform维持
    • 获取父级
      • this.transform.parent
      • this.transform.parent.gameObject获取父节点
    • 获取子集
      • foreach遍历
        • foreach(Transform child in 父级)
          • child.name等同于child.gameObject.name(unity封装)
      • 按索引获取
        • this.trannsform.GetChild(int)
      • 按名称查找
        • this.transform.Find(“路径”)
        • /表示根目录
  • 物体的操作
    • 设置新的父级
      • this.transform.SetParent(Transform p)
      • this.transform.SetParent(null)设置为一级节点
    • 设置显示隐藏
      • GameObject.setActive(bool)

十八 资源的访问

  • 音频资源使用
    • AudioClip音频文件
    • AudioSource.PlayOneShot(clip)播放短的音效
    • ac.clip = clip;指定音乐
    • ac.Play();播放
  • 材质资源使用
    • Material
    • MeshRenderer rd
    • rd.material
  • 资源数组

十九 定时调用

  • MonoBehaviour成员函数
    • Invoke(string func,float delay)字符串反射函数
    • InvokeRepeating(string func,int interval)
      • 定时调度互相独立
    • IsInvking(func)
    • CancellInvoke(func)
  • 定时与线程
    • 单线程
    • 获取线程号
      • using System.Treading;
      • Thread.CurrentThread.ManagedRhreadId
  • 红绿灯练习
    • 利用递归Invoke实现周期性改变颜色
  • 加速减速练习

二十 向量

  • 向量
    • 长度v.magnitude
    • 单位向量标准化
      • v.normalized
    • 向量常量
      • zero,right,forward
  • 向量运算
    • 加减乘除,赋值
  • 向量测距
    • v.Distance(a,b)
  • 向量使用

二十一 预制体

  • 预制体
    • *.prefab
  • 预制体创建
    • 仅包含引用信息
  • 预制体的实例
    • UpPack取消关联
  • 预制体的编辑
    • 单独编辑
      • 双击资源管理器中prefab
    • 原位编辑
      • 选择场景中预制体,点击open
      • 显示模式:normal/gray/hidden
    • 覆盖编辑
      • 选择场景中预制体,直接编辑
      • overeides|Appyy或Revert
  • 多级节点

二十二 动态创建实例

  • 动态创建实例
    • 使用Prefab
    • Object.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)

猜你喜欢

转载自blog.csdn.net/weixin_43231912/article/details/124583255