Unity3d Unity 2D Rigidbody.velocity和transform.position导致随机';鬼';框架

Unity3d Unity 2D Rigidbody.velocity和transform.position导致随机';鬼';框架,unity3d,unity3d-2dtools,Unity3d,Unity3d 2dtools,我正在创建一个2D平台/冒险游戏,它使用翻转屏幕来管理更衣室 我的角色使用RigidBody.velocity移动,这是我需要的,当我的角色到达屏幕的左侧或右侧极限时,我使用transform.position将角色移动(有效地传送)到屏幕的另一侧,然后我更改房间。这样就产生了沿着移动到下一个房间的效果 我的翻转屏幕代码工作正常,更衣室效果毫无问题,事实上,几乎所有东西都能按我喜欢的方式工作,只是我得到了一帧,其中角色出现在角色从哪里移动到哪里的随机点之间 例如,我的房间有16个平铺,如果我的角

我正在创建一个2D平台/冒险游戏,它使用翻转屏幕来管理更衣室

我的角色使用
RigidBody.velocity
移动,这是我需要的,当我的角色到达屏幕的左侧或右侧极限时,我使用transform.position将角色移动(有效地传送)到屏幕的另一侧,然后我更改房间。这样就产生了沿着移动到下一个房间的效果

我的翻转屏幕代码工作正常,更衣室效果毫无问题,事实上,几乎所有东西都能按我喜欢的方式工作,只是我得到了一帧,其中角色出现在角色从哪里移动到哪里的随机点之间

例如,我的房间有16个平铺,如果我的角色向左移动并通过x位置“0”(屏幕最左侧),我将transform.position转换为x位置16(保持y位置不变),然后更改房间。我已经记录了运动,发生的是(伪代码)

我已经没有主意了,不知道哪里出了问题。任何帮助都将不胜感激


事先非常感谢

如果您在更改房间时将transform.position更改为myBody.position,是否仍然会发生这种情况?嗯,不确定为什么它会适用于这种情况,但请检查您的
Rigidbody2d
的插值设置。一般来说,它可能会这样做,在前一个位置和下一个位置之间进行插值。但是,我认为仅使用
myBody.position
会有此问题,而不是
transform.position
。我将检查这两个并报告。谢谢。这确实是一个插曲。非常感谢,这已经困扰了我好几个星期了!如果你想添加它作为答案,我会将它标记为正确的答案。顺便说一句,它同时影响myBody.position和transform.position。当您更改房间时,如果将transform.position更改为myBody.position,是否仍会发生这种情况?嗯,不确定为什么在这种情况下会应用它,但请检查您的
Rigidbody2d
的插值设置。一般来说,它可能会这样做,在前一个位置和下一个位置之间进行插值。但是,我认为仅使用
myBody.position
会有此问题,而不是
transform.position
。我将检查这两个并报告。谢谢。这确实是一个插曲。非常感谢,这已经困扰了我好几个星期了!如果你想添加它作为答案,我会将它标记为正确的答案。顺便说一句,它同时影响myBody.position和transform.position。
x < 0 (the change room code is run)
translate.position to x=16 (the far right)
x = 16 (this is correct)
The room changes
x = some float somewhere between 0 and 16 (this is NOT correct)
x = 16 (back to the correct position again)
using UnityEngine;
using System.Collections;

public class MKManager : MonoBehaviour {
public float maxSpeed = 0.10f;
bool isFacingRight = false;
Rigidbody2D myBody;
bool grounded = true;
public static int liftdirection = 0;

void Start (){
    myBody = GetComponent<Rigidbody2D> ();
}

void Update () {
    checkRoomBounds ();
}

void FixedUpdate(){
    float h = Input.GetAxisRaw ("Horizontal");
    if (grounded) {
        myBody.velocity = new Vector2 (h * maxSpeed, myBody.velocity.y);
        if (h < 0) { //Moving Left
            if (isFacingRight) {
                FlipAnimation ();
            }
        } else if (h > 0) { //Moving Right
            if (!isFacingRight) {
                FlipAnimation ();
            }
        }
    } 
}

void checkRoomBounds(){
    if (transform.position.x < 0) {
        transform.position = new Vector3 (16.0f, transform.position.y, 0.0f);
        GameManager.instance.moveRoom (-1);
    } else if (transform.position.x > 16) {
        transform.position = new Vector3 (0.0f, transform.position.y, 0.0f);
        GameManager.instance.moveRoom (1);
    }
}

void FlipAnimation(){
    isFacingRight = !isFacingRight;
    Vector3 theScale = transform.localScale;
    theScale.x *= -1;
    transform.localScale = theScale;
}
public void moveRoom(int direction){
    if (room == 0) {
        room = (10*currentFloor) + 1;
    } else {

        room += direction;
        if (room == -1) {
            room = 68;
        } else if (room == 69) {
            room = 0;
        } else if (room % 10 == 9 || room % 10 == 0) {
            //room += (direction * 2);
            room = 0;
        }
    }
    boardScript.SetupScene (room);
}