[周更]4.unity3D_Roll_a_Ball

ε≡٩(๑>₃<)۶ 一心向学


文章目录

  • [周更]4.unity3D_Roll_a_Ball
  • 前言
  • 一、场景搭建
    • 1.地板
    • 2.墙
    • 3.金币
    • 4.球
  • 二、脚本设计
    • 1. 小球的脚本
    • 2. 金币的脚本
    • 3. 摄像头的脚本
    • 4. 金币持续生成的脚本
  • 总结

前言

Roll a Ball是一个非常简单的小游戏,非常适合拿来给初学者练手,下图为实现的效果。


一、场景搭建

这里我们介绍相关物体的基础设置,这四个物体的贴图都可以直接在网上找到。

1.地板

地板的存在就是为了防止小球落下去,我们可以直接设置为一个平面。

记住这个平面必须有Mesh Collider组件,这个组件主要就是检测碰撞,防止小球直接掉下去。

2.墙

四个长方体搭在一起……。这四个也要有碰撞检测器。

3.金币

金币是用Cylinder做的,因为金币是我们要拾取的道具,所以它的碰撞修改有点不同。记住这里我们必须把is Trigger勾上,这是为了让小球既能流畅地通过金币,又能成功检测到金币。

4.球

这里我们给小球添加一个刚体组件,这是为了防止小球变形,且能在场景中与其他部件正常交互。同时为了防止小球跳出场景,小球需要有一定重力。

二、脚本设计

1. 小球的脚本

检测既要检测小球的碰撞,又要能通过键盘控制小球的移动。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class RigidBall : MonoBehaviour
{private Rigidbody rigidbody;public float power;// Start is called before the first frame updatevoid Start(){rigidbody = GetComponent<Rigidbody>();}// Update is called once per frameprivate void Update(){//获取水平 垂直输入float hor = Input.GetAxis("Horizontal");float ver = Input.GetAxis("Vertical");//使用刚体模拟小球滚动rigidbody.AddForce(new Vector3(hor, 0, ver) * power);if (Input.GetKeyDown(KeyCode.Space)&&transform.position.y<=0.5f){//跳跃模拟//rigidbody.AddForce(Vector3.up * power);//设置向上速度rigidbody.AddForce(new Vector3(0,10,0)*power);}}//检测是否碰到了墙,碰到了墙就反弹,这个其实可有可无//主要是为了模拟撞墙后的效果,如果没有这个检测,小球//撞墙就会直接停下private void OnCollisionEnter(Collision collision){GameObject other = collision.gameObject;switch (other.tag){case "Wall":float fFlag = -1.0f;if (other.name == "WallUp"){float lAngle = Vector3.Angle(transform.up, Vector3.right);transform.Rotate(Vector3.forward * 2.0f * lAngle * fFlag);}else if (other.name == "WallDown"){float lAngle = Vector3.Angle(transform.up, Vector3.right);transform.Rotate(Vector3.forward * 2.0f * lAngle);}else if (other.name == "WallLeft"){float lAngle = Vector3.Angle(transform.up, Vector3.up);transform.Rotate(Vector3.forward * 2.0f * lAngle * fFlag);}else if (other.name == "WallRight"){float lAngle = Vector3.Angle(transform.up, Vector3.up);transform.Rotate(Vector3.forward * 2.0f * lAngle);}Debug.Log("进入" + collision.gameObject.name);break;default:break;}}#region 触发器碰撞检测函数,主要是为了检测小球撞到金币//注意:两两碰撞必须至少有一方是触发器 必须有一方有刚体组件// Update is called once per frameprivate void OnTriggerEnter(Collider other){Debug.Log("进入" + other.gameObject.name);switch (other.tag){case "coin":GameObject.Destroy(other.gameObject);break;default:break;}}

2. 金币的脚本

这个比较简单,我们只要让金币旋转就好了。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Coin : MonoBehaviour
{// Start is called before the first frame update//可以修改速度public float speed=100;private void Update(){//旋转移动,可有可无transform.Rotate(Vector3.up * speed * Time.deltaTime, Space.World);}
}

3. 摄像头的脚本

让摄像头跟随小球移动,防止小球离开视界。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Camera : MonoBehaviour
{// Start is called before the first frame updatepublic Transform target;//摄像机跟随的目标//偏移量Vector3 offset;private void Start(){//目标位置 - 摄像机位置offset = target.position - transform.position;}private void LateUpdate(){//更新相机位置   保持偏移量不变transform.position = target.position - offset;}
}

注:写完这个后。记得到摄像头的设置界面,将组件设置成如下图所示的情况:


4. 金币持续生成的脚本

我们将这个脚本绑到平面上,这样金币就会不断生成了。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Coin_grow : MonoBehaviour
{// Start is called before the first frame updatepublic float duration;private float m_Time;void Start(){m_Time = duration;}// Update is called once per framevoid Update(){m_Time -= Time.deltaTime; }//这个函数的意思是其将在每次Update函数调用之后调用一次private void LateUpdate(){//每隔一段时间,就生成一个金币。if (m_Time <= 0){GameObject new_coin = GameObject.Instantiate(GameObject.FindGameObjectWithTag("coin"));new_coin.transform.position = new Vector3(Random.Range(-14.5f,14.5f), 0.888f, Random.Range(-14.5f, 14.5f));m_Time = duration;}}
}

总结

Roll_a_Ball只是一个非常简单的小游戏,也没有动画和音效,下周争取整个复杂点的出来。该项目所有的文件都在这了。提取码是73ns。
ᕦ(・ㅂ・)ᕤ(任何不足之处,欢迎大家留言

[周更]4.unity3D_Roll_a_Ball相关推荐

  1. 开始记录自己的搬砖学习生涯(尽力周更~~)

    开始记录自己的搬砖学习生涯(尽力周更~~) Mon 06 Mon 13 Mon 20 Mon 27 已完成仿真验证 进行编程实验中 计划中 现有任务 目前进行电机缺相保护实验

  2. 记录我的java之路——day26(周更)

    玩转JavaScript JavaScript概述 JavaScript简称JS,一种直译式(无需编译)脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScri ...

  3. 《卡尔琳记事本》,召唤师的故事,周更

    二等男爵麦克在一次出游途中,意外得知自己的小儿子芮恩,竟然具备召唤师的潜质,于是年纪尚幼的芮恩,被送到了西哥伦堡的卡尔琳学院.那里是西哥伦郡的第二大学院,西格玛行省的第三大召唤师学院. 而召唤师的故事 ...

  4. 2021周更03:周末加了两天班

    目录 周五通宵,周末加班 难受到怀疑自我 先满足公司需求,再满足职业要求 思考这份工作的价值 周五通宵,周末加班 周五突然安排了2个紧急的工作任务,周六上线一个,周日上线另一个. 周一到周四清闲了四天 ...

  5. 周更计划----web安全学习

    本周做题---ctfshow(web入门-信息搜集1-18) 目录 web1 web2 web3 web4 web5 web6 web7 web8 web9 web10 web11 web12 web ...

  6. 简直让人欲罢不能!820个ML Python库,star超260万,持续周更中...

    当你发愁找不到合适的开源项目时,有人已经悄悄地整理好了.今天要介绍的这个 GitHub 项目提供了大量机器学习 Python 库,覆盖机器学习框架.数据可视化.强化学习等多个领域,而且项目作者还对每个 ...

  7. 30天敏捷结果(2):用三个故事驱动你的一周

     "Map out your future, but do it in pencil." ~Jon Bon Jovi 要好好计划未来,但也必须随时应形势而变通.--乔恩.博.乔文 ...

  8. 9月第1周国内搜索类网站频道:百度覆盖数创新高

    根据国际统计机构Alexa公布的最新数据显示,9月第1周(2013-09-02至2013-09-08),国内搜索类网站/频道排行榜中,百度以130300的周均用户覆盖数居于榜首,排行第二的是覆盖数为2 ...

  9. 9月第1周国内IT技术类网站:CSDN覆盖数持续走低

    根据国际统计机构Alexa公布的最新数据显示,9月第1周(2013-09-02至2013-09-08),国内IT技术类网站排行榜中,CSDN以1710居于榜首,第二位是1170的博客园,第三位是670 ...

最新文章

  1. 过滤器在图纸上的符号_零基础秒懂,看了这份建筑符号清单,就能快速识别建筑图纸,收藏...
  2. 2022年,我该用JAX吗?GitHub 1.6万星,这个年轻的工具并不完美
  3. 【MySQL】如何最大程度防止人为误操作MySQL数据库?这次我懂了!!
  4. maven springboot 除去指定的jar包_SpringBoot的运行机制
  5. 如何使用Emacs Org模式和Reveal.js创建幻灯片
  6. 如何在opengl用代码绘制英文_如何用AIPS直接绘制服装款式图(线稿)
  7. Faster-RCNN 训练自己的数据
  8. Tomcat servers.xml 无注释版
  9. POJ 2976 Dropping tests | 01分数规划
  10. 在命令行中使用vs编译器
  11. 菜鸟教程Python教程100例合集
  12. Linux 应急响应入门:入侵排查应该这样做
  13. 计算机专业窗体的事件何时触发,高三计算机专业VB试题(六)1
  14. sql 两表关联查询
  15. 谈微软 KMS 激活
  16. CT一般扫描参数_头颅CT扫描技术
  17. MarkdownPad2的使用
  18. firefox插件推荐
  19. 大二学科不挂科 速冲方法推荐(数据结构+计组+操作系统+算法+数据库+计网)
  20. 2019年丰巢科技Java面试题

热门文章

  1. Android TextView跑马灯不动 及属性
  2. oracle8i substr,Oracle中INSTR和SUBSTR的用法
  3. Java2实用教程第五版+第四章习题答案
  4. 系统集成项目管理工程师2018年上半年下午案例分析题及答案
  5. 51单片机OLED收银电子秤称重计价清零去皮金额累计HX711
  6. 数学建模之减肥计划 matlab编程,数学建模matlab算法大全第02章整数规划.pdf
  7. 麒麟桌面系统安全中心介绍
  8. Linux netstat命令结果分析
  9. netstat 命令用法详解
  10. 【韩顺平】Java线程(基础)知识点总结