Unity 官方案例 Roll a ball

终于找到免费科学上网的方法了,虽然 速度一般,但对于学习unity官方视频来说还行。

废话不多的说,这次学习官方案例 Roll a ball,就是控制小球在平台上吃食物,这么一个简单的游戏。对于unity的一些基本操作,我就不在博客中介绍了,所以还请各位朋友先学会unity的基本操作,几乎只需要知道unity的面板有几块,分别操作什么,怎么创建物体,脚本,以及给物体添加组件,就可以学习本博客了。

好,现在开始。先创建一个3D项目,名字就叫做 Roll a ball,

在Assert 目录下创建几个常用文件夹,_Scenes, _Material, _Prefabs, _Scripts。剩下的需要时在添加,这里文件夹名字的下划线是为了保证文件夹较多的情况下这个文件夹会排在顶端。

在场景中新建Plane,重命名为Floor(地板),大小下x、z 扩大为两倍,在新建一个Cube,重命名为Wall(墙),然后都把他们拖进_Prefabs文件夹,这样他们就会自动做成一个Prefab,现在我们就通过这两个东西构建如下场景:

只要类似就行了。但是现在是不是有点要亮瞎我们的XXXXX眼,所以在_Material 文件夹下新建Material,分别给他们填充材质。:

现在是不是好很多了。现在创建角色,新建一个Sphere,重命名为Player,为了要能够控制它移动,给他添加一个Rigidbody组件,把它也做成Prefab,然后把它拖到地板中间。位置刚好在地板上或者高于地板一点都行。

现在,我们在_Scripts目录下新建一个脚本来控制Player的运动,脚本名字为PlayerController,编辑脚本:

using UnityEngine;
using System.Collections;

public class PlayerController : MonoBehaviour {
    private Rigidbody playerRig;  //用来获取刚体组件
    public float moveSpeed = 8;   //移动的速度

    // Use this for initialization
    void Start () {
        playerRig = GetComponent<Rigidbody>();  //获取
    }

    //物理操作一般放在这个方法中
    void FixedUpdate ()
    {
        //当按下水平按键  A D  左方向键  右方向键时,返回一个 -1~1之间的数
        float h = Input.GetAxis("Horizontal");
        //当按垂直按键    S W  下方向键  上方向键时,返回一个 -1~1之间的数
        float v = Input.GetAxis("Vertical");
        //添加一个力方向是 new Vector3(...)
        playerRig.AddForce(new Vector3(h * moveSpeed, 0, v * moveSpeed));
    }
}

现在运行游戏,就可以控制小球运动了。但是画面有点别扭,现在给Main Camera 添加脚本,名为CameraController,编辑如下:

using UnityEngine;
using System.Collections;

public class CameraController : MonoBehaviour {
    public GameObject player;  //获取小球
    private Vector3 offset;   //用来计算相机和小球之间的差距

    // Use this for initialization
    void Start () {
        offset = transform.position - player.transform.position;  //得到差值
    }

    //一般相机的移动都放在这个方法
    void LateUpdate () {
        transform.position = offset + player.transform.position;  //保证差值不变
    }
}

现在相机就能跟随小球移动了。现在来创建食物。新建一个Cube,重命名为Food,把他做成Prefab,做成如下的样子:

这是要修改的 地方

勾选IsTrigger ,把他作为触发器。

然后给他添加赋上一个Material选择一个颜色,在添加一个名字叫做MyRotate的脚本并编辑:

    //当与触发器发生碰撞
    void OnTriggerEnter(Collider other)
    {
        //如果碰撞的物体的Tag是PeckUp
        if (other.tag == "PickUp")
        {
            //销毁物体
            Destroy(other.gameObject);
        }
    }

这是添加在类中的一个方法,添加进去。还要记得选择面板上的Food添加Tag,名字为PickUp,然后点击Inspector面板的Apply让他运用到所有物体。现在运行游戏就能消灭食物了。

最后我们让屏幕能够显示吃到食物的数量,新建一个UI—>Text,放到屏幕上方,在新建一个,放到屏幕中间,用来显示胜利文本,默认是不显示的,如:

修改PlayerController脚本,让他能够修改分数:

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class PlayerController : MonoBehaviour {
    private Rigidbody playerRig;  //用来获取刚体组件
    public float moveSpeed = 8;   //移动的速度
    public Text textContnt;   //得到Text组件
    public Text winText;   //得到胜利的文本组件
    private int score = 0;   //记录分数

    // Use this for initialization
    void Start () {
        playerRig = GetComponent<Rigidbody>();  //获取
        SetTextConten();
    }

    //物理操作一般放在这个方法中
    void FixedUpdate ()
    {
        //当按下水平按键  A D  左方向键  右方向键时,返回一个 -1~1之间的数
        float h = Input.GetAxis("Horizontal");
        //当按垂直按键    S W  下方向键  上方向键时,返回一个 -1~1之间的数
        float v = Input.GetAxis("Vertical");
        //添加一个力方向是 new Vector3(...)
        playerRig.AddForce(new Vector3(h * moveSpeed, 0, v * moveSpeed));
    }

    //当与触发器发生碰撞
    void OnTriggerEnter(Collider other)
    {
        //如果碰撞的物体的Tag是PeckUp
        if (other.tag == "PickUp")
        {
            score++;
            SetTextConten();
            //销毁物体
            Destroy(other.gameObject);
        }
    }

    //设置文本信息的方法
    void SetTextConten ()
    {
        textContnt.text = "Score :" + score;
        if (score == 9)   //因为我的食物数量有9个
        {
            winText.gameObject.SetActive(true);
        }
    }
}

最后运行结果:

项目工程:http://pan.baidu.com/s/1hszztwo 密码:2md7

本博客用作新手学习讨论,如有不好或错误的地方也请指出来,谢谢。

时间: 2024-08-28 20:59:10

Unity 官方案例 Roll a ball的相关文章

Unity官方案例进阶--Roll a ball

经过上一次的学习,我又想改进一下这款 Roll a ball 游戏,首先这款游戏只有胜利没有失败,所以我想定义一个条件来控制它的输赢,因此我想到了如下的方案: **使我们的玩家控制 Player 在规定时间内达到一定的分数就胜利,反之则失败** 任务目标 这里只是大概的目标内容,还有一些细节会在后面完成的时候体现出来. 完成 PickUp 的随机刷新出现,每隔3秒刷新一个 做一个倒计时器用于显示游戏剩余时间 控制分数和时间,若玩家在规定时间内达到分数则显示 You Win!字样,Player 禁

Roll a Ball &amp; Battle City

这是以前做过的两个小游戏,是根据unity官方教程来学习的,非常的简单.github下载地址在文末. Roll a Ball: 控制一个球来回移动,碰撞旋转的cube可以消除,颜色可以根据自己的喜好来设定,Roll a Ball其实也不算个游戏,没有音效,只有简单的字体UI.不过camera可以随着球体的移动而移动.下面是截图. Battle City: 双人游戏,W/S/A/D/J控制player1,UP/DOWN/LEFT/RIGHT/ENTER控制player2.值得说的是,坦克在移动时尾

[我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之摄像机介绍Cameras

[我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之摄像机介绍Cameras 最近得到一些Unity官方视频教程,一看全是纯英文的讲解,没有任何字幕或者讲稿之类的东西.虽然基本上看的懂,但很难听清其中一些细致的知识点.于是产生了做中文字幕的想法.本篇分享一下首个已完工的视频,即<beginner Graphics – Lessons系列之摄像机介绍Cameras>.听译.时间轴.压制者均为本人.请勿将视频用于非法目的. 优酷视频好像不太清晰,有需

[我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之灯光介绍Lights

[我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之灯光介绍Lights 既上一篇分享了中文字幕的摄像机介绍Cameras后,本篇分享一下第2个已完工的视频,即<beginner Graphics – Lessons系列之灯光介绍Lights>.听译.时间轴.压制者均为本人.请勿将视频用于非法目的. 有需要高清视频的同学麻烦点个赞并留下你的Email~ 有视频有真相 视频中的重点 类似现实世界,Unity中用灯光照亮场景 没有灯光,场景中的物体在

[我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之纹理Textures

[我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之纹理Textures 本篇分享一下第6个已完工的视频,即<beginner Graphics – Lessons系列之纹理Textures>.听译.时间轴.压制者均为本人.请勿将视频用于非法目的. 有需要高清视频的同学麻烦点个赞并留下你的Email~ 有视频有真相 视频中的重点 纹理是一个图片文件 Unity有多种使用纹理的方式最常见的方式是把纹理赋给网格的基础纹理属性使网格具有纹理的表面 纹理

[我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之网格Meshes

[我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之网格Meshes 本篇分享一下第5个已完工的视频,即<beginner Graphics – Lessons系列之网格Meshes>.听译.时间轴.压制者均为本人.请勿将视频用于非法目的. 有需要高清视频的同学麻烦点个赞并留下你的Email~ 有视频有真相 视频中的重点 Unity中的物体是由3D网格或多边形网格构成的 无论是角色只在一个平面上的简单的2D游戏 还是一个使用精灵(贴图)的复杂的粒

[我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之材质了解Materials

[我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之材质了解Materials 既上一篇分享了中文字幕的灯光介绍Lights后,本篇分享一下第3个已完工的视频,即<beginner Graphics – Lessons系列之材质了解Materials>.听译.时间轴.压制者均为本人.请勿将视频用于非法目的. 有需要高清视频的同学麻烦点个赞并留下你的Email~ 最近本人在搬家,上网机会少,回复较慢请谅解 有视频有真相 视频中的重点 Unity中的

mutiprocessing 同步类型,如锁,条件和队列官方案例:

官方文档:https://docs.python.org/2/library/multiprocessing.html#module-multiprocessing 1. 同步类型,如锁,条件和队列官方案例: # # A test file for the `multiprocessing` package # # Copyright (c) 2006-2008, R Oudkerk # All rights reserved. # import time, sys, random from Q

Unity官方公布热更新方案性能对比

孙广东  2016.3.11 Unity应用的iOS热更新 作者:丁治宇 Unity TechnologiesChina Agenda ?  什么是热更新 ?  为何要热更新 ?  如何在iOS 上对Unity 应用进行热更新 ?  支持Unity iOS 热更新的各种Lua 插件的对比 什么是热更新 ? 广义定义 ? 无需关闭服务器,不停机状态下修复漏洞,更新资源等,重点是更新逻辑代码. ? 狭义定义( iOS热更新) ? 无需将代码重新打包提交至AppStore,即可更新客户端的执行代码,即