700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【游戏开发实战】使用Unity制作像天天酷跑一样的跑酷游戏——第六篇:金币创建与吃金币

【游戏开发实战】使用Unity制作像天天酷跑一样的跑酷游戏——第六篇:金币创建与吃金币

时间:2021-08-01 03:57:44

相关推荐

【游戏开发实战】使用Unity制作像天天酷跑一样的跑酷游戏——第六篇:金币创建与吃金币

文章目录

一、前言二、导入金币图片素材三、制作金币预设四、制作多个形状的金币阵列五、金币创建器六、运行测试

一、前言

嗨,大家好,我是新发。

我打算写一篇使用Unity制作像天天酷跑一样的游戏的教程,会按功能点分成多篇文章来讲,希望可以帮助一些想学Unity的同学。

注:我使用的Unity版本是.1.14f1c1。

文章目录:

第一篇:人物动画序列帧

第二篇:使用Animator控制跑酷角色的动画状态切换

第三篇:跑酷地面制作

第四篇:使用脚本控制跑酷角色

第五篇:游戏结束与重新开始

第六篇:金币创建与吃金币

第七篇:游戏界面的基础UI

本工程的Demo工程,我已上传到GitHub,感兴趣的同学可以自己下载下来学习。

/linxinfa/UnityParkourGameDemo

|本节我将讲下金币创建与吃金币的实现,本节的效果:

二、导入金币图片素材

把金币图片素材导入到工程中。

设置图片格式为Sprite (2D and UI)

三、制作金币预设

制作金币预设coin.prefab,使用SpriteRenderer来显示金币。

添加一个CoinTag

把金币预设的Tag设置为Coin

给金币添加碰撞体,勾选Is Trigger,因为金币与角色不需要发生真实的物理碰撞。

这在Player.cs中就可以通过OnTriggerEnter2D来判断是否与金币发生碰撞,并执行响应的逻辑。

// Player.cs/// <summary>/// 触发器事件/// </summary>private void OnTriggerEnter2D(Collider2D collision){if ("Coin" == collision.gameObject.tag){// 吃到金币Destroy(collision.gameObject);}}

四、制作多个形状的金币阵列

为了演示,我就只做两个金币阵列的预设。

CoinList0

CoinList1

五、金币创建器

创建一个脚本CoinMgr.cs,用来创建金币,代码如下:

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

其中coinListRoot.AddComponent<Coin>();Coin脚本是用来控制金币的移动的。

Coin脚本如下:

using UnityEngine;public class Coin : MonoBehaviour{private Transform coinRootTranform;/// <summary>/// 金币的结束位置/// </summary>private Transform end;/// <summary>/// 金币的移动速度/// </summary>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,测试效果如下:

下一节讲下游戏界面的基础UI。

[点击进入下一节]

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。