【Unity】项目源码——2D横版过关类游戏《A_Standard_Runner》

本文是作者在学习Unity过程中制作的一款2D横版过关游戏的制作分享,重点讲解了人物移动、怪物AI和Camera设置的代码实现。游戏主角在城市中躲避小骷髅的骚扰,通过编写CharacterController实现移动和跳跃,怪物AI进行两点间巡逻,Camera跟随主角平滑移动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【摘要】这同样是sunset在学习Unity游戏制作过程中独立制作的游戏,游戏的操作与过关方式比较简单,整体制作时间大概两到三天中除去上课吃饭以及睡觉的剩余时间。虽然也出现了意想不到的小问题,不过整体制作过程中还算比较顺利。这篇博客就来说说如何制作一款这样的游戏的核心部分。

1.游戏背景简介

这款游戏的故事背景大概讲的是一群不知为何从地底复活的古生物——萌萌的小骷髅为了实现蠢蠢的想法而想要占领城市,它们各种破坏城市,制作了各种妨碍人们正常生活的事,此时一位热衷于跑步的少年出现,他的出现显然不是为了拯救城市,而只是一心一意的专注于奔跑,然而在这个过程却又要免于小骷髅的骚扰,故事就从这里开始了。。。

2.我们所需要的

制作任何一款游戏都离不开合适于游戏的人物模型,所以我们先需要一下这些东西:

  1. 适合游戏故事背景的萌萌的主人公,也就是玩家控制的角色模型。
  2. 适合游戏故事背景的萌萌的小骷髅,也就是逻辑意义上的敌人。
  3. 适合游戏故事背景的场景模型以及障碍物模型,因为游戏发生在现代都市,所以可以是车辆,树木,建筑物等等。
  4. 合适的音频文件
  5. 一颗耐心,静静去完成属于自己的独立作品。

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)
                    {
  
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值