这不是正确的论坛这个问题,但我在心情回答,所以我会。我希望它能帮助你,即使它被标记出来,呵呵。
因此,对于你简单的2D平台游戏,你需要:
玩家
- 与物理(刚体组件)
- 和碰撞(专栏对撞机部件)
- 左/右运动和跳跃(代码)
- 可以检测触发器,如通电/尖峰/水平结束(代码)
平地对象
- 用对撞机(所以玩家可以在上面行走)(专栏撞机部件)
皮卡
- 与触发对撞机(所以玩家可以穿过他们&检测它们)(箱对撞组件)
通过Unity启动创建一个新的2D项目。 检查2D按钮。
您的播放器应现在看起来像这样http://i.imgur.com/be6G2pB.png(+播放器脚本)
- 这里是播放器脚本。可能会有一些错误(例如,即使不在地面上,玩家也可以永远跳跃),尝试修复它们,或者改善它,如果它不够好。它需要玩家有Rigidbody2D - & Collider2D -component (一对撞机部件可以是一个盒子撞机,对撞机circel等等等任何形状),这是我们在最后一步增加。该Rigidbody2d给玩家物理(重力下降,受此影响被迫)和撞机给它的能力,碰撞的事情。如果没有这个,玩家只会掉落地面,无法检测是否触及其他触发器/对撞机。
这是一个C#-cript,我建议您使用它。它非常类似于java,容易拾取。大多数情况下是统一特定的:
using UnityEngine;
public class Test : MonoBehaviour {
float speed = 3f;
Rigidbody2D rb;
int coins = 0;
Vector3 startingPosition; // If we hit a spike we will teleport player to starting position.
void Start()
{
rb = GetComponent<Rigidbody2D>(); // Get the rigidbody component added to the object and store it in rb
startingPosition = transform.position;
}
void Update()
{
var input = Input.GetAxis("Horizontal"); // This will give us left and right movement (from -1 to 1).
var movement = input * speed;
rb.velocity = new Vector3(movement, rb.velocity.y, 0);
if (Input.GetKeyDown(KeyCode.Space))
{
rb.AddForce(new Vector3(0, 100, 0)); // Adds 100 force straight up, might need tweaking on that number
}
}
void OnTriggerEnter2D(Collider2D col) // col is the trigger object we collided with
{
if (col.tag == "Coin")
{
coins++;
Destroy(col.gameObject); // remove the coin
}
else if (col.tag == "Water")
{
// Death? Reload Scene? Teleport to start:
transform.position = startingPosition;
}
else if (col.tag == "Spike")
{
// Death? Reload Scene? Teleport to start:
transform.position = startingPosition;
}
else if (col.tag == "End")
{
// Load next level? Heres how you get this level's scene number, add 1 to it and load that scene:
// SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
}
}
}
接下来,让我们创建我们的关卡对象。
右键单击该层次结构,然后单击“创建空”。这将像我们所有关卡对象的文件夹一样,保持整洁。右键单击这个新创建的空游戏对象并单击“2D对象 - > Sprite”并将其命名为“Floor”(或其他)。如果你想看到它,就像我们对玩家做的那样给它一个精灵! (再次使用gif:http://i.imgur.com/6cKQCss.gifv)给这个块添加一个“Box Collider 2D”组件。玩家现在可以站在这些物体上。你现在可以继续运行游戏,你应该可以有一个(有点)功能的玩家和对象让玩家站在上面。在其Transform组件中更改其值以更改其大小属性。如果您需要更多(您将会),您可以复制并粘贴此对象。还有一种叫做“预制”的东西。这就像保存一个游戏对象,所以你可以多次使用它,并有更多的好处,你会稍后意识到。要将GameObject作为预制件保存,只需将对象从游戏层次结构拖放到Projects Assets文件夹中的某个位置(就像我们用sprites做的那样)。
对于硬币,做同样的事情,但给它一个新的标签(如何创建新的标签:http://i.imgur.com/dYt9b0T.gifv)称为“硬币”,并在框中Colldier 2D部件,检查“为触发”按钮。这会让我们在进入时触发OnTriggerEnter2D,玩家不会站在上面;我们会直接通过它(因为它只是一个触发器)。我们将使用标签名称来标识播放器中OnTriggerEnter2D方法中的对象类型。
为所需的其他物体重复硬币步骤。我们识别它们并处理我们想要的动作
void OnTriggerEnter2D(Collider2D col)
{
if (col.tag == "Coin")
{
coins++;
Destroy(col.gameObject);
}
else if (col.tag == "Water")
{
transform.position = startingPosition;
}
else if (col.tag == "Spike")
{
// Death? Reload Scene? Teleport to start:
transform.position = startingPosition;
}
else if (col.tag == "End")
{
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
}
/*
*
* Keep adding objects to collide with here!
*
*/
}
这是您如何询问的基本示例。更深入的知识...更多重要的信息将...
每个对象都有作为变换,其中包含对象的位置,旋转和缩放。修改这些(在脚本中:transform.position,transform.rotation,transform.localScale)来修改......以及上述属性。
要在代码中获取组件,您需要使用GetComponent();其中Component是您想要的组件,就像我们在rb = GetComponent<Rigidbody>();
的Player-script中所做的那样。
现在做这个例子,展开它,google“Unity如何...“如果您需要任何帮助或要求在这里,如果你不能得到它的工作。
快乐Unitying!哦,问的路程,如果你对我的回答了问题。
我一直感兴趣的同样的事情,但我看到有人建议首先学习Java或C/C++的Flash游戏,我想看看人们回答的问题 – jhhoff02
从简单的开始就很好,我想你可能运气更好找到[http: //gamedev.stackexchange.com/](http://gamedev.stackexchange.com/) – Catwood
这是一个非常广泛的问题,需要一个非常深刻的答案。正如上面的评论所述,它可能更适合在另一个论坛,但我我会一起写一些东西让你开始!坚持 – Maakep