• 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){

     

    }

     

    }

     

  • 相关阅读:
    成为高级 React 开发你需要知道的知识点
    Socket 连接问题之大量 TIME_WAIT
    x == (x = y) 不等于 (x = y) == x ?
    「工具」三分钟了解一款思维导图工具:XMind Zen
    Touch Bar 废物利用系列 | 在触控栏上显示 Dock 应用图标
    vim中delete(backspace)键不能向左删除
    Vue2.0学习(四)--组件的继承与扩展
    quasar+cordova+zbar实现Android扫描条形码
    PWA技术理论+实战全解析
    分页请求时,有新数据加入时,下一页会出现重复数据问题
  • 原文地址:https://www.cnblogs.com/kuangwu/p/3171106.html
Copyright © 2020-2023  润新知