我正在创建一个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);
}
我已经没有想法,也不知道我哪里出错了。任何帮助将不胜感激。
非常感谢提前