项目实训- 基于unity的2D多人乱斗闯关游戏设计与开发(七4、酷跑——金币创建与吃金币)

目录

  • 一、前言
  • 二、制作金币素材
  • 三、制作多个金币阵列
  • 四、金币创建器

一、前言

(1) 人物角色制作
(2) 地面制作
(3) 游戏结束和重新开始
(4) 金币创建与吃金币

二、制作金币素材

1、将金币图片导入到工程中,并设置好精灵图
2、制作金币预设

  • 使用spriteRender来显示金币
  • 给金币添加碰撞体,勾选Is Trigger,因为金币与角色不需要发生真实的物理碰撞
    项目实训- 基于unity的2D多人乱斗闯关游戏设计与开发(七4、酷跑——金币创建与吃金币)_第1张图片
  • 在player脚本中通过OnTriggerEnter2D来判断是否与金币发生碰撞,并执行响应的逻辑
private void OnTriggerEnter2D(Collider2D collision)
{
    if ("Coin" == collision.gameObject.tag)
    {
        // 吃到金币
        Destroy(collision.gameObject);
    }
}

三、制作多个金币阵列

CoinList0
项目实训- 基于unity的2D多人乱斗闯关游戏设计与开发(七4、酷跑——金币创建与吃金币)_第2张图片
CoinList1
项目实训- 基于unity的2D多人乱斗闯关游戏设计与开发(七4、酷跑——金币创建与吃金币)_第3张图片
CoinList2
项目实训- 基于unity的2D多人乱斗闯关游戏设计与开发(七4、酷跑——金币创建与吃金币)_第4张图片
CoinList3
项目实训- 基于unity的2D多人乱斗闯关游戏设计与开发(七4、酷跑——金币创建与吃金币)_第5张图片

四、金币创建器

创建一个脚本用来创建金币:
将以上四种金币阵列预设存放在数组中,通过RandomCreate随机生成金币阵列,在该方法中,随机金币范围Random.Range(0,2),在加载金币预设后实例化,同时设置金币的初始坐标是之前制作的游戏起始位置

public class CoinCreator5
{
    /// 
    /// 金币阵列预设
    /// 
    private static GameObject[] s_coinListPrefab = new GameObject[4];

    /// 
    /// 随机生成金币阵列
    /// 
    public static void RandomCreate(Vector3 startPos)
    {
        var id = Random.Range(0, 4);
        if(null == s_coinListPrefab[id])
        {
            // 加载金币预设
            s_coinListPrefab[id] = Resources.Load<GameObject>("CoinList" + id);
        }
        // 实例化预设
        var coinListRoot = Object.Instantiate(s_coinListPrefab[id]);
        var coinBhv = coinListRoot.AddComponent<Coin5>();
        // 设置初始坐标
        coinBhv.SetPos(startPos);
    }
}

var coinBhv = coinListRoot.AddComponent();中的Coin5脚本是用来控制金币移动的
设置金币的移动速度,并设置金币在超过地面移动的结束位置时销毁

public class Coin5 : MonoBehaviour
{
    private Transform coinRootTranform;

    /// 
    /// 金币的结束位置
    /// 
    private Transform end;


    /// 
    /// 金币的移动速度
    /// 
    private float moveSpeed = 0.05f;

    void Awake()
    {
        coinRootTranform = transform;

        end = GameObject.Find("GroundEndPos").transform;
    }

    public void SetPos(Vector3 startPos)
    {
        float yPosOffset = 5 + Random.Range(3, 20) * 0.1f; //随机高度偏移
        coinRootTranform.position = startPos + new Vector3(0, yPosOffset, 0);
    }

    void Update()
    {
        if (GameState.Playing != GameMgr.instance.state) return;

        if (coinRootTranform.position.x > end.position.x)
        {
            coinRootTranform.position -= new Vector3(moveSpeed, 0, 0);//往左移动
        }
        else
        {
            // 金币超过End坐标点,销毁
            Destroy(gameObject);
        }    
    }
}

你可能感兴趣的:(项目实训,unity,游戏,游戏引擎)