2017-10-11 75 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

你的錯誤是在這裏

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(「/ *鍵* /」)'而不是:)這樣你可以在'FixedUpdate()'函數中調用它,它只會觸發一旦。希望這可以幫助! –