Unity3D新手入门教程
个人总结
- 编辑器操作
- 窗口布局
- 资源目录
- 场景文件*.unity
- 资源包*.unitypackage
- 物体操作
- 父子关系
- 相对坐标系设置,坐标系模式
- 编辑模型,材质,纹理,预制体,各种资源
- 脚本操作
- 基础知识
- 坐标系
- 透视正交
- 模型FBX
- mesh网格
- material材质
- texture贴图纹理
- perfab预制体
- 组件Component
- Transform
- 音效,碰撞,刚体,网格,渲染,脚本
- 脚本组件
- 脚本编写
- 执行逻辑
- 执行对象
- MoniBehaviour
- GameObject
- Transform
- Vector3
- Time
- Input
- Camera
- Screen
- Object动态创建实例
- Random
- 各种组件类
一 课程介绍,二 开发环境
- Unity窗口布局
- Hierarchy层级窗口
- Scene场景窗口,3D视图窗口
- Game游戏播放窗口
- Inspector检查器窗口,属性窗口
- Project项目窗口
- Console控制台窗口
三 场景与视图
- scene
- 游戏场景
- 3D视图
- Gizmo导航器
- Grid栅格
- Skybox天空盒
- 视图操作
- 世界坐标系
- 视野中心
- 透视与正交
- Perspective
- Orthographic,等距视图Isometric
- 广角设定Field of view
四 游戏物体
- 3D原生物体
- 物体的移动
- 旋转与缩放
- 旋转工具Rotate tool
- 缩放工具scale tool
- 更多操作
- 快捷键w,e,r
- 操作模式
- 轴心pivot/中心点center
- global世界坐标系/local局部坐标系
- 更多操作
- AF扩展插件
五 模型
- 网格mesh
- 面,顶点,面法向
- unity观察模式
- shaded着色模式
- wireframe线框
- shaded wireframe线框着色
- 材质material
- 纹理texture
- 外部模型
- 更多细节
- FBX的使用
- 贴图路径
- 多个材质
- 材质替换
- 操作.fbx文件
- 重映射Remap
- 使用外部材质use external materials
- 分解重组
六 资源文件
- 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
- 运动方向
- 小练习:达到目标停止
- vector.magnitude获取向量值
- if语句
十二 物体的旋转
- 物体旋转
- transform.rotation不建议用
- transform.eulerAngles
- transform.LocalEulerAngles
- 匀速转动
- 相对旋转
- 自转和公转
十三 脚本的运行
- 脚本的运行
- 消息函数(事件函数,回调函数)
- Awake
- Start
- Update
- OnEnable
- OnDisable
- 脚本执行顺序
- 消息函数调用顺序
- 第一阶段初始化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中键
- 更多细节
- 屏幕坐标
- 获取屏幕坐标
- 世界坐标转化屏幕坐标
- Camera.main.WorldToScreenPoint(world pos)
- 屏幕对象
- 键盘输入
- Input.GetKeyDown(keycode)
- Input.GetKeyUp(keycode)
- Input.GetKey(keycode)
十六 组件的访问
- 组件的调用
- 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
- 红绿灯练习
- 加速减速练习
二十 向量
- 向量
- 长度v.magnitude
- 单位向量标准化
- 向量常量
- 向量运算
- 向量测距
- 向量使用
二十一 预制体
- 预制体
- 预制体创建
- 预制体的实例
- 预制体的编辑
- 单独编辑
- 原位编辑
- 选择场景中预制体,点击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)