1
我有兩個箱子碰撞的GameObjects。一個是玩家,以固定的速度向另一個移動。碰撞停止播放器(便便字符; d)箱子碰撞2D在Unity中重疊
我不知道爲什麼會這樣。碰撞頂部或底部的作品很好......從左側發生同樣的效果。綠色塊只有一個對撞機,沒有RigidBody。
另一個GIF,與MovePosition()...碰撞fromt頂級作品,但 「重新進入」 停止字符。爲什麼?!
- GIF,上下移動是好的,左,右的塊頂部減慢他下來。奇怪的...
運動腳本:
public class PlayerController : MonoBehaviour
{
public float Speed = 10f;
private Rigidbody2D rb2D;
private Vector2 DirectionLeft;
private Vector2 DirectionRight;
private Vector2 DirectionUp;
private Vector2 DirectionDown;
private Vector2 CurrentDirection;
// Use this for initialization
void Start()
{
rb2D = GetComponent<Rigidbody2D>();
DirectionLeft = new Vector2(Speed*-1, 0);
DirectionRight = new Vector2(Speed, 0);
DirectionUp = new Vector2(0, Speed * -1);
DirectionDown = new Vector2(0, Speed);
CurrentDirection = DirectionLeft;
}
void SetAnimationDirection()
{
Vector3 scale = transform.localScale;
if (CurrentDirection == DirectionLeft)
scale.x = 1;
else
scale.x = -1;
transform.localScale = scale;
}
void FixedUpdate()
{
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
if (moveHorizontal > 0)
CurrentDirection = DirectionRight;
if (moveHorizontal < 0)
CurrentDirection = DirectionLeft;
if (moveVertical < 0)
CurrentDirection = DirectionUp;
if (moveVertical > 0)
CurrentDirection = DirectionDown;
Debug.Log(CurrentDirection);
SetAnimationDirection();
rb2D.velocity = CurrentDirection;
}
嗨,問題是因爲你正在修改'SetAnimationDirection'函數中'transform.localScale'。這是每幀或物理幀完成的。只執行'transform.localScale = scale'會很好。當你改變移動方向而不是每次都在做.....你不這麼認爲嗎? – Programmer
嗨,感謝您檢查:)現在它正在工作:D但是當在第三個GIF中移動時,角色仍然卡住。你知道爲什麼會發生這種情況嗎?! (我的意思是在頂部碰撞,向右移動,然後向左移動=>卡在邊緣)。但非常感謝你! :D – DoubleVoid
我會添加一個新問題。這似乎是一個普通的2D物理問題......只是用一個最小的Unity 2D項目重現它...... – DoubleVoid