如何在Unity中进行2D输入控制?

时间:2013-12-23 14:28:18

标签: unity3d

很抱歉再次打扰你,但是因为我开始使用Unity并且我对开发2D游戏非常感兴趣,并且像2D Unity示例项目没有设计2D控件,为此,我需要制作2D输入控件游戏,对于它,有人可以帮助我为这个2D样本创建它们吗? 提前致谢。 最好的祝福 亚历

2 个答案:

答案 0 :(得分:4)

作为一个非常简单的答案,你应该首先选择你想为角色的运动保留的两个轴。例如,您可以选择沿xy轴移动角色,忽略z

然后,您应该将水平和垂直轴输入映射到角色的移动,考虑移动速度(您可以定义为变量)以及最后一帧与实际帧之间经过的时间

因此,考虑在xy轴上移动角色,您可以执行类似的操作:

var speed = 20.0;

function Update () {
   var x = Input.GetAxis("Horizontal") * Time.deltaTime * speed;
   var y = Input.GetAxis("Vertical") * Time.deltaTime * speed;
   transform.Translate(x, y, 0);
}

可以用自然语言翻译为:" 在每一帧(因为你在Update()函数中),在x和y轴上翻译你的角色,关于两者之间的时间间隔最后两帧和速度(= 20)。"

答案 1 :(得分:0)

我建议使用与上一个答案类似的代码片段,只需稍作调整,因为您还没有真正指定它是自上而下还是平台类型游戏,这是我在 c# 中建议的代码

public float speed;                //Floating point variable to store the player's movement speed.

private Rigidbody2D rb2d;        //Store a reference to the Rigidbody2D component required to use 2D Physics.

// Use this for initialization
void Start()
{
    //Get and store a reference to the Rigidbody2D component so that we can access it.
    rb2d = GetComponent<Rigidbody2D> ();
}

//FixedUpdate is called at a fixed interval and is independent of frame rate. Put physics code here.
void FixedUpdate()
{
    //Store the current horizontal input in the float moveHorizontal.
    float moveHorizontal = Input.GetAxis ("Horizontal");

    //Store the current vertical input in the float moveVertical.
    float moveVertical = Input.GetAxis ("Vertical");

    //Use the two store floats to create a new Vector2 variable movement.
    Vector2 movement = new Vector2 (moveHorizontal, moveVertical);

    //Call the AddForce function of our Rigidbody2D rb2d supplying movement multiplied by speed to move our player.
    rb2d.AddForce (movement * speed);
}

如果你的意思是更多基于平台的运动,那么请告诉我我也可以为你提供代码!需要注意的一件事是,我在定义速度之前使用了 public,因为这允许您调整 unity gui 中的值,它对测试目的很有用。我在我之前的一个项目中发现了这段代码,它在那里运行良好,所以它应该对你有用。