Roll A Ball
GameObject的添加就不细说了,地面,小球和碰撞小物体。

刚体组件(Rigidbody):
使物体能够模拟物理效果,比如重力,碰撞,推力等;
控制小球移动的脚本(Script,Ball的脚本):
Input.GetAxis("Horizontal"):控制横向运动键,有A,D键;
Input.GetAxis("Vertical"):控制纵向运动键,有W,S;
AddForce(Vector3):添加力,力是矢量,有方向;
控制相机跟随物体移动(第一视角):
把相加直接拖到物体上,作为物体的子对象,但是这里行不通,因为小球是圆球,移动起来是旋转的,相机也会随着选装,导致物体在整个画面中一直在颠倒旋转。另一种方法是相机和物体的位移保持不变,也就是相机的中心和小球的中心始终保持着一定的距离,该距离用向量表示。
通过Transform.position得到各个物体的位置,是个点坐标。定义一个公共变量,为主角Ball的Transform对象。通过小球的位置,和两者位置的偏移量获得相机的位置。
由于场地周围没有任何阻碍,小球会离开地面,然后受重力作用往下落。所以在场地周围增加墙,来限制小球的运动范围
创建小球要收集的食物(Foods):
创建一个cube,调整角度,然后将其制成prefab,为了方便之后对所有食物的统一修改。多个食物的创建,目前是利用prefab重复拖动到Scene中,或者在在Scene中使用快捷键ctrl+D来创建(这里暂时不描述怎么动态随机创建物体,只是初级简单的创建)。prefab的好处是方便修改所有利用prefab创建的物体的属性的修改。控制食物动态旋转,利用transform.Rotate(new Vector3(0, 1, 0))。由于食物较多,所以创建一个空的GameObject,统一管理这些物体。食物的Box Collider组件中如果不勾选Is Trigger属性,小球,无法穿过食物,勾选后可以穿透食物。
检测是否发生碰撞:
1.碰撞检测;2.触发检测;3.射线检测;
碰撞首先物体得依赖于刚体
1.OnCollisionEnter(Collision col);
2.OnTriggerEnter(Collider col);
顺便一提Resharper插件,以后介绍
分数显示和结束画面:
这里UI使用的是UGUI,在Hierarchy面板中右键创建UI中的Text,然后设置Text位于UI的Canvas的位置:

而使这些字在结束时显示,则使用SetActive(true)。
源代码:
using UnityEngine;
using System.Collections;
using UnityEngine.UI; public class BallControl : MonoBehaviour {
public int force = ;
private Rigidbody rd; private int score = ; public Text text;
public GameObject winText;
// Use this for initialization
void Start () {
rd = gameObject.GetComponent<Rigidbody>();
} // Update is called once per frame
void Update () {
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
print(h + "");
print(v + "");
rd.AddForce(new Vector3(h, , v) * force);
} void OnCollisionEnter(Collision col)
{
if (col.collider.tag == "Food")
{
Destroy(col.collider.gameObject);
}
} void OnTriggerEnter(Collider col)
{
if (col.tag == "Food")
{
score++;
text.text = score.ToString();
if (score == )
{
winText.SetActive(true);
}
Destroy(col.gameObject);
}
}
}
using UnityEngine;
using System.Collections; public class FoodsControl : MonoBehaviour { // Use this for initialization
void Start () { } // Update is called once per frame
void Update () {
transform.Rotate(new Vector3(, , ));
}
}
using UnityEngine;
using System.Collections; public class FollowTarget : MonoBehaviour { public Transform playerTransform;//声明对象的位置
private Vector3 offset;//位置偏移量 // Use this for initialization
void Start () {
offset = this.transform.position - playerTransform.position;
} // Update is called once per frame
void Update () {
//根据小球的位置和偏移量得到相机的位置
transform.position = playerTransform.position + offset;
}
}
Roll A Ball的更多相关文章
- 学习unity的第一个小游戏(Roll the ball)的笔记
1.摄像机的跟随运动,逻辑就是保持摄像机跟主角的距离不变(Undate()函数). offset=trandform.position-player.position. Undate() { tran ...
- 关于Roll A Ball实例练习记录
学习中不段进步! 游戏思路:通过键盘控制白色小球,让它"捡起"柠黄色方块,捡起一个加1分,全部捡起游戏胜利! 游戏对象: Ground:绿色地面 player: 小球 Obsta ...
- Roll a ball 学习
using UnityEngine; using System.Collections; /// <summary> /// 相机控制 /// </summary> publi ...
- 1.1.0 Unity零基础入门2——Roll a Ball
1. 游戏界面 2.代码 //FoodRotate - - 控制cube旋转 using System.Collections; using System.Collections.Generic; u ...
- Siki_Unity_1-2_Unity5.2入门课程_进入Unity开发的奇幻世界_Roll A Ball
1-2 Unity5.2入门课程 进入Unity开发的奇幻世界 任务1:Roll A Ball项目简介 Unity官网的tutorial入门项目 方向键控制小球在平台上滚动,碰撞方块得分,消掉所有方块 ...
- URAL 1775 B - Space Bowling 计算几何
B - Space BowlingTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/ ...
- egret贝塞尔曲线运动
class MtwGame { public constructor() { } private static _instance: MtwGame; public static get Instan ...
- HDU 4602 Magic Ball Game(离线处理,树状数组,dfs)
Magic Ball Game Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- 2013 多校联合 F Magic Ball Game (hdu 4605)
http://acm.hdu.edu.cn/showproblem.php?pid=4605 Magic Ball Game Time Limit: 10000/5000 MS (Java/Other ...
随机推荐
- html5 可以讓使用者輸入url網址 ,去play影片
<html> <head> <title>Simple Video Example</title> <script> function pl ...
- Win7 系统下 Firefox hostadmin插件无法修改Host
问题: win 7系统,今天用杀毒软件杀了一下毒,firefox hostAdmin插件无法修改Host了,提示“ write hosts file failed check permissions ...
- MVVM deep dive
You can get a different instance each time by passing a different key to the GetInstance method. How ...
- 关于IAP的破解
介绍 大概在今年7月份,有俄罗斯黑客破解了苹果的应用内付费(In-App Purchases),设备在不越狱的情况下就可以免费获得来自苹果官网App Store里应用的收费道具.受影响的产品众多,包括 ...
- 【周年版】Cnblogs for Android
前言 扒衣见君节刚过去但是炎热夏天还在继续: 自14年8月推出博客园Android客户端以来,断断续续发了十几个后续版本,期间出现过各种问题,由于接口等诸多因素,每个模块的功能都可能随着时间和博客园主 ...
- pdf转word
一.刚需 pdf转word,这个需求肯定是有的.但是大家都知道,pdf是用来排版打印的,所以编辑起来会比较麻烦,所以,大家都会尝试将pdf的内容转成word,然后再进行编辑. 二.方法 1.用offi ...
- zk 隐藏网页文件后缀
前台(test.zul): <a label="隐藏地址" href="/Bandbox/test.html"/> web.xml添加 <se ...
- 对ASM存储管理的一些初步理解记录
ASM:Automatic Storage Management,是ORACEL10G以后为了简化存储管理的复杂性,也是为了摆脱对其他厂商的依赖而推出的.ASM作为目前ORACLE推荐的首选存储方案, ...
- Web前端开发基础 第四课(CSS一些性质)
继承 CSS的某些样式是具有继承性的,那么什么是继承呢?继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代.比如下面代码:如某种颜色应用于p标签,这个颜色设置不仅应用p标签 ...
- Android课程---视图组件的总结