Unity3d 摇杆奖励

单个单元:
publicclass RockerSingle : MonoBehaviour {
// 枚举。类别
RockerType rockerType;
//是否有效,最上面的为无效,即为false;
public bool valid=true;
//不同类别对应不同的效果
public Texture[] typyTexture;
public Material typeMaterial;
// rockerType ,属性可读可写
internal RockerType RockerType{
get { return rockerType;}
set{
gameObject.GetComponent<MeshRenderer>().material.mainTexture=typyTexture[(int)value];
rockerType=value;
}
}
// 0~maxRockerIndex-1,当前属于第几个单元。
int rockerIndex;
internal int RockerIndex{
get { return rockerIndex;}
set{ rockerIndex=value;}
}
// 1,2,3。最大单元数
int maxRockerIndex;
internal int MaxRockerIndex{
get { return maxRockerIndex;}
set{ maxRockerIndex=value;}
}
// 每个单元对应的Position,用于单元的移动;
Vector3[] rockerTrans;
internal Vector3[] RockerTrans{
get { return rockerTrans;}
set{ rockerTrans=value;}
}
// 控制单元移动
internal void getMovingV3(){
rockerIndex++;
if(rockerIndex>=maxRockerIndex){
rockerIndex=0;
myTransform.position=rockerTrans[0];
getMovingV3();
}
else {
toMoving(rockerTrans[rockerIndex]);
}
}
private bool moving=false;
internalbool Moving{
get { return moving;}
set{ moving=value ;}
}
internalvoid toMoving(Vector3 v3){
destination=v3;
moving=true;
}
Vector3 destination;
Transform myTransform;
Vector3 velocity;
void Awake(){
myTransform=transform;
}
public float speedF;
void Update(){
if(moving){
velocity = destination - myTransform.position;
//float damping = velocity.magnitude;
if (velocity.sqrMagnitude < 0.01f)
{
myTransform.position = destination;
moving=false;
if(! RockerController.RockerEnd)
getMovingV3();
}
else {
velocity.Normalize();
myTransform.position = (myTransform.position + (velocity*Time.deltaTime*speedF));
}
}
}
}
////////////////////// 一组摇杆单元 //////////////////////
publicclass PlayeRocker : MonoBehaviour {
// 一组单元Transform,按由上到下顺序
public Transform [] rockerTrans;
// 一组单元RockerSingle脚本,按由上到下顺序
public RockerSingle[] rockerSingle;
// 一组单元Position,按由上到下顺序
Vector3[] rockerV3;
// 开始快速移动的间隔时间
public float time=0.1f;
//最大奖励类别
int maxRockerType;
void Start(){
maxRockerType=(int)RockerType.Color4+1;
StartCoroutine("startRocker");
}
IEnumerator startRocker(){
yieldreturnnewWaitForSeconds(time);
Init();
}
void Init(){
int length=rockerTrans.Length;
rockerV3=new Vector3 [length];
for(int i=0;i<length;i++){
if(rockerTrans[i])
rockerV3[i]=rockerTrans[i].position;
else
rockerV3[i]=Vector3.zero;
}
for(int i=0;i<length;i++){
rockerSingle[i].RockerType=(RockerType)Random.Range(0,maxRockerType);
rockerSingle[i].RockerIndex=i;
rockerSingle[i].MaxRockerIndex=length;
rockerSingle[i].RockerTrans=rockerV3;
}
for(int i=0;i<length;i++){
rockerSingle[i].getMovingV3();
}
}
}
///////////// 摇杆奖励停止与奖励结果
//奖励类别,枚举表示
public enum RockerType{
Color0=0,
Color1=1,
Color2=2,
Color3=3,
Color4=4
}
publicclass RockerController : MonoBehaviour {
//bool 为true,则停止
internalstaticbool RockerEnd=false;
//所有奖励单元
RockerSingle[] rockerSingles;
// 奖励单元的标签,如是六个奖励单元,(包含空的奖励单元)。那 奖励单元的标签就为3。即停止时,中间三个都为一样,就获得奖励了
public int rockerIndex=3;
void Start(){
getRockerSingle();
StartCoroutine("stopRocker");
}
void getRockerSingle(){
GameObject [] gos=GameObject.FindGameObjectsWithTag("RockerSingle");
rockerSingles=new RockerSingle [gos.Length];
for(int i=0,j=gos.Length;i<j;i++){
rockerSingles[i]=gos[i].GetComponent<RockerSingle>();
}
}
IEnumerator stopRocker(){
yieldreturnnewWaitForSeconds(3f);
RockerStop();
}
//摇杆停止接口
void RockerStop(){
RockerEnd=true;
StartCoroutine("rockerRuselt");
}
//所有奖励单元都停止移动,获取奖励结果
IEnumerator rockerRuselt(){
bool isbool=true;
bool isStop=true;
while(isbool){
isStop=true;
foreach(RockerSingle rock in rockerSingles){
if(rock.Moving)
isStop=false;
}
if(isStop){
Debug.Log("Stop");
rockerRaward();
isbool=false;
}
yieldreturnnull;
}
}
// 判断是否奖励成功。
void rockerRaward(){
System.Collections.Generic.List<RockerType> tockerTypeList=new System.Collections.Generic.List<RockerType> ();
foreach(RockerSingle rock in rockerSingles){
if(rock.RockerIndex==rockerIndex && rock.valid){
Debug.Log(" Rocker Raward "+rock.transform.name+" "+rock.RockerType);
tockerTypeList.Add(rock.RockerType);
}
}
bool isSucced=true;
for(int i=0,j=tockerTypeList.Count-2;i<=j;i++){
if(tockerTypeList[i]!=tockerTypeList[i+1])
isSucced=false;
}
RawardRuselt(isSucced,tockerTypeList[0]);
}
// 奖励成功与失败的接口
void RawardRuselt(bool isSucced,RockerType rockerType){
}
}
Unity3d 摇杆奖励的更多相关文章
- [Unity3D]Unity3D游戏开发之使用EasyTouch虚拟摇杆控制人物移动
大家好,欢迎大家关注我的博客,我是秦元培,我的博客地址是blog.csdn.net/qinyuanpei.今天呢,我们来一起学习在Unity3D中使用EasyTouch虚拟摇杆来控制人物移动.虽然Un ...
- Unity3D学习(三):利用NGUI实现一个简单的左右摇杆
前言 小游戏Konster在测试的时候有热心玩家反馈左右移动手感不是很好,最主要的问题是:手指一旦按在手机屏幕的一个方向按钮上,向反方向滑动到另一个方向按钮上是不会改变玩家移动方向的. 具体如下图: ...
- Unity3d项目入门之虚拟摇杆
Unity本身不提供摇杆的组件,开发者可以使用牛逼的EasyTouch插件或者应用NGUI实现相关的需求,下面本文通过Unity自身的UGUI属性,实现虚拟摇杆的功能. 主参考 <Unity:使 ...
- 【转载】Unity3D研究院之IOS自定义游戏摇杆与飞机平滑的移动
移动开发游戏中使用到的触摸游戏摇杆在iPhone上是非常普遍的,毕竟是全触摸屏手机,今天MOMO 通过一个小例子和大家讨论Unity3D 中如何自定义一个漂亮的全触摸游戏摇杆. 值得高兴 ...
- Unity3D 摄像机的Transform通过摇杆输出的方向
要解决的问题是:摄像机的方向不固定,当摇杆向前(0,1)推时,主角要往摄像机的朝向(忽略Y方向)走,当摇杆往右(1,0)推的时,主角朝摄像机的右方向 /// <summary> /// 摄 ...
- Unity3D学习笔记(二十三):事件接口、虚拟摇杆、层级管理和背包系统
事件接口 IDragHandler(常用):鼠标按下拖动时执行(只要鼠标在拖动就一直执行) IDropHandler:对象拖动结束时,如果鼠标在物体的范围内,执行一次(依赖于IDragHandler存 ...
- unity3d easytouch计算摇杆旋转角度以及摇杆八方向控制角色
在写第三人称控制的时候,一开始在电脑测试是用WASD控制角色 后来需要发布到手机上,于是就加了一个摇杆 键盘控制角色的代码已经写好了,角色八方向移动 如果按照传统的大众思路来控制的话,是达不到我想要的 ...
- 【转】Unity3D学习日记(二)使用UGUI制作虚拟摇杆控制摄像机
http://blog.csdn.net/begonia__z/article/details/51178907 前天撸了一个简单的UGUI虚拟摇杆,今天我就利用前天做的虚拟摇杆做了一个简单的摄像机控 ...
- 【转】Unity3D学习日记(一)使用UGUI制作虚拟摇杆
http://blog.csdn.net/begonia__z/article/details/51170059 如今手机游戏玩法多种多样,尤其使用虚拟摇杆进行格斗类游戏开发或者是MMORPG成为了主 ...
随机推荐
- android 中怎样获取IMEI号
1)在Telephony Framework内部.能够直接使用GSMPhone或GeminiPhone提供的接口. KK之前的版本号: IMEI(International Mobile Equipm ...
- [Java] 实验8
[Java] 实验7參考代码,代码已更新.感兴趣的同学能够去学习. 1. default package问题可參考实验6 2. for, if, while等.后面包括多条语句时,须要用花括号括起来 ...
- Spring中如何配置事务
学过SSH的都知道,整合了SSH之后,SSH的经典增删改查案例业务逻辑层的代码就十分简单.基本上都是一句话的事. public void addUser(Webuserlogin user) { // ...
- setTimeout应用 && 自动播放——幻灯片效果&& 自动改变方向——幻灯片效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Matlab中特征向量间距离矩阵的并行mex程序
在matlab中, 有n个向量(m维)的矩阵Mat(n, m) 要计算任两个向量间的距离, 即距离矩阵, 可使用以下的并行算法以加速: #include <iostream> #inclu ...
- synchronized的功能拓展:重入锁(读书笔记)
重入锁可以完全代替synchronized关键字.在JDK5.0的早期版本中,重入锁的性能远远好于synchronized,但是从JDK6.0开始.JDK在synchronized上做了大量的优化. ...
- Oracle基础(三) 表空间
数据库的存储结构 数据库主要用于存储和检索相关的信息,Oracle数据库包含逻辑结构和物理结构. 物理结构是指现实存储单元,由一组文件组成如数据文件.日志文件.控制文件. 数据文件:用于存储数据的文件 ...
- 【HTML5】summary交互元素
1.源码 <!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"/> <tit ...
- 【VBA】隐藏正在使用的工作簿
正在使用的工作簿,嫌窗口太多,不利于操作,想把窗口隐藏,该怎么做呢? Public Sub 隐藏正在使用的工作簿() Application.Visible = False MsgBox " ...
- Java除法结果带小数、进一法的实现 Java问题通用解决代码
http://blog.csdn.net/windone0109/article/details/5355379进一法: 即省略的位上只要大于零都要进一位 : 四舍五入法: 即省略的位上小于五都要舍 ...