Unity开发DevLog:《Easy Platform (or not)》(1)

最近做了一个小游戏,一个简单的平台跑酷,简单记一个DevLog。

初步框架

搭建环境

我下载了一个Unity3D做这个项目。应该说,Unity 3D做起来还是蛮简单的,容易上手。

这里呢送上链接:

https://unity3d.com/get-unity/download

 点右边这个按钮就可以了,等下载好,打开后按照指引安装Unity Hub,不会英语的可以直接一路Continue(不过建议别装到系统盘),完了以后运行Unity Hub,在Hub里找到最新版的Unity Editor,等个大概半个小时就装好了。

角色行为构建

这个游戏是2D平台游戏,所以就直接在2D core的基础上创建就行。先把游戏的主要内容创建好。

做一个最简单的地图,只需要满足移动和跳跃的需求就可以了。给地图的平台贴上标签“Platform”,给出口贴上标签“Finish”。插入2D -> Sprite -> Capsule 创建一个胶囊体,就是玩家了。把上述的所有对象添加碰撞箱,玩家还要有刚体组件。接下来就是写代码了。

在Assets下Create -> Folder 命名为Script,点进去,Create -> C# script,命名为PlayerBehaviour,用VS打开。

先声明一些与角色能力有关的量,比如移动速度,跳跃速度(离地时的垂直速度),见下:

然后在Update里调用Input.GetKeyDown或者Input.GetKey获取按键,区别是前者是当按下按键的瞬间(准确来说是按下按键时所在的帧中)是true,然后就是false;后者只要当前按键是被按下的,就是true。然后根据按键给刚体赋予相应的速度。

看一下这部分的代码

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerBehaviour : MonoBehaviour
{
    // 这部分代码是声明一些变量,在这里省略
    void Start()
    {
        // get rigid body
        rb = gameObject.GetComponent<Rigidbody2D>();

        // constant settings
        initSpeed = 5f;
        initJumpSpeed = 7.5f;

        // initialize variables
        jumpSpeed = initJumpSpeed;
        speed = initSpeed;
    }

    void Update()
    {
        // velocity settings
        vx = rb.velocity.x;
        vy = rb.velocity.y;

        // running
        if (Input.GetKey(KeyCode.D))
        {
            vx = speed;
            ModifyScale(true);
        }
        else if (Input.GetKey(KeyCode.A))
        {
            vx = -speed;
            ModifyScale(false);
        }
        else 
        {
            vx = 0;
        }
        // press A and D at the same time make it stop
        if (Input.GetKey(KeyCode.D) && Input.GetKey(KeyCode.A))
        {
            vx = 0;
        }
        // jumping
        if (Input.GetKeyDown(KeyCode.W))
        {
            vy = jumpSpeed;
        }
        // position changing
        rb.velocity = new Vector2(vx, vy);
    }
}

然后给玩家添加一个Trail Renderer,给角色添加轨迹。本来准备弄个白色半透明的尾迹的,没想无心插柳,现在成了这个样子(我觉得可能是因为没有加载透明通道,但是既然都成这样了,就不要动它了)。

做个地图,把玩家贴图稍微美化一下。

来,上图:

然后允许一下二段跳,跳跃时增加一个变量1,当这个变量等于2时,就不允许再跳跃,落地就把这个数字调回0。

进阶特性

死亡判定

判定方式就是创建OnCollisionEnter方法,给尖刺和岩浆什么的赋予标签。碰撞的时候接受一个参数,回调的时候这个参数会被传入,我们就从这个传回的参数获取到另外一个gameObject的tag属性。当这个tag是“Spike”,“Lava”的时候就判定为死亡,重新加载场景。这样也可以实现上述的落地把跳跃次数调回0。贴代码:

// ...

public class PlayerBehaviour : MonoBehaviour
{
    // ...
    void respawn()
    {
        transform.position = new Vector3(respawnX, respawnY, 0);
        // added in v0.0.2, reload level after dying
        GameManage.changeScene(this.gameObject.scene.name);
    }

    // die function
    void die(string tag){
        // tag是用作粒子特效的不同的判定
        // Please add particle effect here!
        respawn();
    }

    void OnCollisionEnter2D(Collision2D collision)
    {
        for (int i = 0; i < NearButton.Length; i++)
        {
            NearButton[i] = false;
        }

        var colliderTag = collision.collider.tag;
        if (colliderTag=="Lava")
        {
            die(colliderTag);
        }
        else if (colliderTag=="Platform")
        {
            jumpNum = 0;
        }
        else if (colliderTag=="Spike")
        {
            die(colliderTag);
        }
        else if (colliderTag=="Finish")
        {
            SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
        }
        // ...
    }
}

buff加成

创建一些道具,吃到以后就可以有一些buff加成,比如跑得更快,跳得更高,乃至无视重力。与此相关的是按下按钮开启的门。

由于部分原因,这部分代码写的跟屎一样,就没有脸贴出来了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值