2017-10-11 9 views
2

나는 단결의 초보자이며 2D 플랫폼 작성자를 스크립팅 할 때 YouTube 가이드를 따르고 있습니다. 이제 제가 돌아 가면 스프라이트에 플립을 추가하려고합니다. 반대 방향으로 갈 수 있습니다.Unity 2D의 스프라이트 플립 핑 문제

코드를 추가 했으므로 이제는 왼쪽에서 오른쪽으로 계속 튀어 나오고 있습니다. 만약 내가 지속적으로 실행> 0.1f 지속적으로 실행하는 기능의 결과로하지만 정직하게 나는 잃어버린 그래서 어떤 도움을 주시면 감사하겠습니다.

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



} 

답변

2

귀하의 오류는 플립 후, 조건이 여전히 true로 평가 여기

void FixedUpdate(){ 
if ((Input.GetAxis("Horizontal") > 0.1f && this.transform.localScale.x != 1)|| (Input.GetAxis("Horizontal") < -0.1f && this.transform.localScale.x != 
-1)){ 
     flip(); 
    } 
} 

입니다. 이미 뒤집 혔는지 확인하고 다시 넘겨주지 않았는지 확인하려면 부울 hasflipped이 필요합니다.

고정 업데이트로 인해이 체크가 프레임 당 한 번 발생하므로 묶음을 얻습니다 한 번만 넘기기로 지정하지 않으면 스프라이트가 모든 프레임을 뒤집기 때문에 깜박임

+0

예제 스크립트를 제공해 주시겠습니까? 나는 당신이 적용하는 것이 어렵다는 것을 이해합니다 :) – James

+0

대신'Input.GetKeyDown ("/ * the key * /")'를 사용하십시오 :) 당신은'FixedUpdate()'함수에서 그것을 호출 할 수 있습니다. 일단. 희망이 도움이! –