记录一下unity的使用技巧。

1.Tag & Layers

选中GameObject后状态栏的第二排有这两种属性可以设置,有一些预设的 tag ,也可以自己加,注意此处的 Layer 并不决定哪个层会被渲染在前面。下面还可以找到另一个属性 Sorting Layer,它才是控制2D游戏中各个物体的前后关系的,越往下层的会越先被渲染,挡住上层的物体。

2.Animation

Unity中的动画效果非常关键,首先选择需要创建动画的物体,点 Window->Animation 调出动画窗口,然后依次创建需要用到的动画,以备后面使用。记得在创建完毕后点 Inspector 中的 Apply,就会保存改动到模板中,如果后面需要调试,只需先选中目标物体,再在动画窗口选择相应的动画效果播放、调试即可。在动画窗口创建的动画中的那些像素帧被称为 Motion。

3.Animator Controller

类似状态机的设置,将上面制作的动画通过创建的变量设置转移的条件和结构。我们实际将不同的动画按照状态和条件进行转移(transition)时,是在对 Animator Controller 进行改动,如果碰到需要另一个结构一样,只是要替换动画中的像素图和动画素材时,就可以复制一个之前建好的 Animator Controller,重命名,然后依次替换动画素材。

注意Animator Controller并不是依附在物体上的Animator。

  • Any State状态:代表任意的状态,当我们希望某个条件发生时物体不论在何种状态都转移至另一种状态时可以用到,比如角色死亡
  • Entry状态:初始化的状态

一般来讲会在需要构建动画的sprites上创建Animator,最好再额外创建一个Animator Controller并将其拖拽进Animator。在状态机编辑器中,若要使用Any State状态,在创建transition时务必注意取消勾选Can Transition To Self,否则会造成死循环,出现目标动画永远只播放第一帧的bug。

还有要注意的一点是,不同状态间的转换路径transition中的条件,是and关系,也就是如果有多个条件,必须同时满足时才会触发,而如果需要or条件,创建多个transition即可。

坐标

Unity中的坐标transform.position分为绝对坐标和相对坐标,首先世界有一个坐标系,而对于由父子关系的物体除了最上层的父物体外,子物体的坐标都是相对于上一层的父物体的相对坐标,当我们需要计算物体间的距离时,如果不注意可能会出错。

基础2D脚本

(1)角色移动

2D场景中角色根据游戏的模式有两种移动方式,分别为俯视视角自由移动和平台跳跃。这里先介绍第一种,即俯视视角时角色可以朝至少四个方向移动的脚本。有一种较为简单的写法是捕捉键盘上的方向键如WASD,然后根据键位改动角色的位置值(transform),虽然这种写法不需要给物体加上rigidbody2d,但是比较萎,我们偏向另一种更标准的写法。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class PlayerMover : MonoBehaviour {public float speed;private Rigidbody2D rb;private void Start() {rb = GetComponent<Rigidbody2D>(); // 拿到rigidbody2d}private void FixedUpdate() {float moveHorizontal = Input.GetAxis("Horizontal");float moveVertical = Input.GetAxis("Vertical");Vector2 movement = new Vector2(moveHorizontal, moveVertical);rb.AddForce(movement * speed); // 施加力}
}

这种写法需要在物体上加上rigidbody2d,然后根据输入向水平或垂直方向施加力,从而实现移动。注意2D环境下系统默认是横版跳跃视角,因此会有一个向下的重力,我们在实现俯视视角时需要把重力设置为0。

它的缺点是按键完后物体由于施加了力,会一直移动,而且如果按住不放会越来越快。 因此直接施加力体验并不好,我们可以改为直接设置速度,下面是最终的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class PlayerMover : MonoBehaviour {public float speed;private Rigidbody2D rb;private Vector2 movement;void Start() {rb = GetComponent<Rigidbody2D>();}void FixedUpdate() {ProcessInput();Move();}void ProcessInput() {float moveHorizontal = Input.GetAxis("Horizontal");float moveVertical = Input.GetAxis("Vertical");movement = new Vector2(moveHorizontal, moveVertical);}void Move() {rb.velocity = movement * speed;}
}

(2)摄像头跟随

这也一个很基础的脚本,在游戏中经常会用到,其实实现这个功能可以直接将摄像机和 player 设置为父子关系,但是这样会有一个缺点,一旦角色发生转动摄像机也会随之发生转动,造成视觉灾难,因此一般用脚本实现。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class CameraFollower : MonoBehaviour{public GameObject player;private Vector3 offset;// Start is called before the first frame updatevoid Start(){offset = transform.position - player.transform.position;}void LateUpdate(){transform.position = player.transform.position + offset;}
}

transform.position代表这个脚本附着的对象的位置,在我们的例子中即是摄像机的位置。 LateUpdateUpdate一样也会每帧被调用,不同的是它总发生在Update之后,也就是说我们在其中改变摄像机位置时,player 一定已经移动在先。核心代码其实只有一行,就是将摄像机的位置设置为当前 player 的位置,但是不能直接设置,因为尽管是2D场景,但是摄像机依然有三维的坐标,因此如果直接将摄像机摆在 player 位置,会导致镜头内拍不到任何东西。offset就是为此而存在,注意它只在start函数中计算,这时还没有发生任何移动,因此这个差值就是摄像机在同步到 player 位置后需要补上的Z轴坐标,我们需要将其加上。

Joystick Pack组件

用于在移动平台上创建虚拟摇杆,首先创建一个公有的Joystick变量joystick,然后将之前移动脚本的Input.GetAxis("Horizontal")换成joystick.Horizontal即可。

unity 2d摄像机类型_Unity使用笔记2——功能介绍相关推荐

  1. unity 2d摄像机类型_Unity法线水,顺便利用CommandBuffer实现廉价的深度和截屏

    最近其实做了好多东西,但是实在是忙啊 没有时间归纳和总结,先把最近做的这个东西拿出来和大家分享 后续逐步把所会的东西一点点分享出来 先放一个效果出来: 法线水最终效果https://www.zhihu ...

  2. unity 2d摄像机类型_Unity透明效果-开启深度写入的半透明效果实现

    上一部分中提到了由于关闭深度写入而产生的遮挡问题,本小节将进行一种解决上述问题的实践--开启深度写入的两个Pass的透明效果实现. 基本思想 使用两个Pass进行渲染: 第一个Pass开启深度写入,但 ...

  3. Unity 之 纹理类型导入设置和压缩格式介绍

    Unity 之 纹理类型导入设置和压缩格式介绍 一,纹理相关 1.1 导入设置 1.2 支持格式 二,纹理类型 2.1 纹理类型说明 2.2 纹理尺寸大小 三,所有支持的纹理压缩格式 一,纹理相关 1 ...

  4. Unity 2D游戏开发教程之摄像头追踪功能

    Unity 2D游戏开发教程之摄像头追踪功能 上一章,我们创建了一个简单的2D游戏.此游戏中的精灵有3个状态:idle.left和right.这看起来确实很酷!但是仅有的3个状态却限制了精灵的能力,以 ...

  5. Unity 2D 摄像机平滑跟随

    在相机跟随脚本中加入如下代码: public Transform Player; private Vector3 Pos;void LateUpdate() {Pos = Player.transfo ...

  6. 基于Unity的2D小游戏 SpeedDown 开发笔记(学习bilibili@[M_Studio]的教学视频

    基于Unity的2D小游戏 SpeedDown 开发笔记(学习bilibili@M_Studio的教学视频) 主要内容:在Sunnyland游戏的设计基础上,新增了物理组件Joint系列.DrawGi ...

  7. Unity 2D 学习笔记:游戏实例Sunnyland

    Unity 2D 学习笔记:游戏实例Sunnyland 01安装软件&导入素材 02编辑素材&Tilemap 03图层layer&角色建立 04角色移动 05角色方向& ...

  8. Unity之2D摄像机跟随

    Unity之2D摄像机跟随 在2D游戏制作过程中,摄像机的跟随主角移动是必不可少的.有代码实现,也有插件实现.下面分别讲述两种方法. Unity中提供了专属的摄像机插件进行使用: 官方Cinemach ...

  9. Unity 3D 摄像机的类型

    摄像机的类型 摄像机有两种类型:"Perspective"(放射观察角度)和"Orthographic"(垂直观察角度). 视图修改摄像机类型 在摄像机的Ins ...

最新文章

  1. PHP的xdebug五个按钮的说明
  2. 统计十进制数的二进制数1的个数
  3. 在Linux上安装Python3.6.1
  4. Linux C/C++多线程pthread实例
  5. 分布式系统的唯一ID
  6. 试用期这样做更快通过
  7. 笔记本上的CNN搞定了MNIST
  8. axios的拦截器(Interceptors)
  9. 算法 Tricks(四)—— 获取一个数二进制形式第一个不为 0 的位置
  10. 数据库实验5 数据库的嵌套查询实验
  11. Java泛型类继承实现
  12. 推荐 :一小时建立数据分析平台
  13. 中山大学3D游戏设计读书笔记 unity3D Note9
  14. MAC系统下测试IP+端口
  15. 树莓派4B中中文字体和中文输入法设置不成功问题解决办法
  16. 【MQ-2 可燃气体和烟雾传感器与 Arduino 配合使用】
  17. RK3288获取摄像头的Sensor ID【原创】
  18. 稳定获取Android设备唯一码(UUID)的解决方案
  19. 阿里云短信服务--SMS
  20. uploadify上传图片

热门文章

  1. commit your changes or stash them before you can merge
  2. 模块化的 Windows 7
  3. 世界上最大的黑客 Party,有关“DEFCON”的十个冷知识
  4. Webpack 资源管理
  5. ArcGIS的许可文件问题
  6. Struts2文件上传方式与上传失败解决方式
  7. 第十次课:前台首页设计及显示商品信息
  8. [C]计算某一天是该年中的第几天
  9. 在android平板上取位置和天气的实现方式
  10. 滴滴 Elasticsearch 集群跨版本升级与平台重构之路