unity——小球酷跑游戏制作

2023-11-05

课堂课程记录——小球滚动

所有变量与物体名的命名原则都是见名知意

一、创建一个unity项目
二、Create所需3Dobject
1.Player
在这里插入图片描述2.walls
在这里插入图片描述
三、添加属性
1.添加在Player上
a.添加Rigidbody组件在这里插入图片描述
b.添加new script组件,并命名为PlayMove,代码如下:

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

public class playMove : MonoBehaviour
{
    public Rigidbody rd;
    public float speadAutoMove=5;
    public float speadMoveUpandDown=20;
    // Start is called before the first frame update
    void Start()
    {
        rd=gameObject.GetComponent<Rigidbody>();
    }

    // Update is called once per frame
    void Update()
    {
        PlayerAutoMove();
        PlayerMoveUpandDown();
    }
    private void PlayerAutoMove(){
        rd.AddForce(Vector3.right*speadAutoMove);   //前进
    }
    private void PlayerMoveUpandDown()
    {
        float v=Input.GetAxis("Vertical");  //上下
        rd.AddForce(v*Vector3.up*speadMoveUpandDown);//给一个上下的力量

    }
}

2.添加到walls上
a.首先create empty将wall包含
在这里插入图片描述
b.在Wall上添加new script组件,代码如下:

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

public class wallControl : MonoBehaviour
{
    private float offset;
    public GameObject player;
    // Start is called before the first frame update
    void Start()
    {
        offset=gameObject.transform.position.x-player.transform.position.x;
    }

    // Update is called once per frame
    void Update()
    {
        FollowPlayMove();
    }
    void FollowPlayMove(){
        gameObject.transform.position=new Vector3(player.transform.position.x+offset,0,0);
    }
}

3.实现相机跟随
a.在相机上添加new script 组件并命名为cameraControl,代码如下:

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

public class cameraControl : MonoBehaviour
{
    public GameObject player;
    private float offset_camera;
    // Start is called before the first frame update
    void Start()
    {
        offset_camera=gameObject.transform.position.x-player.transform.position.x;
    }

    // Update is called once per frame
    void Update()
    {
        FollowCameraMove();
    }
    void FollowCameraMove(){
        gameObject.transform.position=new Vector3(offset_camera+player.transform.position.x,gameObject.transform.position.y,gameObject.transform.position.z);
    }
}

b.将script中设置的player变量赋值:
在这里插入图片描述
至此基本的小球滚动游戏就完成了。
在这里插入图片描述

继续上节课的内容:

4.将player的形状改为球形
左键选中player的属性:在这里插入图片描述
将mesh属性由cube改为sphere
5.创建障碍预制体
a.先创建一个3D物体cube,将其命名为barrier。
b.在project的asset中创建prefab预制体文件
在这里插入图片描述
并将之前创建的barrier直接拖拽到prefab中。
若对prefab预制体的作用不理解的话,可访问如下链接:
预制体的制作与功能
若barrier物体变为蓝色,则创建成功。
在这里插入图片描述
6.随机生成障碍物
a.创建一个空物体,然后命名为barrierControl。
在这里插入图片描述
b.在该物体上添加new script的组件,C#代码如下:

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

public class BarrierControl : MonoBehaviour {
    public int barrierInterval=5;
    public GameObject player;
    public GameObject CurrentBarrier;
    public GameObject BarrierPre;
	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
        AutoCreatBarrier();

    }
    // 障碍物自动生成
    public void AutoCreatBarrier()
    {
        if(player.transform.position.x>CurrentBarrier.transform.position.x)
        {
            //生成新的障碍物
            float targetX = CurrentBarrier.transform.position.x + barrierInterval;
            float targetY = RandomBarrierPosition();
            Vector3 targetPos = new Vector3(targetX,targetY,0);
            GameObject g = Instantiate(BarrierPre,targetPos,Quaternion.identity);
            //随机大小
           g.transform.localScale = new Vector3(g.transform.localScale.x, RandomBarrierSize((int)g.transform.position.y), g.transform.localScale.z);
            //判断障碍更换
            CurrentBarrier = g;
        }
    }
    //障碍随机大小
    public float RandomBarrierSize(int r)
    {
        int rAbs = Mathf.Abs(r);
        if(rAbs==0)
        {
            return 6;
        }
        else
        {
            return (3-rAbs)*2+1;
        }
    }
    //障碍物随机位置
    public float RandomBarrierPosition()
    {
       int r = Random.Range(-3,3);
        Debug.Log(r);
        return r;
    }

}

到目前为止障碍物就能不断的在与小球的距离控制下产生了。
7.障碍的清除
a.在之前的wall文件夹中创建一个新cube物体,命名为trigger,控制大小长度在略小于上下wall之间,以便过滤掉与其接触的barrier(切记不要接触上下的wall,否则游戏一开始就会将上下的wall给消除,小球一下就掉下去了)。
在这里插入图片描述
b.右键选中trigger,在右侧的属性栏,移除Cube(Mesh Filter)和Mesh Renderer属性。
在这里插入图片描述
使trigger成为透明状态:
在这里插入图片描述

c.给trigger添加new script组件,C#代码如下:

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

public class AutoDestoryBarriers : MonoBehaviour {

    private void OnTriggerEnter(Collider other)
    {
        Destroy(other.gameObject);
    }
}

8.给障碍物添加随机产生颜色功能

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

public class BarrierColor : MonoBehaviour {
    public Material[] barrierMaterial;
	// Use this for initialization
	void Start () {
        int i = Random.Range(0,barrierMaterial.Length);
        gameObject.GetComponent<Renderer>().material = barrierMaterial[i];
	}
	
	// Update is called once per frame
	void Update () {
		
	}
}

在这里插入图片描述

9.碰到障碍物颜色提示
在这里插入图片描述
C#代码如下:

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

public class PlayerColorControl : MonoBehaviour
{
        private void OnCollisionEnter(Collision collision)
        {
           // Debug.Log("1");
           //分数减少
           UIcontrol._instance.AddScore(-10);
            gameObject.GetComponent<Renderer>().material.color=Color.red;
        }
        private void OnCollisionExit(Collision collision)
        {
            gameObject.GetComponent<Renderer>().material.color=Color.white;
        }
}

9.分数记录
在这里插入图片描述
C#代码如下:

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

public class UIcontrol : MonoBehaviour
{
   public Text scoreText;
   public int score=0;


    //单列模式
    public static UIcontrol _instance;
    private void Awake()
    {
        _instance=this;
    }
    public void AddScore(int x)
    {
        score+=x;
        scoreText.text="得分:"+score;
    }
}

并在barrierControl中添加如下代码进行分数增加
在这里插入图片描述
在Playcolorcontrol中添加分数减少代码:
在这里插入图片描述
完整画面如下:
在这里插入图片描述

以上小球酷跑课程内容就结束了,稍后我会对游戏进行进一步的完善功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

unity——小球酷跑游戏制作 的相关文章

  • 【Unity&C#&随机数】随机数

    一个简单的随机数获得 0或1 使用了这样的代码 想要获得0或者1 if Input anyKeyDown float i 1 if i 1 i Random Range 0 Rang i i lt 0 5 0 1 Debug Log Cou
  • Unity 安卓打包

    Unity打包的方式有很多种 自动打包和手动打包 今天小弟就鼓捣鼓捣unity手动打包 如果想动态打包的话 可以去看其他大佬的帖帖哈 unity打包先配置环境 下载unity的时候可以顺道把unity的安卓包下载下来 如果忘了也没事 可以从
  • Unity 分块延迟渲染01 (TBDR)

    现代移动端图形体系结构的概述 现代SoC通常会同时集成CPU和GPU CPU被用于处理需要低内存延迟的序列 大量分支的数据集 其晶体管用于流控制和数据缓存 GPU为处理大型 未分支的数据集 如3D渲染 晶体管专用于寄存器和算术逻辑单元 而不
  • Unity 粒子特效、材质发光 HDR ShaderGraph图文教程[完成lit发光设置]

    效果如图 准备工作 在hdr模式下 关闭Directional Light 相机设置 移动球挂一个点光源作为子节点 设置自行调节 0 创建移动球的材质及shader shader gt 在Project Create Shader Grap
  • Unity Shader入门精要第七章 基础纹理之遮罩纹理

    Unity系列文章目录 文章目录 Unity系列文章目录 前言 一 实践 参考 前言 遮罩纹理 mask texture 是本章要介绍的最后一种纹理 它非常有用 在很多商业游戏中 都可以见到它的身影 那么什么是遮罩呢 简单来讲 遮罩允许我们
  • Unity中实现倒计时的几种方式

    1 Time time using UnityEngine public class TimeTest MonoBehaviour public float secound 10 void Update Timing private flo
  • Unity中UI框架的使用1-添加面板、显示Loading页面

    其中BasePanel和Canvas都是挂在面板的预制物上的 1 导入我们的UI框架 本篇文章中有用的是两个UIPanelType NUIManager和NBasePanel 会放在文章最后供大家使用 2 先将我们做好的Panel设置成预制
  • Unity与Android的Back键冲突解决

    Unity与Android的Back键冲突解决 上一篇的最后留下了两个问题 Unity视图下横屏闪退 Unity视图下Android无法响应back返回上一activity 对于第一个问题 应该是Unity横屏下视图的某些设置跟Androi
  • GooglePlay提审警告(com.google.android.gms:play-services-safetynet:17.0.0)

    1 Goole在今年6月份出的新政策 不在使用safetynet 而使用Play Integrity API 2 项目本身没有使用过safetynet 3 使用了firebase 查阅资料 解决方案如下 implementation pla
  • 【Unity】按Esc进入操作菜单

    本文章是基于如下视频的自我总结 https www youtube com watch v JivuXdrIHK0 步骤如下 1 在Canvas 界面添加一个Panel Panel中添加一个按钮 调整按钮的大小为合适大小 调整字体的大小为合
  • unity实现鼠标右键控制视角

    主要实现的功能是相机跟随主角 鼠标右击移动后 相机的视角会旋转 思路 在主角里创建空的子物体 把相机绑在空物体上 通过旋转空物体来实现视角的旋转 要把相机调整到适当位置 代码如下 public float rotateSpeed 100 设
  • unity3d切换场景Application.LoadLevel(1)含义

    Application LoadLevel 1 场景ID
  • 【Unity】如何让Unity程序一打开就运行命令行命令

    背景 Unity程序有时依赖于某些服务去实现一些功能 此时可能需要类似打开程序就自动运行Windows命令行命令的功能 方法 using UnityEngine using System Diagnostics using System T
  • Unity学习笔记

    一 旋转欧拉角 四元数 Vector3 rotate new Vector3 0 30 0 Quaternion quaternion Quaternion identity quaternion Quaternion Euler rota
  • Unity学习笔记

    一 旋转欧拉角 四元数 Vector3 rotate new Vector3 0 30 0 Quaternion quaternion Quaternion identity quaternion Quaternion Euler rota
  • 游戏开发常见操作梳理之NPC任务系统

    多数游戏存在任务系统 接下来介绍通过NPC触发任务的游戏制作代码 using System Collections using System Collections Generic using UnityEngine
  • 游戏开发常见操作梳理之NPC药品商店系统(NGUI版)

    后续会出UGUI Json的版本 敬请期待 游戏开发中经常会出现药品商店 实际操作与武器商店类似 甚至根据实际情况可以简化设置 废话不多说 直接上代码 药品商店的源码 using System Collections using Syste
  • 游戏开发常见操作梳理之小地图的制作

    游戏中一般存在小地图系统 实际上就是设置一个新的摄像机放置在玩家的正上方 然后在小地图上显示新摄像机看见的东西就可以了 在小地图上一般存在放大地图和缩小地图的按钮可以方便放大和缩小地图 这些操作是如何实现的呢 接下来直接上核心代码 usin
  • 游戏开发常用实践操作之按动任意键触发

    接下来一些笔记会对于一些大大小小的实践操作进行记录 希望对你有所帮助 在游戏中 我们经常会遇到一些按动任意键触发的操作 接下来展示核心代码 以下是对于Unity中的操作 使用的UI是NGUI 对于核心操作没有影响 你可以自己置换 void
  • 游戏开发常见操作系列之敌人系统的开发一(U3D)

    在开发游戏的过程中 我们常常会出现一些敌人攻击我们玩家 并且实现掉血以及死亡的现象 敌人还会源源不断地生成 这是怎么制作的呢 接下来为大家提供方法 其中使用了NGUI 后续会更新其它方法 敬请期待 使用HUDText实现扣血时显示文本 直接

随机推荐

  • 把玩数据在内存中的存储

    前言 时光如梭 今天到了C语言进阶啦 基础知识我们已经有了初步认识 是时候该拔高拔高自己了 目标 掌握浮点数在内存的存储 整形在内存的存储 鸡汤 时光易过 岁月蹉跎 深度剖析数据在内存中的存储 1 数据类型的介绍 前面已经讲解过了 可以再看
  • vue-element-admin第一篇:vue-element-admin初始项目

    1 事前准备 下载项目 https gitee com mirrors vue element admin git 执行代码 npm install npm run dev OK 准备工作完成 如果有报错 请移步到度娘那里去 2 先分析模块
  • [YOLO专题-10]:YOLO V5 - ultralytics/detect检测代码的命令行参数详解

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 122266884 目录 第1章 准备
  • python时序数据处理2--提取年月信息、时间作差等

    同样首先先生成时序数据 1 生成时序数据 import pandas as pd import numpy as np from datetime import datetime timedelta test pd date range 2
  • 3.1 代码审核机制

    一次咨询活动 同一朋友交流基于复用的架构设计理念时 他说 你讲的那个很好 但离我们现状有点远 我现在每天要编码 要开会 要出差 要交流 要带人 要流程 招个能干的人可难了 而刚做顺手的就想跑 留一堆代码让我擦屁股 一段话不知道出了多少一线工
  • 三极管相关知识

    NPN型三极管 NPN型三极管 由三块半导体构成 其中两块N型和一块P型半导体组成 P型半导体在中间 两块N型半导体在两侧 三极管是电子电路中最重要的器件 它最主要的功能是电流 放大和开关作用 半导体三极管也称为晶体三极管 可以说它是电子电
  • Riverbed补齐最后一块拼图

    如果你知道APM Application Performance Management 应用性能管理 和NPM Network Performance Management 网络性能管理 应该知道它很重要 道理很简单 很多问题都是管理问题
  • C++:std::thread

    1 std thread的用法 头文件为 include
  • 【Computer Science】标准输入输出重定向

    本文介绍终端里的输入输出重定向 Windows 下的 cmd 和 Linux 下的 shell 相同 Command 功能 command gt filename 把标准输出重定向到一个文件中 command gt gt filename
  • 软件测试实习面试都问啥?

    软件测试实习面试都问啥 面试问的问题 Day1 April 8th Day2 April 9th Day3 April 10th 面试前的准备 color red heartsuit 实习面试结束 happy 这周我总共面试了三个软件测试的
  • Linux--vim使用

    普通文件编辑 vim 文件名 普通文件 命令行模式 ESC 插入模式 a i o O进入插入模式 末行模式 进入末行模式 q退出 q 强制退出 w保存 wq保存退出 w newfile另存 vim使用进阶 命令行模式下的命令 1 对于光标的
  • 从0到1构建新闻长文本分类系统

    新闻分类系统概述 新闻分类系统 顾名思义 就是对于一片新闻或者是一片文章 进行自动的分类 例如政治 财经 娱乐等等 从技术角度讲 其实属于自然语言处理中比较经典的文本分类问题 当然在一个工业级别的分类系统当中 会遇到各种各样的问题 例如语料
  • 【vulntarget】系列:vulntarget-g 练习WP

    本文仅为学习 vulntarget 在本地环境测试验证 无其它目的 请勿进行未经授权的测试 一 靶场信息 下载地址 百度云链接 链接 https pan baidu com s 1R 9udIuoPavsTI18 lPP3Q pwd ics
  • endl和"\n"的区别

    在C 中 打印字符串时 cout不会自动移到下一行 而想要换行 有两种方式 一种是控制符endl 一种是换行符 n 下面来介绍下两种方式 endl是一个C 符号 表示重起一行 在输出流中插入endl将导致屏幕光标移到下一行开头 C 中还提供
  • 使用带Arduino IDE & WIZ820io的ATmega1284P

    使用带Arduino IDE WIZ820io的ATmega1284P 2013 07 04 Filed under IO模块 and tagged with arduino Arduino IDE atmega1284p RAM问题 W5
  • 解决git push 错误error: src refspec master does not match any. error: failed to push some refs to

    解决git push 错误error src refspec master does not match any error failed to push some refs to 在和远程仓库关联后 我们通过 push 命令将本地仓库的文
  • 装机:MSDT & HEDT 的区别

    MSDT Main Stream Desktop 主流桌面平台 HEDT High End Desktop 高端桌面平台 HEDT平台在很多方面的性能都要比MSDT平台强很多 相对于MSDT平台 HEDT平台通常拥有更多的核心数量 更多的内
  • C#查询ACCESS数据库字段和时间字段

    查询表的所有字段 string Format SELECT FROM 0 TableName 查询表中的一个字段 在ACCESS中将字段用CStr 转换成字符串来判断 string Format SELECT FROM 0 WHERE CS
  • 多协议服务器,多协议远程连接服务器

    多协议远程连接服务器 内容精选 换一换 远程连接Linux云服务器报错 Access denied帐号或密码输入错误 SSH服务端配置了禁止root用户登录的策略 帐号或密码输入错误 检查输入的用户名或密码 Linux云服务器默认用户名ro
  • unity——小球酷跑游戏制作

    课堂课程记录 小球滚动 所有变量与物体名的命名原则都是见名知意 一 创建一个unity项目 二 Create所需3Dobject 1 Player 2 walls 三 添加属性 1 添加在Player上 a 添加Rigidbody组件 b