**这是官方的游戏教程视频,学习了总结一下笔记,供一起学习的新手朋友们参考。**积跬步,以至千里。

课时1:项目介绍

球在一个平面上滚动,可以捡到悬浮的物体,捡完就Win。

课时2:游戏设置(主光、补光、阴影)

1.新建项目RollABall,保存场景MiniGame,在GameObject->CreateOther->Plane新建Plane命名为Ground,重置原点。新建Scenes文件夹。(新建平面作为地板活动场景)
2.选中它点F键,或者选择Edit -> Frame selected,这样可以看到整个物体。(双击新建的物体可以快速定位)
3.实现比例,输入,拖拽。Plane是没有体积的,Y轴对它无效,确保为 Scale Y轴为1,其他轴的值为2。
4.新建3DObject——Sphere 命名为Player ,点击F对准它。拖拽露出全体,position Y升高0.5。
5.新建Light——Directional Light命名为Main Light,Rotation X为30,Y为60,添加阴影,Shadow Type选Soft Shadows,Resolution 选择very Hight Resolution。(或手动调试下自己想要的光)
6.对准Ctrl+D复制灯光命名Fill Light,rotation x=-30,y=-60,intensity 为0.1,淡蓝色,关闭阴影。
7.新建空命名为Lighting,重置,作为父级,容纳两个灯光,便于管理。
(总结:Plane(平面)、Sphere(球体)、光和阴影的基本设置)

课时3:移动角色

1.添加移动功能,点击Player(球体),在右边Inspector面板中点"Add Component",输入RigidBody,即为添加RigidBody组件,再添加一个C#脚本,命名为PlayerController.cs。
2.输入的每帧需要检测,Ctrl +‘查看。(查看圣典方法进行学习)
3.平滑移动,让帧率独立,所以还要乘以“Time.daltaTime”。
PlayerController.cs

using UnityEngine;
using System.Collections;public class PlayerController : MonoBehaviour {public float speed;   //球体速度void FixedUpdate(){float moveHorizontal = Input.GetAxis("Horizontal");float moveVertical = Input.GetAxis("Vertical");Vector3 moveMent = new Vector3(moveHorizontal,0.0F, moveVertical);//要注意是哪两个方向上的移动,Y轴固定只用于X轴和Z轴方向上的移动。GetComponent<Rigidbody>().AddForce(moveMent * speed * Time.deltaTime);//GetComponent<Rigidbody>().velocity = moveMent * speed * Time.deltaTime;//为什么不给于这个球一个速度,而是给一个力的方向,如果给个速度的话,就失去了球的质感,平滑的效果,只是很生硬的移动。*Time.deltaTime是让游戏独立于帧。}
}

课时4:移动摄像机

1.设置主相机的Position设置为0,10,-10,Rotation X为45(倾斜)。
2.在相机MainCamera中增加脚本命名为CameraController,使相机和物体为相关联关系,而不是父子级关系。(如果是父子级会使镜头随着球转动而改变摄像机角度)

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;//计算机的位置永远等于球的位置加上之间固定的差值}
}

课时5:游戏区域及拾取物体

1.创建4面围墙(Cube物体)挡住球体,新建空的物体命名为Walls(记得重置下位置,都为0),新建Cube作为子类命名为Wall,Scale为0.5,2,20.5。Position的X轴为-10,紧贴边缘,复制成为另一面墙,Position的X轴为10。
2.同样方法,另外两个墙Scale值为20.5,2,0.5,PositionZ轴分别为-10和10,创建另2个墙体。(创建4面围墙围住活动区域)

3.新建Cube命名为PickUp,重置(可以先隐藏球体进行编辑)。positionY0.5,Scale中XYZ都设置为0.5(改变大小),Rotation坐标XYZ都设置为45(倾斜角度),增加新的脚本命名为Rotation。
Rotation.cs

using UnityEngine;
using System.Collections;public class Rotation : MonoBehaviour {void FixedUpdate(){transform.Rotate(new Vector3(15, 30, 45) * Time.deltaTime);}
}

4.保存预制件,即从上面创建的物体拖入下方Assets中(有蓝色变化)。新建空PickUps为父级元素。放置更多的PickUp预制体。

5.选择PickUps物体,Edit=>Duplicate(快捷键Ctrl +D)复制多个物体。
6.俯视,点击切换为Global水平排放小方块。


课时6:角色移动

1.在旋转物体上的触发器会消耗计算的Cash值,在PickUp中增加RigidBody组件,勾选BoxCollider中的Is Trigger,并且设置动态(RigidBody组件勾选Is Kinematic)。
2.有动态的Rigibody会被认为是动态,不会重新计算值,达到优化效果。
3.设置标签,点击预制体PickUp,点击Add Tag,添加PickUp标签。

(触碰小方块后会得分,在得分小节里面一起添加代码)
(总结:添加和使用标签)

课时7:显示文本

1.创建空的物体为文本的父级命名为Display Text,添加子类Text命名为Count Text。UI的调用
2.再添加Text命名WinText作为DisplayText子类,居中显示。
3.相机的位置(左下为(0,0)右上为(1,1)),设置左上位置,选择PLANE OFFSET 的X,Y轴留出点位置。
在PlayerController中添加触碰小球和得分的代码

using UnityEngine;
using System.Collections;
using UnityEngine.UI;     //调用UIpublic class PlayerController : MonoBehaviour {public float speed;      //球体速度public Text countText;   //获取分数Textpublic Text winText;     //获取WinTextprivate int countRecord; //得分记录void Start(){SetCount();winText.text = "";}void FixedUpdate(){float moveHorizontal = Input.GetAxis("Horizontal");float moveVertical = Input.GetAxis("Vertical");Vector3 moveMent = new Vector3(moveHorizontal,0.0F, moveVertical);//要注意是哪两个方向上的移动x轴和Z轴GetComponent<Rigidbody>().AddForce(moveMent * speed * Time.deltaTime);//GetComponent<Rigidbody>().velocity = moveMent * speed * Time.deltaTime;//为什么不给于这个球一个速度,而是给一个力的方向,如果给个速度的话,就失去了球的质感,平滑的效果,只是很生硬的移动}void OnTriggerEnter(Collider other){if (other.gameObject.tag == "PickUp"){other.gameObject.SetActive(false);  //隐藏该物体countRecord = countRecord + 1;      //得分SetCount();                         //刷新数值if (countRecord >= 8){winText.text = "YOU WIN!";      //赢了}}}void SetCount(){countText.text = "Count:" + countRecord;}
}

(写完代码要把物体挂上,不然没效果或者错误。)
课时8:发布游戏

1.保存场景,发布,选中发布的场景,选择Switch Platform。
2.拖动或者添加场景。

总结:

1.写完代码要把物体挂上,不然没效果或者错误。
2.方法的单词拼写要正确,如:OnTriggerEnter大小写要正确。
3.场景的基本创建和摄像机跟随。
4.运动方向上的选择,如球在Plane平面上是X和Z轴的移动,Y为0。
5.移动形式的选择。
6.这样的摄像机跟随模式只是最简单的模式,只能拖入在场景中移动的物体(Player),如果是拖入已经存放好的预制体(Playe),会没有效果的,因为预制体的位置一直没有变化,只有在场上移动的物体坐标才会发生变化。这样的跟随项目不规范。

其他问题:
1.为何会出现球体会穿过围墙,因为Player(球体)勾选了Trigger选项。
2.文本设置好位置却发生偏移,可以选择文本编辑里面的left/top的参考位置。
(虽说游戏简单,但要坚持,不忘初心)

简单游戏Roll_A_Ball开发笔记相关推荐

  1. 简单游戏引擎开发笔记(一)

    ---恢复内容开始--- 一.游戏引擎简介 1.概念 游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些互交式实时图像应用程序的核心组件.这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在 ...

  2. 游戏系统开发笔记(六)——服务端架构设计

    . http://blog.csdn.net/mooke/article/details/8913051 上回写了写服务端的分层结构,分层是比较宏观上的东西,至于层次间具体的交互方式还得通过各个模块的 ...

  3. 游戏系统开发笔记(三)——通用代码库

    墨水比较有限,工作时基本也都是着眼小处,除了工作内容涉及过的几个模块,其余的暂时并未多作关注,所以基本上还只是停留在感性认识上.不过我倒觉得这是难免,毕竟游戏产品放到整个软件行业来说也是个较复杂的东西 ...

  4. 基于Unity的2D小游戏 SpeedDown 开发笔记(学习bilibili@[M_Studio]的教学视频

    基于Unity的2D小游戏 SpeedDown 开发笔记(学习bilibili@M_Studio的教学视频) 主要内容:在Sunnyland游戏的设计基础上,新增了物理组件Joint系列.DrawGi ...

  5. 游戏系统开发笔记——构建战斗系统

    原文转自点击打开链接 首先要着重要说的是,游戏行业就算是只考虑其在国内的发展目测也应该有20年左右了,现在人们所做的开发,多半都是"站在巨人的肩膀上"进行的,都是在过去项目中研发者 ...

  6. 游戏系统开发笔记(九)——构建战斗系统

    转自:http://blog.csdn.net/mooke/article/details/9771545 首先要着重要说的是,游戏行业就算是只考虑其在国内的发展目测也应该有20年左右了,现在人们所做 ...

  7. libgdx游戏引擎开发笔记(一)引擎介绍和Helloworld

       做Android快一年了,项目也做了四五个,感觉没什么动力向前,思绪整理了一段时间,决定转入Android游戏开发,同时发现了一款强大的游戏引擎libgdx,在此边学边整理,好记性不如烂笔头嘛! ...

  8. libgdx游戏引擎开发笔记(十)SuperJumper游戏例子的讲解(篇四)---- 主游戏界面内部框架编写...

    上一讲,我们已经实现了点击play进入游戏界面但仅仅是个黑屏  今天,我们就试着编写代码让它出现游戏的一些简单场景.还是在上一讲的代码基础上,我们创建两个类:World 和 WorldRenderer ...

  9. libgdx游戏引擎开发笔记(十三)SuperJumper游戏例子的讲解(篇七)----各个物体的创建及其碰撞检测...

       接着上一篇,我们完成后续的扫尾工作:游戏中个物体创建及其碰撞检测,分数保存,音效处理. 1.World类:(加入所有物体,及其碰撞检测,代码里有详细注解) package com.zhf.myl ...

最新文章

  1. 小学生四则运算出题程序 无操作界面java版 简单的运用java中一些基本操作
  2. python笔记:正则表达式
  3. Redis持久化 RDB和AOF 比较与选择
  4. 什么是CPU密集型、IO密集型?
  5. 并发编程---线程queue---进程池线程池---异部调用(回调机制)
  6. 苹果手机编辑word_苹果手机的安全性真的太好了,这样加密,重要文件不怕泄密啦...
  7. 反爬机制能绕过?动态ip代理来教你怎么做
  8. caj格式的文档怎么转成pdf格式呢?
  9. 机器学习算法应用场景实例六十则
  10. linux——signal信号(SIGHUP、SIGINT、SIGQUIT、SIGILL、SIGTRAP、SIGABRT...........................)
  11. VVC中的熵编码-JVET提案Q2002
  12. 【SpringBoot整合缓存】-----spring-boot-starter-cache篇
  13. 《测绘综合能力》——大地测量
  14. vue使用 Font 字体 .ttf 格式
  15. RDP协议,remote desktop protocol,远程桌面协议
  16. 支付宝2020年账单来了,看看自己花了多少钱?
  17. Direct2D入门
  18. python爬虫进阶-每日一学(滑块拼图)
  19. 中国研发磁悬浮高铁新技术 再次实现自我超越
  20. 瑞尔齿科要流血上市,可未消肿的牙龈难拔“智齿”

热门文章

  1. mysql dump 10.13 下载_mysqldump.exe 文件下载
  2. 如何在 SAP ABAP 系统中使用 Adobe Form
  3. 解决Win11更新后C盘告急
  4. 手机计算机文档如何发到手机上,电脑的word文档怎么传到手机上
  5. 学生dreamweaver网页设计作业成品:电商网页设计——仿淘宝静态首页(HTML+CSS)
  6. 杭电考研计算机专业课_2019杭电计算机考研初试科目、参考书目、报录比汇总...
  7. Dream-hacking 造梦工程与脑波艺术
  8. PTA——二分法求多项式单根
  9. Java 编程技巧之样板代码
  10. IMX6 GT9XX 10.1寸触摸屏移植