很抱歉再次打扰你,但是因为我开始使用Unity并且我对开发2D游戏非常感兴趣,并且像2D Unity示例项目没有设计2D控件,为此,我需要制作2D输入控件游戏,对于它,有人可以帮助我为这个2D样本创建它们吗? 提前致谢。 最好的祝福 亚历
答案 0 :(得分:4)
作为一个非常简单的答案,你应该首先选择你想为角色的运动保留的两个轴。例如,您可以选择沿x
和y
轴移动角色,忽略z
。
然后,您应该将水平和垂直轴输入映射到角色的移动,考虑移动速度(您可以定义为变量)以及最后一帧与实际帧之间经过的时间
因此,考虑在x
和y
轴上移动角色,您可以执行类似的操作:
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 中的值,它对测试目的很有用。我在我之前的一个项目中发现了这段代码,它在那里运行良好,所以它应该对你有用。