步骤一 创建滚球

  1. Hierarchy界面下创建一个球体(sphere),命名为Player;创建地面,命名为Plane。
  2. 给Player增加一个组件Rigidbody。
  3. Project界面下创建文件夹Scripts,在里面创建C#脚本PlayController。基本思想是按下方向键就施加向相应方向的力。由于是物理模型,可以用FixedUpdate()代替Update()保持不同帧率下的稳定性。代码如下:
using UnityEngine;
using System.Collections;public class PlayerController : MonoBehaviour
{public float speed;private Rigidbody rb;void Start(){rb = GetComponent<Rigidbody>();}void FixedUpdate(){float moveHorizontal = Input.GetAxis("Horizontal");float moveVertical = Input.GetAxis("Vertical");Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);rb.AddForce(movement * speed);}
}
  1. 用VS编译,将此脚本拖到Player上。可以在Inspector界面下设置speed,即移动速度。进入game界面时按箭头移动球体。

步骤二 绑定相机

事实上,我们在Hierarchy界面下把相机拖到Player上就完成了绑定,通常这样是用作第一人称视角。这样的问题是当Player旋转的时候,相机也会跟着旋转,这样在进入game界面时,会有天旋地转的感觉。所以,尤其是第三人称视角,我们只需要相机和Player的相对位置保持一致。我们使用脚本CameraConller控制。代码如下:

using UnityEngine;
using System.Collections;public class CameraController : MonoBehaviour {public GameObject player;private Vector3 offset;void Start (){offset = transform.position - player.transform.position;}void LateUpdate (){transform.position = player.transform.position + offset;}
}

这里解释一下transform。他是所有Object都有的组件,其中transform.position、transform.ratation、transform.scale分别存储了这个Object的位置、角度、大小。
将此脚本拖到MainCamera上,点击Inspector界面中Player右边的齿轮,选择Player。
这里采用LateUpdate(),这样他就时所有Update中最后更新的。

步骤三 建立墙壁

首先建立一个空物体,命名为Walls。再在Plane周围创建4面墙壁,隶属于Walls,分别命名为West Wall,East Wall,North Wall,South Wall。

步骤四 建立目标体

首先在脚本PlayerController中增加语句:

private void OnTriggerEnter(Collider other){if(other.gameObject.CompareTag("Pick up")){other.gameObject.SetActive(false);}}

这个函数的意思是如果Player如果碰到了某种触发器,就执行这个函数。而这个函数里面的意思是,如果这个other的触发标签(Tag)是"Pick Up",那么设置这个other物体不活跃,相当于该物体在Inspector界面下取消了第一个勾,从而设定为消失。
接下来就是设置Tag。首先我们在Project文件夹下创建Prefabs文件夹,建立Cube命名为Pick Up,可以涂为黄色。双击进入,从上向下找到Tag,选择Add Tag,点加号,并命名为Pick Up。回到主页面,建立空物体Pick Ups,在Pick Ups下使用若干Prefabs中的Pick Up,拷贝若干。结果如图:

最后进入Prefabs中的Pick Up中,在Box Collider中点击Is Trigger。创建Rigidbody,勾选Use Gravity和Is Kinematic。

步骤五 显示分数和结束游戏

进入PlayerController脚本,新建私有变量count用来记录分数。在start()函数中初始化为0。每吃到一个“Pick Up”,count+1。

...
private int count
void Start()
{rb = GetComponent<Rigidbody>();count = 0;
}
...private void OnTriggerEnter(Collider other)
{if(other.gameObject.CompareTag("Pick Up")){other.gameObject.SetActive(false);count++;}
}

接下来的问题就是怎么显示这个分数了
在Hierarchy点create->UI->Text,重命名为Count Text。
在Inspector中Rect Transform菜单下点击大方块,按住Shift+Alt键选左上角。PosX改为10,PosY改为-10。
打开脚本PlayerController,增加代码。

...
using UnityEngine.UI;public class PlayerController : MonoBehaviour
{public Text CountText;void Start(){...SetCountText();}...private void OnTriggerEnter(Collider other){if(other.gameObject.CompareTag("Pick Up")){...SetCountText();}}void SetCountText(){CountText.text = "Count: " + count.ToString();}
}

创建新的文本对象,重命名为Win Text,Paragraph中设为居中。PosY设为75。
增加代码如下:

public Text WinText;
void Start()
{...WinText.text = "";
}
private void OnTriggerEnter(Collider other)
{if(other.gameObject.CompareTag("Pick Up")){...if(count >= 12){WinText.text = "You Win!";}}
}

点击Player,分别链接对应的文本。

步骤六 导出游戏

首先保存场景、保存项目。
File–>Build Setting
选择合适的平台,把场景文件拖到上方的框中(Scenes In Build)。点击Build,在项目中新建一个文件夹Build,选择此文件夹。点击Build and Run。

好了,大家愉快的玩游戏吧!

参考文献

https://www.w3cschool.cn/unity3d_jc/unity3d_jc-fntk2d6t.html
https://docs.unity3d.com/2018.3/Documentation/ScriptReference/

代码

https://github.com/lyksunny/Unity/tree/master/RollBall

Unity 滚球游戏相关推荐

  1. unity java游戏大全_3D unity   滚球小游戏

    3D unity 滚球小游戏 1.打开unity,创建一个新的项目(或在已创建的项目里创建一个新的场景). 2.制作平台 创建一个Plane和四个cube模型,附上相应的材质,调整大小和位置,形成一个 ...

  2. 制作滚球游戏学习Unity3D

    从创建项目开始 创建一个项目 打开unity,在Projects中可以查看当前的本地项目或者云端项目,点击New project或者右上角的New都可以新建项目. 然后在1处填写创建项目的名称,2处选 ...

  3. 【学习】Unity3D滚球游戏 原理及实现

    转载:https://blogs.littlegenius.xin/2019/02/10/从滚球游戏初步体验Unity3D/ 从创建项目开始 创建一个项目 打开unity,在Projects中可以查看 ...

  4. 【Unity3D】二、制作滚球游戏学习Unity3D(上)

    从创建项目开始 创建一个项目 打开unity,在Projects中可以查看当前的本地项目或者云端项目,点击New project或者右上角的New都可以新建项目. 然后在1处填写创建项目的名称,2处选 ...

  5. 【Unity3D】二、制作滚球游戏学习Unity3D(下)

    上一篇文章:https://blog.csdn.net/qq_38962621/article/details/86930742 创建碰撞小立方体 新建Cube 我们在游戏场地中加入一些旋转的小方块儿 ...

  6. 滚球游戏(动态规划)

    某滚球游戏规则如下:球从入口处(第一层)开始向下滚动,每次可向下滚动一层,直到滚至最下面一层为止.球每次可滚至左下.下方或右下三个方格中的任意一个,每个方格都有一个得分,如样例所示.第1层有1个方格, ...

  7. 滚球游戏(数字三角形的变形)

    问题 F: 滚球游戏 [命题人 : admin] 时间限制 : 1.000 sec 内存限制 : 128 MB 题目描述 某滚球游戏规则如下:球从入口处(第一层)开始向下滚动,每次可向下滚动一层,直到 ...

  8. unity fixedupdate_Unity之滚球游戏(上)

    程序员那些事 真正的程序员喜欢兼卖爆米花,他们利用CPU散发出的热量做爆米花,可以根据米花爆裂的速度听出正在运行什么程序. 创建一个项目 打开unity,在Projects中可以查看当前的本地项目或者 ...

  9. html代码3D滚球游戏代码,滚球控制系统代码

    [实例简介] 基于stm32f407的滚球控制系统代码的嵌入式部分 嵌入式接收视觉传送的关于小球的位置信息(x,y)通过pid处理之后 驱动舵机控制板子运动使小球到达指定位置 [实例截图] [核心代码 ...

最新文章

  1. 关于 Oracle DB CONSTRAINT约束的一些SQL ORA-02292: integrity constraint violated
  2. 一键修改分辨率bat_求使用批处理BAT设置分辨率的方法介绍?
  3. ImportError: No module named 'pip._vendor.retrying'
  4. 数组|leetcode209.长度最小的子数组
  5. 从fork-join /线程池调用的Singelton bean中的访问spring请求范围缓存
  6. mysql 存储过程 on_MySQL存储过程的权限问题小结
  7. html菜单wodpress,wordpress进阶教程(二十二):初步了解菜单
  8. 山东科技大学计算机基础知识,山东科技大学_计算机操作系统试题
  9. Java中的类加载器ClassLoader
  10. Hexo及Next主题配置(最新版)
  11. 涉密计算机检查情况 月检查表,关于2017年下半年保密检查的通知
  12. 利用selenium获取接口数据
  13. 赵聪慧 java_专家引领,筑梦前行——赵聪慧省名班主任工作室
  14. LTE的CQI及下行码率计算
  15. 1214-赚钱的单子绝不能亏钱出,止损也不能设的太大。
  16. 咸鱼软件应用—Cura3D切片
  17. 【强化学习】强化学习的基本概念与代码实现
  18. 给TextView设置颜色选择器selector
  19. Excel调整行高,鼠标右键直接选中一行进行调整了
  20. window结束进程命令

热门文章

  1. HRM人力资源系统-Day13
  2. matlab y 0,用MATLAB算y-2y-3y=0的解
  3. 手把手教你做树莓派魔镜-MagicMirror(一)-准备工作
  4. in ./node_modules/html-entities/lib/index.js终端报错
  5. 字母全排列——递归方法
  6. 密码格式 数字+字母
  7. 用计算机怎么弹赢在江湖,赢在江湖-姜鹏-和弦谱-《弹吧》官网tan8.com-和弦谱大全,学吉他,秀吉他...
  8. Java学习教程,Java从入门到精通,全套Java视频教程+笔记+配套工具
  9. 海思SD3403开发板学习(二)
  10. QT 黑色风格+白色风格+淡蓝色风格样式表。