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的更多相关文章

  1. 学习unity的第一个小游戏(Roll the ball)的笔记

    1.摄像机的跟随运动,逻辑就是保持摄像机跟主角的距离不变(Undate()函数). offset=trandform.position-player.position. Undate() { tran ...

  2. 关于Roll A Ball实例练习记录

    学习中不段进步! 游戏思路:通过键盘控制白色小球,让它"捡起"柠黄色方块,捡起一个加1分,全部捡起游戏胜利! 游戏对象: Ground:绿色地面 player:  小球 Obsta ...

  3. Roll a ball 学习

    using UnityEngine; using System.Collections; /// <summary> /// 相机控制 /// </summary> publi ...

  4. 1.1.0 Unity零基础入门2——Roll a Ball

    1. 游戏界面 2.代码 //FoodRotate - - 控制cube旋转 using System.Collections; using System.Collections.Generic; u ...

  5. Siki_Unity_1-2_Unity5.2入门课程_进入Unity开发的奇幻世界_Roll A Ball

    1-2 Unity5.2入门课程 进入Unity开发的奇幻世界 任务1:Roll A Ball项目简介 Unity官网的tutorial入门项目 方向键控制小球在平台上滚动,碰撞方块得分,消掉所有方块 ...

  6. URAL 1775 B - Space Bowling 计算几何

    B - Space BowlingTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/ ...

  7. egret贝塞尔曲线运动

    class MtwGame { public constructor() { } private static _instance: MtwGame; public static get Instan ...

  8. HDU 4602 Magic Ball Game(离线处理,树状数组,dfs)

    Magic Ball Game Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  9. 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 ...

随机推荐

  1. 20145330《Java程序设计》第五次实验报告

    20145330<Java程序设计>第五次实验报告 实验五 Java网络编程及安全 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统 4.结队伙伴 ...

  2. C#中Thread.sleep() 【转载】

    我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间.那么你有没有正确的理解这个函数的用法呢?思考下面这两个问题: 1.假设现在是 2008-4-7 12:00:00.000,如果我 ...

  3. Eqs

    Eqs 题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=15029 题意: 给出系数a1,a2,a3,a4,a5,求出 ...

  4. text-indent:-9999px 字体隐藏问题

    为什么要字体隐藏? 通常为了传达更好的视觉效果,我们常用图片替代掉字体.但是为了html语义化,常常要给内容模块加上一些标题来让页面更有意义,在抛开css裸奔的情况下也能很顺利的汲取到页面信息.为此我 ...

  5. 【iCore3 双核心板_FPGA】例程一:认识FPGA

    实验指导书及代码包下载: http://pan.baidu.com/s/1kUa05FL iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...

  6. ios-获取通讯录 姓名和电话

    #import "ViewController.h" #import <ContactsUI/ContactsUI.h> @interface ViewControll ...

  7. json.parse 与 json.stringfy

    转自 :http://blog.csdn.net/wangxiaohu__/article/details/7254598 parse用于从一个字符串中解析出json对象,如 var str = '{ ...

  8. Ignoring Extra Elements in mongoDB C# Driver

    MongoDB删除字段后会报错: Element ... does not match any field or property of class Customer. 需要在实体类增加 [BsonI ...

  9. nodejs 80端口监听失败及NODE_PATH不起作用的问题

    nodejs做web服务器,打开80时报错:Error: listen EACCES 0.0.0.0:80 80端口监听失败,是因为1024以下的端口需要root权限,需要sudo或su之后执行.但这 ...

  10. php应用路径变量问题总结

    实际效果测试,不考虑原理! 本地服务器,域名http://d.com,根路径D:\phpnow\vhosts\d.com.yii,相对根目录拥有文件/x.php代码里requeir_once /a/a ...