Unity 自学脱坑
- 一、操作类
- 二、API
-
- 1. 【vector2.Normalize】使用Input函数获取水平和垂直,每次量不一样
- 2. 使用transform.position 必须使用三维数组相加
- 3. 【Animator .SetFloat】如何获取动画器里面的参数
- 4. 【GameObject.SetActive】如何隐藏和激活Canvas
- 5. 【Camera.main.WorldToScreenPoint】如何将Canvas转化到世界坐标显示出来
- 6. C# 脚本如果写一个结构化的类和初始化参数?让其他的脚本可以生成和引用
- 7. C#【Resources.Load】 脚本如果变换一个图片的精灵元素
- 8. 【Instantiate】如何使用C# 脚本新建一个UI对象或新建一个GameObject
- 9. 【Physics2D.Raycast】如何判断面向范围内出现交互人物或物品
- 10. 【DontDestroyOnLoad(this)】如何设置全局变量和确保切换场景仍有效
- 11.【SceneManager.LoadScene(sceneIndex);】 如何切换场景
- 12. 【aSource.Play】如何播放音乐
- 13.【SceneManager.GetActiveScene().buildIndex】 如何获取当前场景序号和名字
- 14.【LoadSceneAsync】 添加场景切换动画
- 三、切换平台
- 如何导出到安卓手机和微信小程序、云渲染
一、操作类
1.C#脚本打开没有代码提示
解决办法
1、Unity——>编辑——>首选项——>外部工具——>【划重点,把Open by file extension 改为 对应的VS 编辑版本】,在选择重新生成项目文件
2、Unity——>资源——>打开C# 项目
前后区别在于VS打开后左边有没有显示“解决方案资源管理器”,有的话里面应该能看到“Assembly—CSharp”,这个时候再打开就能看到快速提示
2.动画设计看不到具体帧数内容和动画的帧数
解决办法
1、在对应动画名称:Sprite 前面有个箭头,请点击!!!!就能查看每帧内容明细
2、在时间最后三个小竖点,点击后勾选【show sample rate】,就能为动画设置帧数
3.cinemachine自动镜头跟踪器没法设置边界框【两次都犯同一个错误】
不是通过添加组件,而是通过自带的Extension进行扩展
解决办法
1、Add Extension ——> 加入CineMachine confiner
2、项目 ——>添加空物体 ——>添加 Polygon Collider 2D 点击编辑图形【编辑边界】
3、最重要,边界的gameObject要勾选触发器
4、将空物体拖拽到CineMachine confiner 中
5、confine Screen Edges 也要勾选
4.C#脚本写完没有生效
解决办法
1、选中物件,添加组建,选择编译后的脚本【要挂载脚本才能生效】
5.画布没有展示
解决办法
1、新建层级时,新建UI——>Canvas 而不是新建一个空物体
6. TileMap 瓦片地图没有碰撞
解决办法
1、再Tilemap 地图上加的碰撞应该是 TileMap collider 2D 不是 Box Collider 2D
2、然后加上composite collider 2D ,再TileMap collider 2D勾选 复合使用
3、注意再Tilemap上画图时要选择不同的画布
7. 动画器混合树参数选择不到
解决办法
1、将参数从Bool值改为Float值
二、API
1. 【vector2.Normalize】使用Input函数获取水平和垂直,每次量不一样
解决办法
// 关键代码
vector2.y = Input.GetAxis("Vertical"); //返回-1和1之间的值,根据键盘按下的时间
vector2.y = Input.GetAxisRaw("") //直接返回-1和1
vector2.Normalize; //归一化,简单的说就是将向量的长度变为1,让距离保持一致,在对角线上移动时和水平或垂直一样快。
2. 使用transform.position 必须使用三维数组相加
// 关键代码
transform.position += new Vector3(vector2.x,vector2.y,0.0f) * playerSpeed * Time.deltaTime;
// 有碰撞需求建议使用
private Vector2 vector2 = new Vector2();
private Rigidbody2D rb2d;
……
rb2d = GetComponent<Rigidbody2D>();
……
private void moveCharactor()
{
vector2.y = Input.GetAxis("Vertical"); //返回-1和1之间的值,根据键盘按下的时间
vector2.y = Input.GetAxisRaw("") //直接返回-1和1
vector2.Normalize; //归一化,简单的说就是将向量的长度变为1,让距离保持一致,在对角线上移动时和水平或垂直一样快。
rb2d.velocity = vector2 * playerSpeed;
}
private void FixedUpdate()
{
moveCharactor();
}
3. 【Animator .SetFloat】如何获取动画器里面的参数
注意这里是Animator 不是 Animation ~~~
// 关键代码