Unity 1.Roll a Ball
目录
基础资料
小球脚本:监听键盘使小球移动
摄像机脚本:关联小球与摄像头(镜头不翻滚)
物体旋转脚本
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相关推荐
- 《unity》Roll a ball
游戏理解:一个游戏由三个部分组成,分别是:游戏场景,游戏角色,游戏规则: 游戏场景:游戏场景是 游戏内容的载体,如Roll a ball 中 蓝色的地面给游戏角色提供了立足点.白色的墙限制了游戏角色 ...
- 01 Roll A Ball 小游戏(环境搭建)
unity 实例 Roll A Ball crtrl +s 保存场景 在assets 1.新建Scenes文件夹 2.保存命名为main场景 环境搭建 1.新建游戏物体Plan (F2 改名为Grou ...
- Unity官方案例——Roll a ball
现在的我还是一名 Unity3d 游戏开发初学者,所以现在都在围绕 Unity3d 的官方案例来做练习,为此写下一些文章作为笔记,文章中难免会有一些疏漏,有些不当之处还望指正. 项目简介 首先玩家可以 ...
- Unity官方案例-roll a ball
通过学习: 1.将了解到如何新建一个游戏对象(game object) 2.为这些游戏对象添加组件(components) 3.为他们的属性(properties)赋值 4.把这些对象放置在场景(sc ...
- Unity3d学习笔记--从roll a ball 开始(一)
以下这篇文章主要面向刚接触Unity的新手(比如我),通过 做roll a ball项目 介绍在Unity里怎样创建项目,加载组件(component)等一系列的基本操作.此外还分享了在做项目的时候要 ...
- android+祖玛游戏源码,unity祖玛游戏Zuma Ball Blast源码
压缩包内容概览: unity祖玛游戏Zuma Ball src ; 汇编C锐器编辑器 ; 汇编-C夏普编辑器 ; 组件-C夏普vs ; C夏普组件 ; 汇编统一脚本vs ; 汇编统一体脚本 ; 资产 ...
- 12 Roll A Ball全部代码
> Player using UnityEngine; using System.Collections; using UnityEngine.UI;public class Player : ...
- 【Unity学习第二天】滚球游戏学习(Roll A Ball)
基本流程 ** 0.在基础的地面上会有一个小球,通过控制小球的滚动,吞吃地面上的一些小块. 1.创建基础场景,包括地面,主角,触碰小块. ① 通过材质设置修改相关物体的颜色/光滑度等显示. ② 重复出 ...
- Unity官方教程滚球游戏实现(Roll A Ball)带工程源码
记学习unity之后做出的第一款游戏 第一次使用Unity,在学成C#基础之后,迫不及待的照着教程做出了这个游戏,第一课最主要学习的东西就是Unity API的使用及场景中各个界面面板的主要功能, ...
最新文章
- java——逻辑运算符与(和)或(|和||)
- ls命令显示结果图解
- 基于神经网络的控制器设计与仿真
- 使用UltraEdit来拷贝粘贴二进制
- [转]JS Cookie 中文乱码
- 《ASP.NET Core 微服务实战》-- 读书笔记(第3章)
- WordPress数据表wp-options数据字段存JSON数据
- 祝贺本刊编委石勇教授入选2016年汤森路透全球高被引科学家
- (软件工程复习核心重点)第七章软件维护-第一节:软件维护的概念和特点
- 在Blazor中构建数据库应用程序——第5部分——查看组件——UI中的CRUD列表操作
- 网页游戏服务器的源代码武者无敌_周志宏:私服游戏 别拿法律当儿戏
- 哲学家就餐问题python_无聊的哲学家进餐问题
- 深入理解计算机系统_3e 第四章家庭作业(部分) CS:APP3e chapter 4 homework
- vivo oppo 手机手机调试无法启动
- 成都众恒微拓科技:怎么降低退款率
- 360浏览器下载文件时二次提交请求
- linux系统下alsa设备,linux alsa配置
- 正交变换法中的A矩阵怎么求
- html嵌入bilibili视频
- Authentication failed for git
热门文章
- 短信宝发送短信验证码
- matplotlib(直方图,条形图,饼图,散点图)基础知识
- Java毕业设计 JSP+MySQL幼儿园信息管理系统
- 【艾琪出品】《数据库课程设计》【参考】
- 领域模型 PO、VO、DAO、BO、DTO、POJO
- python基础logging 压缩、根据指定文件夹并进行删除
- [Day 7]JS FA、用户交互、JS动画的实现(二)
- 2023年创业必火的十个行业是哪些?创业必赚钱!
- 80.90后新手开网店,经验分享,神马不见得都是浮云!
- linux下Ubuntu交叉编译boost源码编译