808 words
4 minutes
Untity学习记录-实现一个完整的2D游戏Demo-05-实现人物的移动和反转
一、使用 Rigidbody 2D 的 Velocity 进行移动:
- Rigidbody 驱动坐标: 强调一旦物体挂载了 Rigidbody 2D 组件,其位置和旋转主要由 Rigidbody 控制,可以通过查看 Rigidbody 组件的 Info 面板来了解其
position、rotation和velocity。 - 使用速度驱动移动: 相较于直接修改 Transform 的坐标,通过修改 Rigidbody 的
velocity来实现物理效果更真实的移动。 - 创建 Speed 变量: 创建一个
public float speed变量,用于控制角色的移动速度,可以在 Unity 编辑器中调整。 - 在 FixedUpdate 中执行物理操作: 解释了
FixedUpdate()函数以固定的时间间隔执行,适合进行物理相关的操作,确保在不同性能的设备上表现一致。 - 创建 Move 函数: 创建一个自定义的
void Move()函数来包含角色移动的逻辑。 - 在 FixedUpdate 中调用 Move 函数: 在
FixedUpdate()函数中调用Move()函数,使移动逻辑在固定的物理更新周期内执行。
二、获取 Rigidbody 2D 组件:
方法一:在 Inspector 中拖拽:
- 声明一个
public Rigidbody2D rb变量。 - 将 Player 对象上的 Rigidbody 2D 组件直接拖拽到 Inspector 窗口中
rb变量的槽位中。 - 优点:获取速度快,适用于需要在游戏开始前就确定引用的情况。
- 声明一个
方法二:通过代码获取 (GetComponent):
- 声明一个
private Rigidbody2D rb变量。 - 在
Awake()函数中使用rb = GetComponent<Rigidbody2D>();来获取自身 GameObject 上的 Rigidbody 2D 组件。 - 解释了
public(公开,可在 Inspector 和其他脚本访问) 和private(私有,仅限当前脚本访问) 关键字的区别。
- 声明一个
三、修改 Rigidbody 2D 的速度 (Velocity):
访问 Velocity: 通过
rb.velocity访问 Rigidbody 2D 的速度属性。设置新的速度: 将
velocity设置为一个新的Vector2值:new Vector2(inputDirection.x * speed * Time.deltaTime, rb.velocity.y);。-
inputDirection.x : 获取水平方向的输入值 (-1, 0, 1 或手柄的模拟值)。 -
speed : 应用设定的移动速度。 -
Time.deltaTime : 使移动速度与帧率无关,保证在不同性能的设备上速度一致。 -
rb.velocity.y : 保留原有的垂直方向速度,以保持重力效果。
-
四、实现角色翻转:
翻转的两种方法:
- 修改
transform.localScale.x的值(例如设置为 -1 可以实现水平翻转)。 - 使用
SpriteRenderer组件的flipX属性。
- 修改
使用
transform.localScale.x 进行翻转:- 访问 Transform 组件: 通过
transform(小写) 直接访问 GameObject 的 Transform 组件。 - 创建
faceDirection 变量: 创建一个int faceDirection变量来记录角色的朝向 (1 为右,-1 为左)。 - 初始化
faceDirection : 将faceDirection初始化为当前的transform.localScale.x(强制转换为int)。 - 根据输入方向更新
faceDirection : 使用if语句判断inputDirection.x的正负来更新faceDirection的值。 - 应用翻转: 设置
transform.localScale = new Vector3(faceDirection, 1, 1);来根据faceDirection的值翻转角色。
- 访问 Transform 组件: 通过
五、关于 SpriteRenderer.flipX :
- 获取
SpriteRenderer 组件: 可以使用GetComponent<SpriteRenderer>()来获取角色身上的SpriteRenderer组件。 - 使用
flipX 属性: 通过GetComponent<SpriteRenderer>().flipX = true;或false;来控制是否在 X 轴翻转精灵。
六、代码周期函数的重要性:
-
Update() : 每帧执行。 -
FixedUpdate() : 以固定的时间间隔执行,用于物理相关的操作。 -
OnEnable() 和 OnDisable() : 在 GameObject 启用和禁用时执行。 -
Awake() : 在Start()函数之前执行。
Untity学习记录-实现一个完整的2D游戏Demo-05-实现人物的移动和反转
https://fuwari.vercel.app/posts/unity/2dadvanture/05playerfilp/
