Unity 2D Rigidbody.velocity和transform.position会导致随机的“鬼魂”。帧

时间:2015-09-14 21:38:32

标签: unity3d unity3d-2dtools

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

我的角色使用RigidBody.velocity移动,这就像我需要它一样,当我的角色到达屏幕左侧或右侧的一个极端时,我使用transform.position来移动(有效地传送)角色到屏幕的另一边,然后我改变了房间。这样就可以移动到下一个房间。

我的翻转屏幕代码工作正常,更改房间效果没有问题,事实上几乎所有的工作都像我喜欢它,除了我得到1帧,字符出现在字符移动之间的随机点从他搬到的地方。

例如,我的房间是16个瓷砖,如果我的角色向左移动并经过x位置' 0' (屏幕的最左边)我做了一个transform.position到x位置16(保持y位置不变),然后改变房间。我记录了这个动作,发生了什么(伪代码)..

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;
}

我尝试在更新,固定更新和延迟更新中调用checkRoomBounds(),所有都给出相同的结果。如果我没有调用moveRoom()函数,但是房间没有改变,但是moveRoom()代码是......

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);
}

我已经没有想法,也不知道我哪里出错了。任何帮助将不胜感激。

非常感谢提前

0 个答案:

没有答案