创建一个新项目
这适用于2D项目。

进口资产
单击并将包含所需资产的文件夹拖到Unity项目的Assets文件夹中。 您也可以单独将资产拖到项目中,但是我发现首先从一些默认的Sprite和事物开始,然后再使用特定的Sprite对其进行更新,然后将未使用的Sprite进一步删除,可以更快地进行开发。
- 开发人员博客14:启动板总结
- Google I / O 2018上的Flutter Hot Reload游戏
- Cocos Creator教程:The Cannon 2,第3部分
- CampJS IX — 2018年
- 通过制作视频游戏来学习编码?

变更决议
如果需要更改或添加特定的分辨率或宽高比,可以在此菜单中进行。
添加背景
将图像拖放到场景中。 使Z位置大约为5
,以使其始终在背景中。
创建画布
在“层次结构”中右键单击,在“ UI”下单击“画布”。
创建播放器对象
右键单击“层次结构”,然后单击“创建空白”。 检查新的空游戏对象并重置变换(右键单击“变换”>“重置”)。
添加组件,Sprite Renderer。

单击并将所需的精灵从您的资产中拖动到Sprite …占位符中。 您应该看到Sprite出现在场景中。
为玩家增加动作
将组件添加到播放器对象。 添加新的脚本,将其称为Player并添加Move
方法。
私有void Move()
{
float deltaX = Input.GetAxis(“ Horizontal”)* Time.deltaTime * moveSpeed;
var newXPos = transform.position.x + deltaX;
float deltaY = Input.GetAxis(“ Vertical”)* Time.deltaTime * moveSpeed;
var newYPos = transform.position.y + deltaY;
transform.position = new Vector2(newXPos,newYPos);
}
使用Time.deltaTime可使游戏的帧速率在设备之间保持一致。 您可以添加moveSpeed
变量以更好地控制Player的移动速度。 添加以下内容以使变量在检查器中可用:
//在Player.cs中
...
[SerializeField] float moveSpeed = 10f;
...

查看输入
编辑>项目设置>输入
在脚本中,可以使用Input.GetAxis(“Horizontal”)
而不是诸如GetKeyDown
之类的GetKeyDown
来包含更多控件。 这里有两个“水平轴”和“垂直轴”,一个用于键盘(箭头键和wasd),另一个用于操纵杆控制器。 通过使用轴,您无需指定要使用的键或控制器。
输入文件
限制球员运动

ViewPortToWorldPoint()
是一种设置播放器运动边界的动态方法
然后,在Update
方法中,可以使用Mathf.Clamp
从字面上将一些约束钳位到X和Y Player位置。
var newXPos = Mathf.Clamp(
transform.position.x + deltaX,
xMin,
最大值
);
我们在Start
方法中定义最小和最大坐标。
无效开始(){
SetUpMoveBoundaries();
}
由于Player对象的枢轴点位于其中心,因此请定义一个辅助方法和padding
。 您不希望对象的边缘离开屏幕。
[SerializeField]浮点填充= 1f;
yMin;
浮动yMax;
...
私人void SetUpMoveBoundaries()
{
摄影机游戏摄影机= Camera.main;
xMin = gameCamera.ViewportToWorldPoint(
新的Vector3(0,0,0)
).x +填充;
xMax = gameCamera.ViewportToWorldPoint(
新的Vector3(1、0、0)
).x-填充;
yMin = gameCamera.ViewportToWorldPoint(
新的Vector3(0,0,0)
).y + padding;
yMax = gameCamera.ViewportToWorldPoint(
新的Vector3(0,1,0)
).y-填充;
}
更新后的Move
方法将类似于:
私有void Move()
{
float deltaX = Input.GetAxis(“ Horizontal”)* Time.deltaTime * moveSpeed;
float deltaY = Input.GetAxis(“ Vertical”)* Time.deltaTime * moveSpeed;
var newXPos = Mathf.Clamp(transform.position.x + deltaX,xMin,xMax);
var newYPos = Mathf.Clamp(transform.position.y + deltaY,yMin,yMax);
transform.position = new Vector2(newXPos,newYPos);
}
识别特征区域
有了背景,一个Player对象只能随Camera一起移动,现在您需要确定游戏还需要其他哪些功能。 它可能是玩家攻击,玩家健康,与其他物体,敌人或其他东西的交互。 但这是一个很好的起点。