Je suis nouveau à l'unité et je suivais un guide youtube sur le scripting d'un jeu de plateforme 2D, je suis arrivé au point où j'essaye d'ajouter une bascule au sprite quand je tourne aller dans la direction opposée.Problème avec l'inversion de sprite dans Unity 2D
J'ai ajouté un code et maintenant cela tourne constamment de gauche à droite. Si je comprends bien, c'est probablement parce que je suis constamment en train d'appliquer> 0.1f lorsque je bouge, ce qui entraîne la fonction de fonctionner continuellement mais honnêtement, je suis perdu et toute aide serait appréciée.
using UnityEngine;
using System.Collections;
[RequireComponent (typeof (Controller2D))]
public class Player : MonoBehaviour {
public float jumpHeight = 4;
public float timeToJumpApex = .4f;
float accelerationTimeAirbourne = .2f;
float acceleratinTimeGrounded =.1f;
public float moveSpeed = 6;
float jumpVelocity;
float gravity;
Vector3 velocity;
float velocityXSmoothing;
Controller2D controller;
void Start(){
controller = GetComponent<Controller2D>();
gravity = -(2 * jumpHeight)/Mathf.Pow (timeToJumpApex, 2);
jumpVelocity = Mathf.Abs(gravity) * timeToJumpApex;
print ("gravity: " + gravity + " Jump Velocity: " + jumpVelocity);
}
void Update(){
if (controller.collisions.above || controller.collisions.above) {
velocity.y = 0;
}
Vector2 input = new Vector2 (Input.GetAxisRaw ("Horizontal"),
Input.GetAxisRaw ("Vertical"));
if (Input.GetKeyDown (KeyCode.Space) && controller.collisions.below) {
velocity.y = jumpVelocity;
}
float targetVelocityX = input.x * moveSpeed;
velocity.x = Mathf.SmoothDamp(velocity.x, targetVelocityX, ref
velocityXSmoothing, (controller.collisions.below)?
acceleratinTimeGrounded:accelerationTimeAirbourne);
velocity.y += gravity * Time.deltaTime;
controller.Move(velocity * Time.deltaTime);
}
void FixedUpdate(){
if ((Input.GetAxis("Horizontal") > 0.1f && this.transform.localScale.x != 1)
|| (Input.GetAxis("Horizontal") < -0.1f && this.transform.localScale.x !=
-1))
{
flip();
}
}
void flip()
{
this.transform.localScale = new Vector3(this.transform.localScale.x *
-1,
this.transform.localScale.y, this.transform.localScale.z);
}
}
Seriez-vous si aimable de me donner un exemple de script? Je comprends ce que vous voulez dire, mais l'application est difficile :) – James
utilisez 'Input.GetKeyDown ("/* the key */")' à la place :) De cette façon, vous pouvez l'appeler dans la fonction 'FixedUpdate()' une fois que. J'espère que cela t'aides! –