本篇是Unity3D 官方Tutorial最简单的一篇

,没有纹理,没有复杂模型,没有音乐,没有关卡,但作为入门学习还是非常不错的。

游戏很简单,就是用键盘的上下左右控制一个小球,获取场景中的所有的方块。

下面是个人的一点学习记录。

场景搭建

创建一个cube作为地面,然后用四个cube作为四个墙。

添加一个小球在中央。

添加12个0.5*0.5*0.5的方块,Rotation的x,y,z都绕45度。场景搭建好之后就像这样。

添加两个UI Text,一个用来计数,一个用来显示游戏结束。

两个方向光源,一个照射地面,一个表示地面的反光,强度小一些。

控制脚本

首先是方块,让它一直旋转

using UnityEngine;

using System.Collections;

public class Rotate : MonoBehaviour {

// Update is called once per frame

void Update () {

transform.Rotate(new Vector3(15, 30, 45) * Time.deltaTime);

}

}

然后是摄像机,让它跟随小球运动

using UnityEngine;

using System.Collections;

public class CameraController : MonoBehaviour {

public GameObject player;

private Vector3 offset;

// Use this for initialization

void Start () {

offset = transform.position;

}

// Update is called once per frame

void LateUpdate () {

transform.position = player.transform.position + offset;

}

}

最后是小球的运动,主要控制键盘输入,更新UI Text。

using UnityEngine;

using System.Collections;

public class PlayController : MonoBehaviour {

public float speed;

private int count;

public GUIText countText;

public GUIText winText;

void Start()

{

count = 0;

SetCountText();

winText.text = "";

}

void FixedUpdate()

{

float moveHorizontal = Input.GetAxis("Horizontal");

float moveVertical = Input.GetAxis("Vertical");

Vector3 movement = new Vector3(moveHorizontal, 0, moveVertical);

rigidbody.AddForce(movement * speed * Time.deltaTime);

}

void OnTriggerEnter(Collider other)

{

if(other.gameObject.tag == "PickUp")

{

other.gameObject.SetActive(false);

++count;

}

SetCountText();

}

void SetCountText()

{

countText.text = "Count: " + count.ToString();

if(count >=12)

{

winText.text = "You win!";

}

}

}

都非常简单。

最后运行起来就像这样:

小练习

记录游戏时间,最后显示

在控制小球的脚本中添加一个private变量speedTime,在Start()中初始化为当前时间:

spendTime = Time.time;

在SetCountText()中,当游戏结束的时候更新spendTime并显示:

spendTime = Time.time - spendTime;

winText.text = "You win! cost " + spendTime + "s.";

添加重力感应控制,并发布到android上

重写FixUpdate方法:

void FixedUpdate()

{

float moveHorizontal = Input.GetAxis("Horizontal");

float moveVertical = Input.GetAxis("Vertical");

if(Input.acceleration.x != 0 || Input.acceleration.y != 0)

{

moveHorizontal = Input.acceleration.x;

moveVertical = Input.acceleration.y;

}

Vector3 movement = new Vector3(moveHorizontal, 0, moveVertical);

rigidbody.AddForce(movement * speed * Time.deltaTime);

}

在build setting里设置为横屏幕

build and run就可以了。

Android里面的运行没有实时阴影。

小知识点

三种update

update、FixUpdate和LateUpdate

Update会在每次渲染新的一帧时,被调用。而FixedUpdate会在每个固定的时间间隔被调用,那么要是Update

和FixedUpdate的时间间隔一样,是不是就一样呢?答案是不一定,因为Update受当前渲染的物体,更确切的说是三角形的数量影响,有时快有时慢,帧率会变化,update被调用的时间间隔就发生变化。但是FixedUpdate则不受帧率的变化,它是以固定的时间间隔来被调用,那么这个时间间隔怎么设置呢?Edit->Project

Setting->time下面的Fixed timestep。

LateUpdate是在所有Update函数调用后被调用,和fixedupdate一样都是每一帧都被调用执行,这可用于调整脚本执行顺序。例如:当物体在Update里移动时,跟随物体的相机可以在LateUpdate里实现。LateUpdate,在每帧执行完毕调用,他是在所有update结束后才掉,比较适合用于命令脚本的执行。官网上例子是摄像机的跟随,都是在所有update操作完才跟进摄像机,不然就有可能出现摄像机已经推进了,但是视角里还未有角色的空帧出现

dynamic 和static

含有Collider和RigidBody的GameObject, Unity视之为Dynamic

含有Collider的GameObject, Unity视之为Static

如果Static的物体发生位移上的变化,Unity每一帧都会去重新缓存Static物体的Collider状态,这会消耗资源

所以只含有Collider的物体,就不要让他发生位置上的移动。或者给它加一个RigidBody的组件,把Gravity去掉,并且把IsKineMatic勾选上(该选项使得该物体不会因为其他物体的影响而发生物理上的改变)。

泰课在线android,泰课在线rollaball相关推荐

  1. 中国桥牌在线 android,中国桥牌在线cbo手游

    中国桥牌在线软件客户端是专为喜欢桥牌的用户开发的手机交流软件平台,app可以在线学习桥牌的打发,进行桥牌技术交流,还可以在线报名参加桥牌大赛.软件使用起来很便捷,操作简单,喜欢的用户,快来下载吧! 游 ...

  2. 中农大计算机组成原理在线作业1,河北农大2017计算机组成原理_在线作业_1课案.docx...

    河北农大2017计算机组成原理_在线作业_1课案 计算机组成原理_在线作业_1交卷时间:2017-01-18 23:45:43考试成绩 100分一.单选题1. (5分) 程序控制类指令的功能是().A ...

  3. 学堂在线部分网课笔记---Web设计与应用

    学堂在线部分网课笔记 Web设计与应用 第六章 敏捷的前端框架 6.2.1 bootstrap响应式布局(一) 容器 非固定宽度 固定宽度 Viewport viewport的作用是什么? width ...

  4. android在线教学,基于Android的移动在线教育平台的设计与实现

    申晋祥+鲍美英 摘要:移动学习是目前互联网时代的一种新型学习方式.本文设计并实现了一个支持移动学习的在线教育平台,该平台基于Android系统,采用多线程技术应用Java语言进行开发,开发工具采用Ec ...

  5. Android Study Jam 在线答疑第三期:Jetpack Compose 案例实战

    Android Study Jam 火热进行中 感兴趣的小伙伴都上车了吗? 为助力大家打好 Jetpack Compose 基础 我们的第三场 Office Hours 在线答疑 将于 今天上午 10 ...

  6. Android实用应用,Android 4.0系统+实用应用_手机_手机Android频道-中关村在线

    看完了外观,接下来就来了解一下明泰i760的内在吧.明泰i760搭载了Android 4.0 ICS系统,目前已经很少有心计搭载Android 2.3姜饼系统了,这对于ICS系统的普及推广而言是一个好 ...

  7. 分享一个Android源码在线阅读的网址

    分享一个Android源码在线阅读的网址 :http://androidxref.com/4.2.2_r1/

  8. android 中期检查,基于Android的中小学在线问答系统的中期检查报告.docx

    基于Android的中小学在线问答系统的中期检查报告 沈阳航空航天大学计算机学院毕业设计中期总结报告题 目:基于安卓的中小学生在线问答系统专 业:计算机科学与技术班 级 号:2011040101139 ...

  9. Android平台标日单词查询背诵软件:日语学习机(包含标日初级48课和中级32课所有单词) 手机软件 移动软件

    由于是自己做的,试试效果,界面方便就没做什么美化,apk文件已放出下载,欢迎大家提意见或建议. Android1.6版本以上皆可安装使用,绝对对日语初学者有帮助(本人也是日语初学者),不过单词还是要靠 ...

最新文章

  1. 炸裂!这些大厂跪求的人才太牛了!
  2. 最新Transformer模型大盘点,NLP学习必备,Google AI研究员出品丨资源
  3. linux无法联网使用yum提示cannot find a valid baseurl for repobase7x86_64
  4. slf4j介绍以及实现原理窥探
  5. C++vector容器-插入和删除
  6. jvm分配内存_为JVM分配内存:一个案例研究
  7. git 每次都要输入用户名密码_Git向GitHub提供代码
  8. go java gc_图解Golang的GC垃圾回收算法
  9. HTTP CSP详解
  10. NLog 2.0.0.2000 使用实例
  11. 优分享VR开源啦,优分享VR是基于Google VR开发的一款手机VR视频资源的聚合软件...
  12. OpenDrive学习笔记
  13. 苹果计算机重装系统步骤,苹果笔记本电脑重装mac系统教程
  14. 网站建设流程都有哪些?
  15. p=p->next 是什么意思
  16. [HDU 5755] Gambler Bo (高斯消元)
  17. 最后1天!生信入门转录组和可视化学习捷径
  18. exchange 2013 C盘空间不足清理
  19. 全选主元matlab,全选主元高斯-约当法实矩阵求逆及传统方法求逆
  20. python爬虫-异步爬虫

热门文章

  1. chef infra安装和使用入门
  2. 5.8 前端开发日报
  3. docker 高级 compose/swarm
  4. iOS11 iPhone X 适配指南
  5. 6-1 类模板Point的定义与使用 (10 分)
  6. ybt1003:对齐输出
  7. STM32F767 Timer定时器与Usart串口综合实训
  8. clipper运行以及使用——轻松一刻
  9. APIDOC使用教程
  10. 畅玩《七雄争霸》经典战国策略游戏