添加组件
给PlayGame和EnemyObject添加组件BoxCollider 2D碰撞器,不用修改参数
给PlayGame添加组件Rigibody 2D
设置数据
添加EnemyObject,属性如下
Edit->project setting->Physics 2D
将 y的值改为0
给playerObject添加标签
新建层
将PlayerObject设置为Bloking,EnemyObject也是
在Sprite Renderer添加sorting Layer
保存后给PlayerObject和EnemyObject设置
预制件
预制件是用来存储一个游戏对象的所有组件,属性和子对象,这样就成为了一个可重复使用的资源文件。当需要多次重复使用这个游戏对象时,便可以使用预制件来创建。举一个简单的例子,我们会在游戏世界中创建同一种怪物模型的实例,显然我们不可能将怪物模型一个个的拖拽到游戏世界中,并且这些怪物会死亡消失,也会重新刷新。因此,合理的解决方案应该是,每一种怪物都应该是一个预制体,然后我们可以通过预制体来创建不同的怪物实例,这就是预制件的优势。当然,预制件更重要的是对游戏对象的“封装”,预制体不仅仅是网格模型,同时还可以包含各种功能组件以及脚本,这样的预制件就能承载更多的内容。
在Assets下创建Prefabs文件,将PlayerObject拖到Prefabs里面,enemyObject也是同样操作
先就可以将Hierarchy里面的playObject和EnemyObject安全的删除了
组件逻辑
把PlayerObject预制件拖到Inspector面板中
新建文件夹Scripts
将MovementController脚本拖进去,双击打开编辑
编写代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MovementController : MonoBehaviour
{
// Start is called before the first frame update
public float movementSpeed = 3.0f;
Vector2 movement = new Vector2();
Rigidbody2D rb2D;
void Start()
{
rb2D = GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update()
{
}
//unity引擎以固定时间调用
private void FixedUpdate()
{
//将返回表示水平输入的原始值。如果玩家按下左箭头或 A 键,则返回 -1;如果按下右箭头或 D 键,则返回 1;如果没有按下任何键,则返回 0。
movement.x = Input.GetAxisRaw("Horizontal");
movement.y = Input.GetAxisRaw("Vertical");
//标准化,向量转换为单位向量(长度为1),即保留其方向但将其长度缩放为1。
movement.Normalize();
rb2D.velocity = movement * movementSpeed;
}
}
将MovementController移动到PlayerObject的Inspector
点击play,现在按电脑上的W,A,S,D即可移到玩家