【Unity】3D跑酷游戏

这篇具有很好参考价值的文章主要介绍了【Unity】3D跑酷游戏。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

展示

finish_all

* 方块跑酷

1.教程链接

  • 翻墙:https://www.youtube.com/watch?v=9ZEu_I-ido4&list=PLPV2KyIb3jR53Jce9hP7G5xC4O9AgnOuL&index=3

2.基础制作

  • 最终成果

unity3d跑酷素材,Unity,1024程序员节,unity,游戏,3d,c++

2.1 基本场景

  • 1.创建Cube作为跑道

    1)记得把位置Reset;

    2)改名为ground;

    3)改变其参数,x=15,y=1,z=100;

    4)调整位置使其从相机同一位置开始。

    选中单击f可聚焦。

  • unity3d跑酷素材,Unity,1024程序员节,unity,游戏,3d,c++

  • 2.创建Cube作为Player

    1)Reset重置位置;

    2)移动Cube将其在跑道上;

    3)改名为Player。

unity3d跑酷素材,Unity,1024程序员节,unity,游戏,3d,c++

  • 3.上色

    1)创建文件夹Material,并在文件夹里创建Player的材料体PlayerMat;

    2)将选择好颜色的材料体拖至Player。

unity3d跑酷素材,Unity,1024程序员节,unity,游戏,3d,c++

  • 4.为Player加上组件Rigidbody

    1)在Player的Add Component中选择Rigidbody并添加;

    2)适当抬高Player位置并运行,发现Player有重力效果。

unity3d跑酷素材,Unity,1024程序员节,unity,游戏,3d,c++

  • 5.设置SkyBox

    1)改为纯色Skybox;

    unity3d跑酷素材,Unity,1024程序员节,unity,游戏,3d,c++

    2)改颜色

    unity3d跑酷素材,Unity,1024程序员节,unity,游戏,3d,c++

  • 6.保存场景,并把当前场景改名为Level1。

2.2 编写程序

  • 1.创建Scripts文件夹,并在文件夹里创建C#脚本,命名为Player Movement,将脚本拖入Player中。

    unity3d跑酷素材,Unity,1024程序员节,unity,游戏,3d,c++
  • 2.编写Player Movement的脚本

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    ​
    public class PlayerMovement : MonoBehaviour
    {
        public Rigidbody rb;//定义刚体
        // 用Fixed稀释重力
        void FixedUpdate()
        {
            rb.AddForce(0,0,2000*Time.deltaTime);//在z轴上添加2000的力
        }
    }
  • 3.将Player中的Rigidbody拖入脚本的rb中。

unity3d跑酷素材,Unity,1024程序员节,unity,游戏,3d,c++

2.3 方块移动

  • 1.创建Physic Materia,模拟摩擦力,并将其命名Slippery,拖至场景中的Ground。

  • unity3d跑酷素材,Unity,1024程序员节,unity,游戏,3d,c++

  • 2.更新PlayerMovement脚本,为Player增加向前的力。

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    ​
    public class PlayerMovement : MonoBehaviour
    {
        public Rigidbody rb;//定义刚体
        public float forwardForce = 2000f;//定义向前的力
        // 用Fixed稀释重力
        void FixedUpdate()
        {
            rb.AddForce(0,0, forwardForce*Time.deltaTime);//在z轴上添加2000的力
        }
    }

    物体开始平滑向前运动

  • unity3d跑酷素材,Unity,1024程序员节,unity,游戏,3d,c++

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
​
public class PlayerMovement : MonoBehaviour
{
    public Rigidbody rb;//定义刚体
    public float forwardForce = 1000f;//定义向前的力
    public float sidewaysForce = 200f;//定义侧向力
​
    // 用Fixed稀释重力
    void FixedUpdate()
    {
        rb.AddForce(0,0, forwardForce*Time.deltaTime);//在z轴上添加力
​
        //按d键向右移动
        if (Input.GetKey("d"))
        {
            rb.AddForce(sidewaysForce*Time.deltaTime, 0, 0);//往x轴正方向添加力    
        }
        //按a键向左移动
        if (Input.GetKey("a"))
        {
            rb.AddForce(-sidewaysForce*Time.deltaTime, 0, 0);//往x轴负方向添加力
        }
    }
}

2.4 摄像跟随

  • 注:若单纯把摄像机作为Player的子集,当Player碰撞时,Player旋转什么的,场景会出错。所以通过编写摄像机脚本控制。

  • 1.在Scripts文件夹中创建C#脚本,并命名为FollowPlayer,拖入Camera组件中。

  • 2.编写FollowPlayer脚本

    using UnityEngine;
    ​
    public class FollowPlayer : MonoBehaviour
    {
        public Transform player;//定义变化的物体
        public Vector3 offset;
    ​
        // Update is called once per frame
        void Update()
        {
            transform.position =player.position+ offset;
        }
    }
  • 3.在Camera的Inspector中改变offset的值,y=1,z=-5。

2.5 碰撞处理

  • 1.添加障碍物

    1)新键Cube,并命名为Barrier;

    2)添加素材改变其颜色;

    3)改变大小,使x=2;

    4)添加刚体组件,并把Mass改为2(确保比Player重)。

    5)为障碍物设置标签barrier。

  • unity3d跑酷素材,Unity,1024程序员节,unity,游戏,3d,c++

  • 2.创建C#脚本,命名为Player Collision,并作用在Player上。

  • 3.编写Player Collision脚本。

    using UnityEngine;
    ​
    public class PlayerCollision : MonoBehaviour
    {
        public PlayerMovement movement;//存放移动脚本
        void OnCollisionEnter(Collision collisionInfo)
        {
            //如果撞到了障碍物
            if(collisionInfo.collider.tag=="Obstacle")
            {
                movement.enabled=false;//保证碰撞之后不再移动
            }
        }
    }

    并将Player Movement脚本拖入Player Collision的movement卡槽中

2.6 游戏设计

  • 1.将Barrier拖入Material文件夹中,作为一个预制体,这样要设置障碍物时,直接把预制体拖入即可。

  • 2.改变Ground大小,Scale的x=10000,Position的z=4980,使其形成一个无尽平面。

  • 3.在Lighting中改善场景

    1)设置SkyBox;

    2)并开启fox,使玩家看不到远处的障碍物。

2.7 游戏结束

  • 1.新建C#脚本,命名为GameManager,创建空组件Game Manager并把脚本拖入。

  • 2.编写GameManager脚本。

    using UnityEngine;
    ​
    public class GameManager : MonoBehaviour
    {
        public void EndGame()
        {
            Debug.Log("GAME OVER");
        }
    }
  • 3.将Player作为预制体

    把Player拖入Asset中作为预制体,把原来的Player删掉,再把预制体Player拖入场景中。

  • 4.修改PlayerCollision脚本

    碰撞后游戏结束。

    using UnityEngine;
    ​
    public class PlayerCollision : MonoBehaviour
    {
        public PlayerMovement movement;//存放移动脚本
    ​
        void OnCollisionEnter(Collision collisionInfo)
        {
            //如果撞到了障碍物
            if(collisionInfo.collider.tag=="Barrier")
            {
                movement.enabled=false;//保证碰撞之后不再移动
                FindObjectOfType<GameManager>().EndGame();//结束游戏
            }
        }
    }
  • 5.修改PlayerMovement脚本

    掉下边缘后游戏结束。

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    ​
    public class PlayerMovement : MonoBehaviour
    {
        public Rigidbody rb;//定义刚体
        public float forwardForce = 1000f;//定义向前的力
        public float sidewaysForce = 200f;//定义侧向力
    ​
        // 用Fixed稀释重力
        void FixedUpdate()
        {
            rb.AddForce(0,0, forwardForce*Time.deltaTime);//在z轴上添加力
    ​
            //按d键向右移动
            if (Input.GetKey("d"))
            {
                rb.AddForce(sidewaysForce*Time.deltaTime, 0, 0);//往x轴正方向添加力    
            }
            //按a键向左移动
            if (Input.GetKey("a"))
            {
                rb.AddForce(-sidewaysForce*Time.deltaTime, 0, 0);//往x轴负方向添加力
            }
    ​
            //Player掉下边缘时游戏结束
            if(rb.position.y<-1f)
            {
                FindObjectOfType<GameManager>().EndGame();
            }
        }
    }

2.8 获胜界面

  • 1.胜利的触发器。

    1)创建一个Cube并重命名为End,作为触发器。

    2)将其拖至赛道随后,并设置大小使其能覆盖整个赛道宽。

    3)取消勾选Mesh Renderer,使其在场景中不可见。

    4)为了在编辑中可见,点击Inspector中的图形图像,选择绿色标签。

    unity3d跑酷素材,Unity,1024程序员节,unity,游戏,3d,c++

  • 2.编写触发器脚本

    1)创建C#脚本,并命名为EndTrigger,拖至End。

    2)修改GameManager脚本:

    using UnityEngine;
    using UnityEngine.SceneManagement;
    ​
    public class GameManager : MonoBehaviour
    {
     bool gameHasEnded = false;//判断游戏是否结束
    ​
     public float restartDelay = 1f;//复活延迟
    ​
     //游戏胜利时
     public void CompleteLevel()
     {
         Debug.Log("LEVEL WON!");
     }
    ​
     public void EndGame()
     {
         if (gameHasEnded==false)
         {
             gameHasEnded = true;
             Debug.Log("GAME OVER");
             Invoke("Restart", restartDelay);//重启游戏,必有复活延迟
         }
     }
    ​
     void Restart()
     {
         SceneManager.LoadScene(SceneManager.GetActiveScene().name);
     }
    }

    3)编写EndTrigger脚本

    using UnityEngine;
    ​
    public class EndTrigger : MonoBehaviour
    {
     public GameManager gameManager;
    ​
     void OnTriggerEnter()
     {
         gameManager.CompleteLevel();
     }
    }

    4)将GameManager拖入EndTrigger的新建卡槽中。

  • 3.UI设计获胜界面

    创建UI界面的Panel和Text,达到以下效果:unity3d跑酷素材,Unity,1024程序员节,unity,游戏,3d,c++

  • 4.创建动画

    1)Window--->Animation--->Create--->创建新文件夹Animation--->保存动画并命名为LevelCompleteunity3d跑酷素材,Unity,1024程序员节,unity,游戏,3d,c++

    2)录制动画并形成渐变效果unity3d跑酷素材,Unity,1024程序员节,unity,游戏,3d,c++

  • 5.场景跳转

    1)在LevelComplete上添加脚本LevelComplete

    using UnityEngine;
    using UnityEngine.SceneManagement;
    ​
    public class LevelComplete : MonoBehaviour
    {
     public void LoadNextLevel()
     {
         SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex+1);
     }
    }

    2)在动画中,成功界面两秒之后edd event,并添加函数LoadNextLevel(),实现场景转换。

2.9 结束界面

  • 1.新建界面

    file--->New Scene

  • 2.在新界面创建UI的panel,并把它调为浅灰色不透明unity3d跑酷素材,Unity,1024程序员节,unity,游戏,3d,c++

  • 3.新键Text文本,实现以下效果:unity3d跑酷素材,Unity,1024程序员节,unity,游戏,3d,c++

  • 4.在UI界面创建一个Button

    1)添加shadow组件,将x=0,y=-2,并调整透明度;

    2)创建Credits空物体,并把Credits脚本作用在上面(放在button本身也可以,后序将button拖入卡槽),编写脚本:

    using UnityEngine;
    ​
    public class Credits : MonoBehaviour
    {
     public void  Quit()
     {
         Debug.Log("Quit");
         Application.Quit();//只有导出时会实现
     }
    }

    3)在button的on click属性里点加号,并将物体credits拖入,再选择函数Quit;<img src="D:\Document\Typora\Game.assets\image-20231001000420760.png" alt="image-20231001000420760" style="zoom:25%;" />

    4)将界面保存并命名为Credits。

2.10 开始菜单

  • 1.复制粘贴结束界面Credits,并重命名为Menu。

  • 2.修改界面如下:unity3d跑酷素材,Unity,1024程序员节,unity,游戏,3d,c++

  • 3.编写start脚本:文章来源地址https://www.toymoban.com/news/detail-765076.html

    using UnityEngine.SceneManagement;
    using UnityEngine;
    ​
    public class Menu : MonoBehaviour
    {
        public void StartGame()
        {
            SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex+1);
        }
    }

到了这里,关于【Unity】3D跑酷游戏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Unity3D】如何用使用Unity实现退出游戏的功能

    1、使用Unity编译器时: 2、打包后: 很多时候,我们都知道Application.Quit()代码,但是我们在Unity编译器调试的时候发现即使挂上了这个代码的组件或物体都无法退出编译,因为该代码只在打包后可以实现退出功能。 所以我们可以把两个实现代码同时写入脚本,这样既可以在编

    2024年02月11日
    浏览(48)
  • 使用Unity3D制作2D游戏的重点做法

    官网上有提供一个 2D游戏的教学范例 ,这个游戏只不过把镜头摆放在横向位置跟随角色移动,游戏内物件运动时固定一个轴不动,使他像横轴式的2D游戏来玩,本质上其实还是个3D游戏,所以如果没有3D建模的话不就没办法做2D游戏了?其实这些并没有定论,就看制作者如何运

    2024年02月11日
    浏览(38)
  • Unity读书系列《Unity3D游戏开发》——编辑器的结构

    本篇对应标题书籍的第二章编辑器的结构,也就是unity的编辑器的使用及菜单的使用。 当我们制作的软件或游戏需要多人合作时,就会使用git、svn进行版本管理。一般来说只保留Assets、ProjectSettings、Packages这几个文件夹,git会自动生成.git文件,我们添加需要屏蔽的文件夹或后

    2024年01月25日
    浏览(55)
  • Unity3D项目之游戏场景小地图制作

    创建一个场景资源,可在asset store资源商店下载,选择心仪场景。 链接:https://assetstore.unity.com/?locale=zh-CN 添加一个对象GameObject,命名为player,子物体包括:主摄像机,角色,后面步骤会添加一个plane。 添加一个地图摄像机,命名为MapCamera。修改属性projection为OrthoGraphic;Size为

    2024年02月11日
    浏览(45)
  • Unity3D PVP游戏位置同步算法优化详解

    在Unity3D中,PVP(Player versus Player)游戏的位置同步是一项重要的技术,它决定了游戏中玩家之间的互动体验。本文将详细介绍Unity3D PVP游戏位置同步算法的优化方法,并给出相应的技术详解和代码实现。 对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础

    2024年01月16日
    浏览(38)
  • 【unity3D】unity记忆翻牌小游戏教程(简单详细)

    游戏开发的 学习记录 ⑨ (最近在做得游戏里想加一个类似于记忆翻牌小游戏得部分,然后在网上收集了资料学习了一下,学会后写下这份制作记录,希望可以帮到你~) 📜一位大佬的博客,写的很详细:【Unity3D游戏教程】记忆翻牌游戏 (大家可以先看大佬这篇,我写这篇

    2024年02月07日
    浏览(202)
  • Unity3D 爆火的休闲益智游戏工程源码/3D资源 大合集

    不定期补充新游戏工程源码!!! 博客种没有的游戏类型可以在评论区留言@我,我尽量哈~ 想要定制或代开发游戏私信我 **1、2D 关卡 益智,羊了个羊 经典玩法 下载地址:https://download.csdn.net/download/qq_43505432/89165409 游戏截图: 2、2D 第三人称 关卡 益智,控制角色飞行闯关 下

    2024年04月22日
    浏览(31)
  • Unity3D学习记录01:URP渲染管线以及3D游戏场景设置

    以下内容所使用的版本均为Unity2022.3 先在 Window-Package Manager-Unity Registry 里面搜索添加Universal RP   Unity中,创建渲染管线的方式为Asset文件夹下右键 Create-Readering-URP Asset(with Universal Asset) 会创建以下两个Pipeline:  接着在图中的设置里添加这两个渲染管线(Project Setting在Edit窗口下

    2024年02月08日
    浏览(39)
  • 【Unity3D游戏魔坦之争】游戏结束流程封装实现【七】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unityUI专题篇 🅰️ 😶‍🌫️:步骤实现 1.坐标三个转化 2.GUI的原点和屏幕的原点 3.结构体的特点回顾——涉及Rect_结构体类型 4.血条的

    2024年02月11日
    浏览(49)
  • 【Unity3D赛车游戏】【五】Unity中汽车加速效果是如何优化的?

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 :Unity游戏demo – 😶‍🌫️版本: Unity2021 😶‍🌫️适合人群:Unity初学者 😶‍🌫️学习目标:3D赛车游戏的基础制作 😶‍🌫️技能掌握

    2024年02月10日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包