【问题标题】:Sprite not moving in unity2D C#精灵在unity2D C#中不动
【发布时间】:2015-12-06 01:30:29
【问题描述】:

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

问题是当我按下空格键时,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);
    }
}

开场场景

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

【问题讨论】:

    标签: c# vector unity3d 2d


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      你试过了吗

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-06
        • 2021-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多