介绍
单机大鱼吃小鱼是一款经典的休闲游戏,玩家需要控制一条小鱼,通过吃掉比自己小的鱼来不断成长,同时避开比自己大的鱼的攻击。游戏画面简洁明快,操作简单易上手,是一款适合所有年龄段的游戏。游戏中还有各种道具和技能可以帮助玩家更快地成长,增加游戏的趣味性。
制作玩家小鱼
切割sprite图片。
添加刚体、设置线性阻力。因为在深海移动,所以需要阻力。
添加碰撞体。
控制小鱼
防止小鱼出界,对场景添加碰撞体。
控制小鱼的移动,通过加力的方式,化向量
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
moveDir = new Vector2(h, v).normalized;
private void FixedUpdate()
{
rb.AddForce(moveDir * moveForce);
}
控制小鱼翻转,向左移动头朝左,向右移动头朝右
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
moveDir = new Vector2(h, v).normalized;
if (h > 0)
childObj.localScale = new Vector3(1, 1, 1);
else if (h < 0)
childObj.localScale = new Vector3(-1, 1, 1);
制作生成鱼的种类
设置多种不同形状的鱼,放进预制体文件夹
随机大小设置体积
public Vector2 fishScaleRange;
fishScale = Random.Range(fishScaleRange.x, fishScaleRange.y);
transform.localScale = Vector3.one * fishScale;
随机移动速度设置范围
public Vector2 moveSpeedRange;
moveSpeed = Random.Range(moveSpeedRange.x, moveSpeedRange.y);
左右两边生成鱼。
左边生成的向右运动。
右边生成的向左运动,绕y轴旋转180度即可实现。
transform.position += transform.right * moveSpeed * Time.deltaTime;
控制游戏机制
随机获取生成小鱼的种类
public GameObject[] fishPrefabs;
GameObject fishToSpawn = fishPrefabs[Random.Range(0, fishPrefabs.Length)];
控制生成鱼的范围。
如果左边生成,不用转向,默认向右移动。
右边生成,需要转向,绕y轴旋转180度,向左移动。
GameObject fishToSpawn = fishPrefabs[Random.Range(0, fishPrefabs.Length)];
int dir = Random.value > 0.5f ? 1 : -1;
Vector2 randomSpawnPos = new Vector2(dir * 7f, Random.Range(-4.7f, 4.7f));
GameObject fish = Instantiate(fishToSpawn, randomSpawnPos, Quaternion.identity);
fish.GetComponent<Fish>().SpawnFish();
if (dir == 1)
fish.transform.Rotate(Vector3.up, 180f);
碰撞检测。
碰到体积比自己的大的小鱼,被吃掉。
碰到比自己小的鱼,吃掉它。
private void OnTriggerEnter2D(Collider2D collision)
{
if(collision.gameObject.GetComponent<Fish>() != null)
{
if(fishScale > collision.gameObject.GetComponent<Fish>().fishScale)
{
Destroy(collision.gameObject);
Grow(collision.gameObject.GetComponent<Fish>().fishScale);
}
else
{
Die();
}
}
}
成长,吃掉比自己的小的鱼,体积增大百分之五(可以任意调节)
fishScale += value / 20f;
transform.localScale = Vector3.one * fishScale;
每隔固定时间进行新的鱼的生成。
void Update()
{
spawnTimer -= Time.deltaTime;
if(spawnTimer < 0)
{
SpawnNewFish();
spawnTimer = Random.Range(spawnRateRange.x, spawnRateRange.y);
}
}
控制分数面板
吃一条鱼,数字加1
public void GainScore(int amount)
{
score += amount;
string zero = "000000";
scoreText.text = zero.Substring(0, zero.Length - score.ToString().Length) + score;
}
协程的应用
游戏结束后,等待5秒,重新加载该场=场景
yield return new WaitForSeconds(delayTime); // 等待5秒钟
SceneManager.LoadScene(SceneManager.GetActiveScene().name); // 重新加载当前场景
下载
链接: https://pan.baidu.com/s/1209fZrfIDkSS_lQLDY98IA
提取码: esqp