我在团结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。 感谢。
答案 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);