Roll a ball 学习


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 学习的更多相关文章
- 学习unity的第一个小游戏(Roll the ball)的笔记
1.摄像机的跟随运动,逻辑就是保持摄像机跟主角的距离不变(Undate()函数). offset=trandform.position-player.position. Undate() { tran ...
- Roll A Ball
GameObject的添加就不细说了,地面,小球和碰撞小物体. 刚体组件(Rigidbody): 使物体能够模拟物理效果,比如重力,碰撞,推力等: 控制小球移动的脚本(Script,Ball的脚本): ...
- 关于Roll A Ball实例练习记录
学习中不段进步! 游戏思路:通过键盘控制白色小球,让它"捡起"柠黄色方块,捡起一个加1分,全部捡起游戏胜利! 游戏对象: Ground:绿色地面 player: 小球 Obsta ...
- 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 ...
- Ethereum Learning Materials
Home 注:本页为 EthFans 站内文章精选集.鉴于文章的采集范围较广,我们无法保证文章内容没有重复,也不能保证排列的顺序实现了最优的认识路径.我们只能说,这些文章是我们精挑细选后,确认可以长期 ...
- JAVAAPI学习之Calendar类;Calendar类set()、add()、roll()方法区别
JAVAAPI学习之Calendar类 http://blog.csdn.net/myjlvzlp/article/details/8065775(写的很好,清晰易懂) Calendar类set(). ...
随机推荐
- tf.nn.conv2d
tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None) input: 指需要做卷积的输入图像,它 ...
- Bluedroid: 蓝牙协议栈源码剖析
一. 基础知识介绍 1.缩略语 BTIF: Bluetooth Interface BTU : Bluetooth Upper Layer BTM: Bluetooth Manager BTE: Bl ...
- centos7配置hadoop集群
一:测试环境搭建规划: 主机名称 IP 用户 HDFS YARN hadoop11 192.168.1.101 hadoop NameNode,DataNode NodeManager hadoop1 ...
- NioEventLoop(netty 4.1)
里面有个excecutor属性, 在loopgroup实例化loop的时候, 如果execute一个runnable的task的时候,检测loop启动了没有,没启动的话,执行excecutor的exe ...
- PCP项目立项
1.需求分析 现如今已经进入互联网时代,无论是工作还好娱乐都已经离不开互联网,与此同时,网络相关的问题也时不时的侵扰着我们,这需要我们具有一定网络相关知识来解决相关问题,而这时,一款工作便利,免费的网 ...
- 20165326 java第五周学习笔记
第五周学习笔记 ch7 内部类(&外嵌类) 内部类的类体不可以声明类变量和方法 内部类如同类的变量或方法 内部类和外嵌类在编译时生成两个class文件 匿名类 某个类的一个子类没有明显的用类声 ...
- leetcode57:插入区间
给出一个无重叠的 ,按照区间起始端点排序的区间列表. 在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间). 示例 1: 输入: intervals = [ ...
- css设置div高度与宽度相等的一种方法
div.category{ width:33%; padding:33% 0 0; } 1.关键在padding:33% 0 0这句代码,通过设置padding-top与宽度相等(padding使用百 ...
- python-oop的理解
OOP是面向对象编程,特征分别是封装.继承.多态.抽象. 封装:封装是指将对象信息状态通过访问权限修饰符隐藏在对象内部,不允许外部程序直接访问,如果外部程序要访问对象内部,可以调用内部提供的get或s ...
- shell统计当前文件夹下的文件个数、目录个数
1. 统计当前文件夹下文件的个数 ls -l |grep "^-"|wc -l 2. 统计当前文件夹下目录的个数 ls -l |grep "^d"|wc -l ...