繁体   English   中英

精灵未在unity2D C#中移动

[英]Sprite not moving in unity2D C#

我正在创建一个统一的2D游戏,在此游戏中,需要一个名为Moving_Truck的GameObject才能从左侧顺利移入场景。 因为稍后将需要这样做,所以我尝试使该方法从另一个对象的另一个代码运行,该对象称为场景控制,而脚本称为打开场景。

问题是当我按下空间按钮时,Moving_Truck游戏对象不会移动。 我对C#相当陌生,并尝试了一些解决方案,例如Vector2.MoveTowards和Vector2.Lerp。 我也多次修改我的代码,以使其正常工作。 这是代码的最新版本:

角色库

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。 谢谢。

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

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

你有没有尝试过

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM