2015-12-06 107 views
0

我正在創造一個統一的2D遊戲,在這個遊戲中需要一個名爲Moving_Truck的GameObject順利地從左側移動到場景中。因爲這會在稍後需要的時候,我試圖使方法從另一個對象上的其他代碼運行,該對象被稱爲場景控制,並且該腳本被稱爲開放場景。雪碧不移動unity2D C#

問題是當我按下空間按鈕時Moving_Truck遊戲對象不移動。我對C#相當陌生,並嘗試過一些解決方案,如Vector2.MoveTowards和Vector2.Lerp。我也多次修改了我的代碼,試圖使其發揮作用。這裏是最近的代碼版本:

CharacterBase

using UnityEngine; 
using System.Collections; 

public class CharacterBase : MonoBehaviour { 
    private float SprSize, HalfSprSize, Distance; 
    public int run = 1; 

    public void CharMove(int Dir, string Char, float speed, string BackgroundName) 
    { 
     var CharOBJ = GameObject.Find(Char); 
     var BGOBJ = GameObject.Find(BackgroundName); 
     SprSize = CharOBJ.GetComponent<Renderer>().bounds.size.x; 
     HalfSprSize = SprSize/2; 
     Vector2 EndPos = new Vector2(BGOBJ.transform.position.x, CharOBJ.transform.position.y); 
     Debug.Log(EndPos); 
     CharOBJ.transform.position = Vector2.MoveTowards(CharOBJ.transform.position, EndPos, speed * Time.deltaTime); 
    } 
} 

OpeningScene

using UnityEngine; 
using System.Collections; 

public class OpeningScene : CharacterBase { 
    int Advance = 0, Run = 0; 

    void Start() 
    { 

    } 

    void FixedUpdate() 
    { 
    if (Input.GetKeyUp("space")) 
     { 
      Run = 1; 
      Debug.Log("Space Pressed"); 
     } 
    if (Run == 1) 
     { 
      Run = 0; 
      Advance += 1; 
      switch (Advance) 
      { 
       case 1: 
        CharMove(-1, "Moving_Truck", 0.05f, "House_Front"); 
        break; 
       case 2: 
        CharMove(1, "Moving_Truck", 0.05f, "House_Front"); 
        break; 
      } 
     } 
    } 
} 

這是我發瘋,我一直在試圖修復它大約一個小時或兩個現在,有人可以請幫忙,對於長期問題也抱歉,只是評論,如果你需要更多的信息。也請暫時忽略Dir參數。 謝謝。

回答

1

Unity的Input.GetKeyUp只在釋放空格鍵時在幀上返回true。正因爲如此,CharMove只會被稱爲一幀你按空格鍵,然後只移動0.05f * timeDelta,這可能會少於一個像素。

此外,這是不相關的,但您不希望每次移動角色時都調用GameObject.Find(string)。相反,在Start()方法中調用它一次,然後將結果存儲到一個字段中。

+0

太感謝你了,它就像一個魅力 – Avian

0

你試過

GetComponent<Rigidbody2D>().velocity = new Vector2 (moveSpeed, GetComponent<Rigidbody2D>().velocity.y);