using UnityEngine;
using System.Collections;

/// <summary>
/// 相机控制
/// </summary>
public class CameraController : MonoBehaviour {

    /// <summary>
    /// 玩家
    /// </summary>
    public GameObject player;

    /// <summary>
    /// 玩家到相机的偏移
    /// </summary>
    private Vector3 offset;

    void Start ()
    {
        //计算偏移
        offset = transform.position - player.transform.position;
    }

    void LateUpdate ()
    {
        //设置相机的位置为玩家的位置加 玩家到相机的偏移
        transform.position = player.transform.position + offset;
    }
}

CameraController

using UnityEngine;

using UnityEngine.UI;

using System.Collections;

/// <summary>
/// 玩家控制
/// </summary>
public class PlayerController : MonoBehaviour {

    /// <summary>
    /// 移动速度
    /// </summary>
    public float speed;
    /// <summary>
    /// 吃掉的球的数量的文本
    /// </summary>
    public Text countText;
    /// <summary>
    /// 显示赢得比赛的文本
    /// </summary>
    public Text winText;

    /// <summary>
    /// Rigidbody
    /// </summary>
    private Rigidbody rb;
    /// <summary>
    /// 玩家吃掉的球的数量
    /// </summary>
    private int count;

    void Start ()
    {
        rb = GetComponent<Rigidbody>();

        count = ;

        SetCountText ();

        winText.text = "";
    }

    void FixedUpdate ()
    {
        float moveHorizontal = Input.GetAxis ("Horizontal");
        float moveVertical = Input.GetAxis ("Vertical");

        Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);

        rb.AddForce (movement * speed);
    }

    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.CompareTag ("Pick Up"))
        {
            other.gameObject.SetActive (false);

            count = count + ;

            SetCountText ();
        }
    }

    /// <summary>
    /// 设置数量文本
    /// </summary>
    void SetCountText()
    {
        //更新显示数量的文本
        countText.text = "Count: " + count.ToString ();

        //如果数量大于等于12,
        )
        {
            winText.text = "You Win!";
        }
    }
}

PlayerController

using UnityEngine;
using System.Collections;

/// <summary>
/// 旋转小球
/// </summary>
public class Rotator : MonoBehaviour {

    void Update ()
    {
        transform.Rotate (, , ) * Time.deltaTime);
    }
}    

Rotator

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

/// <summary>
/// 教程信息
/// </summary>
public class TutorialInfo : MonoBehaviour
{
    /// <summary>
    /// 是否在开始时显示
    /// </summary>
    public bool showAtStart = true;

    /// <summary>
    /// 链接地址
    /// </summary>
    public string url;

    /// <summary>
    /// 覆盖层
    /// </summary>
    public GameObject overlay;

    public AudioListener mainListener;

    /// <summary>
    /// 开关 控制是否在开始时显示
    /// </summary>
    public Toggle showAtStartToggle;

    /// <summary>
    /// showLaunchScreen PlayerPrefs
    /// </summary>
    public static string showAtStartPrefsKey = "showLaunchScreen";

    /// <summary>
    /// 是否已经显示过了
    /// </summary>
    private static bool alreadyShownThisSession = false;

    void Awake()
    {
        if(alreadyShownThisSession)
        {
            StartGame();
        }
        else
        {
            alreadyShownThisSession = true;

            //如果prefs 有键,获取值,赋值给 showAtStart变量
            if (PlayerPrefs.HasKey(showAtStartPrefsKey))
            {
                showAtStart = PlayerPrefs.GetInt(showAtStartPrefsKey) == ;
            }

            //根据showAtStart 设置 Toggle 的勾选状态
            showAtStartToggle.isOn = showAtStart;

            //根据showAtStart 显示启动界面或者直接开始游戏
            if (showAtStart)
            {
                ShowLaunchScreen();
            }
            else
            {
                StartGame ();
            }
        }
    }

    /// <summary>
    /// 显示启动界面
    /// </summary>
    public void ShowLaunchScreen()
    {
        //游戏暂停
        Time.timeScale = 0f;
        mainListener.enabled = false;
        overlay.SetActive (true);
    }

    /// <summary>
    /// 打开链接地址
    /// </summary>
    public void LaunchTutorial()
    {
        Application.OpenURL (url);
    }

    /// <summary>
    /// 开始游戏
    /// </summary>
    public void StartGame()
    {
        overlay.SetActive (false);
        mainListener.enabled = true;
        //恢复正常的时间
        Time.timeScale = 1f;
    }

    /// <summary>
    /// 打开/关闭 是否在启动时显示
    /// </summary>
    public void ToggleShowAtLaunch()
    {
        showAtStart = showAtStartToggle.isOn;
        PlayerPrefs.SetInt(showAtStartPrefsKey, showAtStart ?  : );
    }
}

TutorialInfo

using UnityEngine;
using UnityEditor;
using System.Collections;

/// <summary>
/// 教程信息编辑器
/// </summary>
[CustomEditor(typeof(TutorialInfo))]    //指定这个编辑器脚本对应的脚本
public class TutorialInfoEditor : Editor
{
    /// <summary>
    /// ScriptObject.OnEnable
    /// </summary>
    void OnEnable()
    {
        //如果首选项里存在键
        if (PlayerPrefs.HasKey(TutorialInfo.showAtStartPrefsKey))
        {
            //读取值,根据值设置是否在开始时启用
            ((TutorialInfo)target).showAtStart = PlayerPrefs.GetInt(TutorialInfo.showAtStartPrefsKey) == ;
        }
    }

    /// <summary>
    /// Editor.OnInSpectorGUI
    /// 自定义检视面板
    /// </summary>
    public override void OnInspectorGUI()
    {
        //检查BeginChangeCheck()/EndChangeCheck() 里代码块内的控件是否有变
        EditorGUI.BeginChangeCheck();

        base.OnInspectorGUI();

        //如果有变化,重新获取并设置 showAtStartPrefsKey 的值
        if(EditorGUI.EndChangeCheck()) {
            PlayerPrefs.SetInt(TutorialInfo.showAtStartPrefsKey,((TutorialInfo)target).showAtStart ?  : );
        }
    }
}

TutorialInfoEditor

视频:https://pan.baidu.com/s/1jIHlTga

项目:https://pan.baidu.com/s/1c1Tffo

Roll a ball 学习的更多相关文章

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

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

  2. Roll A Ball

    GameObject的添加就不细说了,地面,小球和碰撞小物体. 刚体组件(Rigidbody): 使物体能够模拟物理效果,比如重力,碰撞,推力等: 控制小球移动的脚本(Script,Ball的脚本): ...

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

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

  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. Ethereum Learning Materials

    Home 注:本页为 EthFans 站内文章精选集.鉴于文章的采集范围较广,我们无法保证文章内容没有重复,也不能保证排列的顺序实现了最优的认识路径.我们只能说,这些文章是我们精挑细选后,确认可以长期 ...

  9. JAVAAPI学习之Calendar类;Calendar类set()、add()、roll()方法区别

    JAVAAPI学习之Calendar类 http://blog.csdn.net/myjlvzlp/article/details/8065775(写的很好,清晰易懂) Calendar类set(). ...

随机推荐

  1. 201621123001 《java程序设计》 第3周学习总结

    1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识点组织起来.请使用工具画出本周学习到的知识点及知识点之s间的联系.步骤如下: 1.1 写出 ...

  2. Storm介绍&实际开发注意事项

    一.使用组件的并行度代替线程池 Storm 自身是一个分布式.多线程的框架,对每个Spout 和Bolt,我们都可以设置其并发度:它也支持通过rebalance 命令来动态调整并发度,把负载分摊到多个 ...

  3. 杭电多校第七场 1010 Sequence(除法分块+矩阵快速幂)

    Sequence Problem Description Let us define a sequence as below f1=A f2=B fn=C*fn-2+D*fn-1+[p/n] Your ...

  4. pytest 的 yield

    前言:1.当 pytest.fixture(scope="module") 时,pytest的yieId 类似unittest的teartownclass 2.当 pytest.f ...

  5. L267 How to save money

    When it comes to saving money, the struggle is all too real. It's like your bank account and your 20 ...

  6. nginx保持会话的方式

    1)ip_hash 简单易用,但是有如下缺点 后端服务器宕机后,session会丢失 来自同一局域网的客户端会被转发到同一个后端服务器,可能导致负载失衡 不适用CDN网络,不适用于前段还有代理的情况 ...

  7. laravel 添加验证码

    1.  安装依赖  composer require gregwar/captcha 2.使用 use Gregwar\Captcha\CaptchaBuilder; use DB; use Requ ...

  8. box-sizing布局

    box-sizing 语法:box-sizing: content-box | border-box | inherit; 参考: https://www.jianshu.com/p/e2eb0d8c ...

  9. Java应用集群下的定时任务处理方案(mysql)

    Java应用集群下的定时任务处理方案(mysql)   因为自己有csdn和博客园两个博客, 所以两边都会发一下. csdn地址: http://blog.csdn.net/u012881584/ar ...

  10. Spring Boot 揭秘与实战 附录 - Spring Boot 公共配置

    Spring Boot 公共配置,配置 application.properties/application.yml 文件中. 摘自:http://docs.spring.io/spring-boot ...