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