单个单元:

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 摇杆奖励的更多相关文章

  1. [Unity3D]Unity3D游戏开发之使用EasyTouch虚拟摇杆控制人物移动

    大家好,欢迎大家关注我的博客,我是秦元培,我的博客地址是blog.csdn.net/qinyuanpei.今天呢,我们来一起学习在Unity3D中使用EasyTouch虚拟摇杆来控制人物移动.虽然Un ...

  2. Unity3D学习(三):利用NGUI实现一个简单的左右摇杆

    前言 小游戏Konster在测试的时候有热心玩家反馈左右移动手感不是很好,最主要的问题是:手指一旦按在手机屏幕的一个方向按钮上,向反方向滑动到另一个方向按钮上是不会改变玩家移动方向的. 具体如下图: ...

  3. Unity3d项目入门之虚拟摇杆

    Unity本身不提供摇杆的组件,开发者可以使用牛逼的EasyTouch插件或者应用NGUI实现相关的需求,下面本文通过Unity自身的UGUI属性,实现虚拟摇杆的功能. 主参考 <Unity:使 ...

  4. 【转载】Unity3D研究院之IOS自定义游戏摇杆与飞机平滑的移动

    移动开发游戏中使用到的触摸游戏摇杆在iPhone上是非常普遍的,毕竟是全触摸屏手机,今天MOMO 通过一个小例子和大家讨论Unity3D 中如何自定义一个漂亮的全触摸游戏摇杆.        值得高兴 ...

  5. Unity3D 摄像机的Transform通过摇杆输出的方向

    要解决的问题是:摄像机的方向不固定,当摇杆向前(0,1)推时,主角要往摄像机的朝向(忽略Y方向)走,当摇杆往右(1,0)推的时,主角朝摄像机的右方向 /// <summary> /// 摄 ...

  6. Unity3D学习笔记(二十三):事件接口、虚拟摇杆、层级管理和背包系统

    事件接口 IDragHandler(常用):鼠标按下拖动时执行(只要鼠标在拖动就一直执行) IDropHandler:对象拖动结束时,如果鼠标在物体的范围内,执行一次(依赖于IDragHandler存 ...

  7. unity3d easytouch计算摇杆旋转角度以及摇杆八方向控制角色

    在写第三人称控制的时候,一开始在电脑测试是用WASD控制角色 后来需要发布到手机上,于是就加了一个摇杆 键盘控制角色的代码已经写好了,角色八方向移动 如果按照传统的大众思路来控制的话,是达不到我想要的 ...

  8. 【转】Unity3D学习日记(二)使用UGUI制作虚拟摇杆控制摄像机

    http://blog.csdn.net/begonia__z/article/details/51178907 前天撸了一个简单的UGUI虚拟摇杆,今天我就利用前天做的虚拟摇杆做了一个简单的摄像机控 ...

  9. 【转】Unity3D学习日记(一)使用UGUI制作虚拟摇杆

    http://blog.csdn.net/begonia__z/article/details/51170059 如今手机游戏玩法多种多样,尤其使用虚拟摇杆进行格斗类游戏开发或者是MMORPG成为了主 ...

随机推荐

  1. 基于Prometheus,Alermanager实现Kubernetes自动伸缩

    到目前为止Kubernetes对基于cpu使用率的水平pod自动伸缩支持比较良好,但根据自定义metrics的HPA支持并不完善,并且使用起来也不方便. 下面介绍一个基于Prometheus和Aler ...

  2. UVa221 Urban Elevations

    离散化处理.判断建筑可见性比较麻烦.下面采用离散化解决:把所有的x坐标排序去重,在相邻两个x坐标表示的区间中,整个区间要么同时可见,要么同时不可见.如何判断该区间是否可见?具体做法是选取该区间中点坐标 ...

  3. 6、Python模块

    最常用的两个模块: os    #可以允许python调用执行系统命令,如shell sys    #处理与python程序本身的事情   Python自带200多个常用模块 Python官网收集了2 ...

  4. ubuntu 16.04 网络配置之虚拟网卡的配置

    关于图形界面的配置,我这里就不多介绍了,这个很简单.这里介绍的是如何通过修改配置文件来实现虚拟网卡. 首先介绍ubuntu(我这里使用的是ubuntu-16.04)下虚拟网卡的配置 1.先用ifcon ...

  5. HDU4911:Inversion

    Problem Description bobo has a sequence a1,a2,-,an. He is allowed to swap two adjacent numbers for n ...

  6. Hello,Android

    项目介绍 由于要參加某信息安全比赛.选择了安卓apk的行为分析与评估的课题,所以首先须要了解安卓程序是如何编写和执行的.我们的第一个任务就是写出一个多人通信的app. 我本人之前没有不论什么安卓和ja ...

  7. CTAssetsPickerController 选中图片不显示对号的问题解决

    转载自:http://blog.csdn.net/qq_27304667/article/details/53218547 早上AppStore审核通过,下载来看看.突然发现一个选择图片时候选中的标识 ...

  8. @property和@x.setter和@x.deleter表示可读可写可删除

    @property可以将python定义的函数“当做”属性访问,从而提供更加友好访问方式,但是有时候setter/deleter也是需要的.1>只有@property表示只读.2>同时有@ ...

  9. 常用的二种修改mysql最大连接数的方法

    方法一:进入MYSQL安装目录 打开MYSQL配置文件 my.ini 或 my.cnf查找 max_connections=100   修改为 max_connections=1000 服务里重起MY ...

  10. javascript判断是否为数组 面试题

    1.方法 instanceof:多框架下有问题(看示例代码). Object.prototype.toString.call():兼容性很好 Array.isArray: IE9+以上 constru ...