游戏介绍
游戏名称:无尽探险跑酷(Endless Adventure Runner)
游戏类型:无尽跑酷
游戏背景
在一个充满未知和奇迹的世界中,玩家将扮演一名勇敢的探险家,穿越各种神秘的地域,躲避重重障碍,收集宝藏,并挑战自己的极限。
核心玩法
- 跑酷冒险:玩家控制角色在无尽的道路上不断前进,通过跳跃和滑动来躲避障碍物。
- 障碍与金币:道路上布满了各种障碍物和金币,需要玩家灵活操作以避免撞击障碍物同时收集金币。
- 加速带挑战:偶尔会出现加速带,一旦角色踏上,将暂时获得极速冲刺的能力,增加游戏的刺激性和挑战性。
目标受众
无尽探险跑酷适合所有年龄段的玩家,特别是喜欢动作和挑战性游戏的玩家。
技术细节
- 开发平台:Unity
- 主要技术点:玩家控制、障碍物和金币生成算法、碰撞检测、UI设计、音效和动画处理。
游戏的业务逻辑
我们将游戏简化了一下!保留了下面的主要功能去开发!这样更适合初学者!
1. 角色运动
角色在一条无尽的道路上自动向前跑动。玩家可以通过输入控制角色跳跃或滑动来躲避障碍。
2. 障碍物和金币生成
在道路上随机生成障碍物和金币。障碍物的种类和生成频率随游戏进程逐渐增加。
3. 碰撞检测
检测角色是否与障碍物碰撞或收集到金币。碰撞障碍物会导致游戏结束,收集金币会增加得分。
4. 加速带
在道路上随机放置加速带,玩家角色接触后会获得短暂的速度提升。
5. 计分机制
玩家的得分基于行进的距离和收集的金币数量。游戏结束后显示总得分。
具体实现需要多个脚本,根据面向对象的思想,基本每一个功能都最好是单独的一个脚本!
场景搭建:
第一个脚本:玩家移动控制脚本 A\D控制左右移动
这段代码实现了对游戏中玩家的基本移动控制功能,包括左右移动、跳跃
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerCont : MonoBehaviour
{
//Horizontal
//1.控制玩家移动,input.getaix
//2.A、D控制向左、右移动
//3.W控制跳跃
public GameObject Player;
public float lrSPEED = 10F;
public float JUMPSPEED = 5;
public float RunSpeed = 10f;
private void Start()
{
//Player = GameObject.Find("HPCharacter");
}
private void Update()
{
UserInput();
AwalysRun();
}
//*=========================
void UserInput()
{
//Debug.Log("检测用户按下的键盘A D W");
float MoveZuoY = Input.GetAxis("Horizontal");
ControlMove(MoveZuoY);
if (Input.GetKey(KeyCode.W))
{
Jump();
}
}
void ControlMove(float ZuoyouMove)
{
Player.transform.Translate(new Vector3(ZuoyouMove * lrSPEED * Time.deltaTime, 0, 0));
}
void Jump()
{
Player.transform.Translate(new Vector3(0, JUMPSPEED * Time.deltaTime, 0));
//Debug.Log("角色开始移动了");
}
void AwalysRun()
{
Player.transform.Translate(new Vector3(0, 0, 1 * RunSpeed * Time.deltaTime));
}
}
这是一个C#脚本,它被附加到名为PlayerCont的游戏对象上,用于控制游戏中的玩家运动。
以下是代码的部分功能的简单解释:
1. 在代码的顶部,使用using语句来导入需要的命名空间。其中包含了System.Collections和System.Collections.Generic以及UnityEngine这三个常用的命名空间。
2. 声明了一个名为Player的公共GameObject变量,用于存储玩家对象。同时声明了三个公有浮点型变量:lrSPEED、JUMPSPEED和RunSpeed,分别用来设置玩家左右移动的速度、跳跃的速度和恒定的前进速度。
3. 在Start()函数中查找并赋值给Player变量。这个函数会在游戏启动时自动调用。
4. Update()函数是Unity引擎每帧都会调用的一个方法,可以在这里进行每一帧的游戏逻辑更新。在Update()中调用了UserInput()和AwalysRun()两个函数。
5. UserInput()函数主要用于获取用户的输入,并根据用户的操作来控制玩家的移动。通过检查用户按下的是哪个键(例如"A"或"D")来决定玩家应该向哪个方向移动,并通过ControlMove()函数实现这一操作。如果用户按下"W"键,则调用Jump()函数使玩家跳跃。
6. ControlMove()函数将接收一个表示左右方向移动的参数,并将其乘以lrSPEED,然后利用Time.deltaTime来得到一帧内的时间差,计算出这一帧玩家应移动的距离。最后使用Transform.Translate()函数将玩家沿水平轴的方向平移指定距离。
7. Jump()函数与ControlMove()类似,只不过这次是向上跳跃,会将玩家沿垂直轴的方向平移指定距离。
8. AwalysRun()函数则始终让玩家保持向前移动。它同样使用Transform.Translate()函数,不过这次是沿z轴的方向移动。
脚本二 触发检测并克隆金币和障碍物
这个脚本用于在主角碰到不同触发器时克隆出不同的物体,并执行相应的操作,比如添加分数或者销毁物体等。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CollisionManager : MonoBehaviour
{
//触发检测 1.克隆金币 2.恐克隆怪物 3.碰撞金币 吃掉它 加分 4.碰到怪物,掉血 5碰到加速带加速、减速
//该触发检测脚本挂到 主角身上
GameObject BeiTriggOBJ;
public GameObject CoinMuban;
public GameObject CloneCoinFather;
public GameObject ObstuctionMuban;
public GameObject CloneStruFather;
//PlayerCont onPlayshizhe=new PlayerCont();//实例化对象
private void OnTriggerEnter(Collider other)
{
BeiTriggOBJ = other.transform.gameObject;
if (BeiTriggOBJ.tag == "rCoinTrigger")
{
//克隆金币
ClonCoin();
}
if (BeiTriggOBJ.tag == "MonsterTrigger")
{
//克隆怪物
}
if (BeiTriggOBJ.tag == "TriggerSpeedUp")
{
//开始加速
SpeedUp(10f);
}
//===================================
if (BeiTriggOBJ.tag == "Coin")
{
//吃掉 加分
Destroy(BeiTriggOBJ);
}
if (BeiTriggOBJ.tag == "Monster")
{
//掉血 停下来
//PlayerCont.RunSpeed = 0;
}
}
private void OnTriggerExit(Collider other)
{
if (other.transform.gameObject.tag == "TriggerSpeedUp")
{
SpeedUp(-10f);
}
}
void ClonCoin()
{
Debug.Log("克隆金币");
for (int i = 0; i < 10; i++)
{
Vector3 OnClonPos = new Vector3(153 + Random.Range(0, 6), 0, BeiTriggOBJ.transform.position.z + 50f + i * 3);
GameObject.Instantiate(CoinMuban, OnClonPos, Quaternion.identity, CloneCoinFather.transform);
}
}
void ClonMonster()
{
Debug.Log("克隆怪物");
Vector3 OnClonPos = new Vector3(153 + Random.Range(0, 6), 0, BeiTriggOBJ.transform.position.z + 50f);
GameObject.Instantiate(ObstuctionMuban, OnClonPos, Quaternion.identity, CloneStruFather.transform);
}
void SpeedUp(float Speed)//函数形参用法
{
Debug.Log("加速");
PlayerCont.RunSpeed += Speed;
}
}//end class
- 当主角碰到带有“TriggerCoin01”标签的触发器时,会触发脚本中的OnTriggerEnter()函数,开始克隆金币。在这个过程中,首先定义了一个新位置clonePos,然后使用GameObject.Instantiate()函数在clonePos位置上克隆出多个金币对象,并将它们设为CoinMuban模板对象的子级节点。
- 当主角碰到带有“TriggerStru”标签的触发器时,会触发脚本中的OnTriggerEnter()函数,开始克隆障碍物。在这个过程中,只是输出了一条消息,表示开始克隆障碍物,但实际上并没有做任何实际的操作。
- 当主角碰到带有“Coin”标签的物体时,会触发脚本中的OnTriggerEnter()函数,开始加分。在这个过程中,只会输出一条消息,表示开始加分,然后销毁触发碰撞的对象。
- 当主角碰到带有“Monster”标签的物体时,会触发脚本中的OnTriggerEnter()函数,开始扣分。在这个过程中,也只会输出一条消息,表示开始扣分。
【下周补充剩余部分】文章来源:https://www.toymoban.com/news/detail-768035.html
脚本三 计分和掉血系统
改脚本也需要挂在到一个游戏物体,逻辑是:当主角的触发检测,检测到金币时,就跨类调用下面分数管理脚本的加分方法!同样掉血也一样!文章来源地址https://www.toymoban.com/news/detail-768035.html
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ScoreManager : MonoBehaviour
{
//分数管理 血量管理
// 如果撞击到金币就加分,如果撞击到障碍物就掉血
public int CurrentScore=0;
public int CurrentBlood = 10000;
public void ScoreAdd()//构造函数
{
Debug.Log("加分函数开始执行");
CurrentScore += 10;
Debug.Log("分:"+CurrentScore);
}
public void SubBlood()//构造函数
{
Debug.Log("掉血函数开始执行");
CurrentBlood -= 100;
Debug.Log("血:" + CurrentBlood);
}
private void OnGUI()
{
GUI.Label(new Rect(new Vector2(200, 200), new Vector2(500, 500)), CurrentBlood.ToString());
GUI.Label(new Rect(new Vector2(20, 20), new Vector2(500, 500)), CurrentScore.ToString());
}
}
到了这里,关于Unity 简单跑酷游戏策划与实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!