目录

基础资料

小球脚本:监听键盘使小球移动

摄像机脚本:关联小球与摄像头(镜头不翻滚)

物体旋转脚本

Debug:

存储计分,并显示Text:

Build

完整项目下载


基础资料

Unity官方教程:

https://unity3d.com/cn/learn/tutorials/projects/roll-ball-tutorial/setting-game?playlist=17141

Unity API

https://docs.unity3d.com/ScriptReference/

API翻译

http://www.ceeger.com/Manual/index.html

左上角scale tool 伸缩,中上部Gizmos取消show grid

为物体添加刚体(Rigidbody)组件(Component)

在物体上Add Component可以一步完成脚本的创建与绑定,但创建的文件会位于Asset根目录

获取、使用input的方法:Update、FixedUpdate

Update:在渲染每帧前被调用(多数)

FixedUpdate:执行有关物理计算前被调用(实现物理效果)

Unity API查看(ctrl+’):有问题,按了之后在浏览器一堆404窗口

AddForce:给刚体添加作用力,使之移动(参数-三维向量+作用力模式(ForceMode可省略:加速度、力、脉冲和速度变化))

在脚本中访问刚体组件:在Start方法中, GetComponent<Rigidbody>();返回组件引用

Input.GetAxis ("Horizontal")使用输入轴Returns the value of the virtual axis identified by axisName.

Start方法中的代码会在脚本(通常也是游戏)运行时的第一帧被调用

用浮点数值组成三维向量:new Vector3(x,y,z)

创建公共变量可以不打开脚本,在检视窗口直接修改

检查页脚、控制台报错

CTRL + ALT +C  注释/不注释该行

小球脚本:监听键盘使小球移动

//PlayerController.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;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);}
}

第三人称设置:将摄像机绑定在player(若成为游戏对象的子对象后,摄像机根据父对象Transform组件数值进行更改或偏移,在三根轴上旋转,)通过脚本将二者相连,而不是作为子对象,二者间的偏移值是游戏角色与摄像机间的位移(不旋转)

LateUpdate():在update执行完后调用,游戏对象已经完成移动

创建游戏对象的引用(拖拽到参数框)

摄像机脚本:关联小球与摄像头(镜头不翻滚)

//CameraController.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class CameraController : MonoBehaviour {public GameObject player;private Vector3 offset;// Use this for initializationvoid Start () {offset = transform.position - player.transform.position;//得出运行开始的固定偏移}// Update is called once per framevoid LateUpdate () {transform.position = player.transform.position+ offset;}
}

建立父游戏对象Walls放置所有的墙(Create Empty)

游戏项目可以嵌套别的游戏项目,用空白游戏对象作为层级窗口的目录或者文件夹

新建Object:Cube作为墙体,使用前先重置物体位置。改变长度与游戏区域一致

复制物体Edit-Duplicate

编辑器设为Local模式时运行,小球坐标会翻转

游戏对象激活状态复选框(属性框Inspector中,物体名前)

自动旋转脚本:Rotation值

Transform:Translate移动,Rotate旋转(传入旋转方向V3或xyz三个浮点数)

将物体作为预制件prefab:资源格式,包含游戏对象的模板,可用于当前项目的任何场景,预制件更新,所有相应对象随之更新。从层级窗口放到项目文件夹后就成为预制件

物体属性框最上框的Apply,能将属性更改应用到预制件

物体旋转脚本

//Rotator.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Rotator : MonoBehaviour {// Update is called once per framepublic float speed;void Update () {transform.Rotate (new Vector3 (15, 30, 45) * Time.deltaTime*speed);}
}

存储计分

在Start中设置私有变量初始值

触碰物体时在OnTriggerEnter方法中,.other.gameObject.CompareTag ( "Pick Up")

UI工具集显示文本Text,父对象Canvas,EventSystems游戏对象。所有UI工具必须是Canvas的子对象才能正常工作

UI组件的Transform使用Rect transform

Anchor定位组件轴心(Shift+Alt选择),posit x y改变文字定位

UI工具集存放在命名空间(namespace)UnityEngine.UI。为countText设置初始值

将Text对象引用拖拽到PlayerController脚本属性框

删除物体gameObject.SetActive (false);

winText没有初始化为空字符串时,可以不显示

Collider :Sphere Collider球体碰撞体组件(属性栏右侧链接到组件的参考文档)点击Switch to Script,查看怎样在脚本使用

Collider.OnTriggerEnter检测触碰,实际不会造成物理碰撞。触碰到的触发器引用作为参数返回

GameObject:

Destroy(other.GameObject)销毁

Tag用于识别,在Tags and Layers面板创建。CompareTag:将标签值与字符串比较,比用gameObject.tag比较高效

SetActive禁用或激活

选中多个物体后,属性框显示共有组件与属性。同时禁用所有Mesh Renderer组件。不允许两个碰撞体重叠,碰撞时检测碰撞体的速度、旋转、形状,是静态还是动态,计算碰撞。动态几何体受影响弹开。

碰撞体变为触发器,允许模型重叠渗透。勾选Box Collider的Is Trigger。

碰撞体OnCollider、触发器OnTrigger

触发器会从地板掉下不发生碰撞,禁用Use Gravity,或Is Kinematic:变为只受脚本控制的刚体,运动学刚体不受物理作用力的影响,但可以播放动画或通过Transform组件移动,适用于像电梯或移动的平台

静态碰撞体移动、旋转、缩放时,Unity会重新计算这些静态碰撞体体积,更新缓存数据

动态碰撞体不缓存数据,但预测碰撞体的移动

动态碰撞体:刚体。

静态碰撞体:非刚体

动态(刚体)带重力属性(默认Kinematic属性不打开),且触发器,不被地面托住

静态刚体:不移动(墙面、地面)

动态碰撞体:可运动,且有刚体组件

普通刚体:通过作用力移动

Kinematic刚体:通过Transform组件移动

Debug:

确定OnTriggerEnter是否发生。other.gameObject

OnTriggerEnter未发生:球体的Sphere Collider勾选,并且Is Trigger勾选

Tag对象分配的标签属性:在属性栏上部Tag

OnTriggerEnter函数触发的条件:

1、两个物体都必须有碰撞器(Collider)组件;

2、其中一个物体的碰撞器(Collider)的IsTrigger属性必须勾上;(这个属性还会影响物体是否从地面掉下)

3、最重要的一点,其中一个物体必须有刚体(Rigidbody)组件。如果是一个运动的物体去碰撞一个静止的物体,则刚体(Rigidbody)组件必须加在运动的物体上,否则无法触发OnOnTriggerEnter函数。

存储计分,并显示Text:

//PlayerController.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class PlayerController : MonoBehaviour {public float speed;public Text countText;public Text winText;private Rigidbody rb;private int count;void Start (){rb = GetComponent<Rigidbody>();count = 0;SetCountText ();winText.text = "";}void FixedUpdate (){float moveHorizontal = Input.GetAxis ("Horizontal");float moveVertical = Input.GetAxis ("Vertical");Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);rb.AddForce (movement * speed);}void OnTriggerEnter(Collider other) {
//      countText.text = "Trigger ";
//      countText.text = "Object: " + other.gameObject.ToString ();if (other.gameObject.CompareTag ( "Pick Up")){other.gameObject.SetActive (false);count = count + 1;SetCountText ();}}void SetCountText (){countText.text = "Count: " + count.ToString ();if (count >= 12){winText.text = "You Win!";}}
}

Build

Building、build target构建与构建目标

Build setting

更改构建目标后,Switch Platform

Add Current或拖拽场景到空白区,添加场景。不添加,会自动用当前编辑的窗口

保存Build文件的Build文件夹应存在项目根文件夹下,与Assets、Library同级。命名文件,save,生成.exe与data文件夹,可直接运行。

完整项目下载

https://download.csdn.net/download/lagoon_lala/10790635

Unity 1.Roll a Ball相关推荐

  1. 《unity》Roll a ball

     游戏理解:一个游戏由三个部分组成,分别是:游戏场景,游戏角色,游戏规则: 游戏场景:游戏场景是 游戏内容的载体,如Roll a ball 中 蓝色的地面给游戏角色提供了立足点.白色的墙限制了游戏角色 ...

  2. 01 Roll A Ball 小游戏(环境搭建)

    unity 实例 Roll A Ball crtrl +s 保存场景 在assets 1.新建Scenes文件夹 2.保存命名为main场景 环境搭建 1.新建游戏物体Plan (F2 改名为Grou ...

  3. Unity官方案例——Roll a ball

    现在的我还是一名 Unity3d 游戏开发初学者,所以现在都在围绕 Unity3d 的官方案例来做练习,为此写下一些文章作为笔记,文章中难免会有一些疏漏,有些不当之处还望指正. 项目简介 首先玩家可以 ...

  4. Unity官方案例-roll a ball

    通过学习: 1.将了解到如何新建一个游戏对象(game object) 2.为这些游戏对象添加组件(components) 3.为他们的属性(properties)赋值 4.把这些对象放置在场景(sc ...

  5. Unity3d学习笔记--从roll a ball 开始(一)

    以下这篇文章主要面向刚接触Unity的新手(比如我),通过 做roll a ball项目 介绍在Unity里怎样创建项目,加载组件(component)等一系列的基本操作.此外还分享了在做项目的时候要 ...

  6. android+祖玛游戏源码,unity祖玛游戏Zuma Ball Blast源码

    压缩包内容概览: unity祖玛游戏Zuma Ball src ; 汇编C锐器编辑器 ; 汇编-C夏普编辑器 ; 组件-C夏普vs ; C夏普组件 ; 汇编统一脚本vs ; 汇编统一体脚本 ; 资产 ...

  7. 12 Roll A Ball全部代码

    > Player using UnityEngine; using System.Collections; using UnityEngine.UI;public class Player : ...

  8. 【Unity学习第二天】滚球游戏学习(Roll A Ball)

    基本流程 ** 0.在基础的地面上会有一个小球,通过控制小球的滚动,吞吃地面上的一些小块. 1.创建基础场景,包括地面,主角,触碰小块. ① 通过材质设置修改相关物体的颜色/光滑度等显示. ② 重复出 ...

  9. Unity官方教程滚球游戏实现(Roll A Ball)带工程源码

    记学习unity之后做出的第一款游戏   第一次使用Unity,在学成C#基础之后,迫不及待的照着教程做出了这个游戏,第一课最主要学习的东西就是Unity API的使用及场景中各个界面面板的主要功能, ...

最新文章

  1. java——逻辑运算符与(和)或(|和||)
  2. ls命令显示结果图解
  3. 基于神经网络的控制器设计与仿真
  4. 使用UltraEdit来拷贝粘贴二进制
  5. [转]JS Cookie 中文乱码
  6. 《ASP.NET Core 微服务实战》-- 读书笔记(第3章)
  7. WordPress数据表wp-options数据字段存JSON数据
  8. 祝贺本刊编委石勇教授入选2016年汤森路透全球高被引科学家
  9. (软件工程复习核心重点)第七章软件维护-第一节:软件维护的概念和特点
  10. 在Blazor中构建数据库应用程序——第5部分——查看组件——UI中的CRUD列表操作
  11. 网页游戏服务器的源代码武者无敌_周志宏:私服游戏 别拿法律当儿戏
  12. 哲学家就餐问题python_无聊的哲学家进餐问题
  13. 深入理解计算机系统_3e 第四章家庭作业(部分) CS:APP3e chapter 4 homework
  14. vivo oppo 手机手机调试无法启动
  15. 成都众恒微拓科技:怎么降低退款率
  16. 360浏览器下载文件时二次提交请求
  17. linux系统下alsa设备,linux alsa配置
  18. 正交变换法中的A矩阵怎么求
  19. html嵌入bilibili视频
  20. Authentication failed for git

热门文章

  1. 短信宝发送短信验证码
  2. matplotlib(直方图,条形图,饼图,散点图)基础知识
  3. Java毕业设计 JSP+MySQL幼儿园信息管理系统
  4. 【艾琪出品】《数据库课程设计》【参考】
  5. 领域模型 PO、VO、DAO、BO、DTO、POJO
  6. python基础logging 压缩、根据指定文件夹并进行删除
  7. [Day 7]JS FA、用户交互、JS动画的实现(二)
  8. 2023年创业必火的十个行业是哪些?创业必赚钱!
  9. 80.90后新手开网店,经验分享,神马不见得都是浮云!
  10. linux下Ubuntu交叉编译boost源码编译