防止 2D 播放器穿墙移动
Prevent 2D Player from moving through wall
我正在尝试制作自顶向下游戏的基础知识。
我目前有一个 Player 精灵,它应用了 Kinematic RigidBody2D 和 box collider 2D。这个精灵的比例是 (1,1).
墙精灵有一个大小为 (20,1) 的盒子碰撞器。
我使用以下代码来控制播放器。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour {
public Rigidbody2D rb2D;
void Start() {
rb2D = GetComponent<Rigidbody2D>();
}
void FixedUpdate() {
if (Input.GetKey (KeyCode.UpArrow)) {
Vector2 move = new Vector2(0,1);
rb2D.MovePosition(rb2D.position + move);
}
if (Input.GetKey (KeyCode.DownArrow)) {
Vector2 move = new Vector2(0,-1);
rb2D.MovePosition(rb2D.position + move);
}
}
}
使用上面的代码,我可以控制播放器并将它们向上或向下移动,当试图击中播放器下方的墙壁时,播放器不会击中墙壁,而是穿过它,就好像它不存在一样。
我是 Unity 的新手,所以任何其他可能有用的信息都可以随时告诉我,我会更新我的问题。
谢谢!
取消勾选RigidBody2D
组件中的IsKinematic
属性。这是因为将 isKinematic 设置为 true 会使您的 gameObject
NOT 受到任何 physical 或重力 力。
还要看看你的 wall 是否没有被标记为 IsTrigger
!检查你墙的 Collider 组件。
我正在尝试制作自顶向下游戏的基础知识。
我目前有一个 Player 精灵,它应用了 Kinematic RigidBody2D 和 box collider 2D。这个精灵的比例是 (1,1).
墙精灵有一个大小为 (20,1) 的盒子碰撞器。
我使用以下代码来控制播放器。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour {
public Rigidbody2D rb2D;
void Start() {
rb2D = GetComponent<Rigidbody2D>();
}
void FixedUpdate() {
if (Input.GetKey (KeyCode.UpArrow)) {
Vector2 move = new Vector2(0,1);
rb2D.MovePosition(rb2D.position + move);
}
if (Input.GetKey (KeyCode.DownArrow)) {
Vector2 move = new Vector2(0,-1);
rb2D.MovePosition(rb2D.position + move);
}
}
}
使用上面的代码,我可以控制播放器并将它们向上或向下移动,当试图击中播放器下方的墙壁时,播放器不会击中墙壁,而是穿过它,就好像它不存在一样。
我是 Unity 的新手,所以任何其他可能有用的信息都可以随时告诉我,我会更新我的问题。
谢谢!
取消勾选RigidBody2D
组件中的IsKinematic
属性。这是因为将 isKinematic 设置为 true 会使您的 gameObject
NOT 受到任何 physical 或重力 力。
还要看看你的 wall 是否没有被标记为 IsTrigger
!检查你墙的 Collider 组件。