精灵不会在unity2D C#

时间:2015-12-06 01:30:30

标签: c# vector unity3d 2d

我在团结2D中创建游戏,在这个游戏中,需要一个名为Moving_Truck的GameObject从左侧平滑地移动到场景中。因为这将在以后需要,我试图使该方法从另一个对象上运行另一个对象,该对象称为场景控制,该脚本称为开放场景。

问题是当我按下空格按钮时,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。 感谢。

2 个答案:

答案 0 :(得分:1)

Unity释放空格键时,Input.GetKeyUp仅在帧上返回true。因此,CharMove只会被称为按空格键的一帧,然后只移动0.05f * timeDelta,这可能会小于一个像素。

此外,这是无关的,但是每次移动角色时都不想调用GameObject.Find(string)。而是在Start()方法中调用一次,然后将结果存储到字段中。

答案 1 :(得分:0)

你试过吗

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