2015-12-06 2 views
0

Я создаю игру в единстве 2D, и в этой игре GameObject под названием Moving_Truck требуется плавно перемещаться в сцену с этой левой стороны. так как это потребуется позже, я попытался заставить этот метод запускаться из другого кода на другом объекте, объект называется управлением сценой, а сценарий называется открывающей сценой.Sprite не двигается в единстве2D 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 Argument. Спасибо.

ответ

1

Unity's Input.GetKeyUp возвращает true только в кадре при отпускании пробела. Из-за этого CharMove будет называться только одним фреймом, который вы нажимаете на пробел, а затем перемещаете только 0.05f * timeDelta, который, вероятно, будет меньше пикселя.

Кроме того, это не связано, но вы не хотите вызывать GameObject.Find (string) каждый раз, когда вы перемещаете символ. Вместо этого вызовите его один раз в методе Start(), а затем сохраните результат в поле.

+0

Большое спасибо, это работает как шарм – Avian

0

Вы пробовали

GetComponent<Rigidbody2D>().velocity = new Vector2 (moveSpeed, GetComponent<Rigidbody2D>().velocity.y); 
Смежные вопросы