Проблема в том, что вращение не зависит от масштабирования. Только относительные шкалы и позиции.
Также, почему вы используете > Mathf.Epsilon
, а не просто > 0
. Насколько я понимаю, вам нужно только проверить, не равен ли он 0 ... использование Mathf.Epsilon
настолько мало, что на самом деле это не имеет значения.
public void Move()
{
float controlThrow = CrossPlatformInputManager.GetAxis("Horizontal");
Vector2 playerVelocity = new Vector2(controlThrow * runSpeed, myRigidBody.velocity.y);
myRigidBody.velocity = playerVelocity;
bool playerHasHorizontalSpeed = Mathf.Abs(myRigidBody.velocity.x) > 0;
myAnimator.SetBool("Walking", playerHasHorizontalSpeed);
}
// store the last direction
int direction;
public void Flipsprite()
{
bool playerhashorizontalspeed = Mathf.Abs(myRigidBody.velocity.x) > 0;
if (playerhashorizontalspeed)
{
// update the direction
direction = Mathf.Sign(myRigidBody.velocity.x);
transform.localScale = new Vector2(direction, 1f);
}
}
Затем, когда вы снимаете, умножьте направление также на direction
private IEnumerator FireContinuously()
{
while (true)
{
GameObject laser = Instantiate(bullet, firePoint.position, firePoint.rotation);
laser.GetComponent<Rigidbody2D>().velocity = new Vector2(projectileSpeed * direction, 0);
yield return new WaitForSeconds(projectileFiringPeriod);
}
}
небольшой намек:
Если вы делаете тип
public RigidBody2D bullet
и снова перетащите соответствующий префаб, чтобы вам не нужно было использовать GetComponent
, но вы могли бы напрямую использовать
var laser = Instantiate(bullet, firePoint.position, firePoint.rotation);
laser.velocity = ...