【摘要】这同样是sunset在学习Unity游戏制作过程中独立制作的游戏,游戏的操作与过关方式比较简单,整体制作时间大概两到三天中除去上课吃饭以及睡觉的剩余时间。虽然也出现了意想不到的小问题,不过整体制作过程中还算比较顺利。这篇博客就来说说如何制作一款这样的游戏的核心部分。
1.游戏背景简介
这款游戏的故事背景大概讲的是一群不知为何从地底复活的古生物——萌萌的小骷髅为了实现蠢蠢的想法而想要占领城市,它们各种破坏城市,制作了各种妨碍人们正常生活的事,此时一位热衷于跑步的少年出现,他的出现显然不是为了拯救城市,而只是一心一意的专注于奔跑,然而在这个过程却又要免于小骷髅的骚扰,故事就从这里开始了。。。
2.我们所需要的
制作任何一款游戏都离不开合适于游戏的人物模型,所以我们先需要一下这些东西:
- 适合游戏故事背景的萌萌的主人公,也就是玩家控制的角色模型。
- 适合游戏故事背景的萌萌的小骷髅,也就是逻辑意义上的敌人。
- 适合游戏故事背景的场景模型以及障碍物模型,因为游戏发生在现代都市,所以可以是车辆,树木,建筑物等等。
- 合适的音频文件
- 一颗耐心,静静去完成属于自己的独立作品。
3.编写人物移动代码
在此类游戏中,最重要的就是玩家操作感受,于是优先考虑移动代码的编写是非常需要的,虽然这个游戏的过程是2D游戏,但是sunset在创建场景等一切模型元素上采用的都是3D模型,所以游戏整体上在视角方面更有层次感。因为我们这是2D游戏,并不会在平面上突然出现一个斜坡,所以人物的移动只需要使用this.transform.Translate()即可,但是人物身上还是需要载有CharacterController组件以用于进行角色跳跃。然而这都不是最难的,因为角色控制器的存在,无法使用刚体的一切属性,所以就不得不对游戏场景的重力进行模拟,只有一遍一遍不断的尝试才能找到合适感觉。接下来是代码:
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(Animator))]
public class RunnerController : MonoBehaviour
{
//public Variable
public enum Direction
{
Forward = 90,
Backward = 270,
}
public float maxSpeed;
public float MoveSpeed = 0;
public float Z;
public float JumpForce;
public float Gravity;
public bool PlayerDead;
//private variable
private CharacterController Controller;
private Animator animator;
private Direction direction = Direction.Forward;
private float H;
private float V;
private bool OnGround = true;
private bool Jump;
private float JSpeed;
void Awake()
{
//rigidbody = this.GetComponent<Rigidbody>();
Controller = this.GetComponent<CharacterController>();
animator = this.GetComponent<Animator>();
}
void Update ()
{
if(!PlayerDead)
{
if(this.transform.position.z != Z)
{
Vector3 Position = this.transform.position;
Position.z = Z;
this.transform.position = Position;
}
H = Input.GetAxis("Horizontal");
V = Input.GetAxis("Vertical");
//AniamtorState();
if(Controller.isGrounded)
{
OnGround = true;
Jump = false;
animator.SetBool("Jump",false);
if(Input.GetKeyDown(KeyCode.J))
{
if(V > 0.3)
{