2015-12-06 64 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);