第一个工程3-代码解释二 ,检查球的的静止和一杆的结束

来源:互联网 发布:大股东知乎 编辑:程序博客网 时间:2024/05/17 04:24

现在还没处理球飞出去的情况,所以检查一个球没有被SetActive(false),同时速度和角速度小于一个微小值,可以认为它静止,所有存在的球静止可以认为一杆结束


using UnityEngine;

using System.Collections;

public class BallCheck : MonoBehaviour {
    GameObject[] numberBalls;
    GameObject whiteBall;

    public GameObject tableStickController;
    StickController stickController;
    // Use this for initialization
    void Start () {
        numberBalls = GameObject.FindGameObjectsWithTag("NumberBall");
        if (numberBalls.Length != 15)
            Debug.Log ("Less than 15 Balls?");
        whiteBall = GameObject.FindGameObjectWithTag ("WhiteBall"); //取得十五个球和白球,以便后面使用

        stickController = tableStickController.GetComponent<StickController> ();
    }
    
    // Update is called once per frame
    void Update () {
        if (SceneManager.isBallMoving == true) { //isBallMoving == true,说明一杆开始,此时每帧检查,直到白球和各球都静止,设为false,停止检查,同时执行,stickController.ResetTableStickAndRelated ();进行一杆结束的判断和处理
            if (CheckOneBallMotionless(whiteBall) &&CheckAllNumberBalls ()) {
                SceneManager.isBallMoving = false;
                stickController.ResetTableStickAndRelated ();
            }
        }
    }
//检查所有十五球,其中调用一个球的检查CheckOneBallMotionless
    bool CheckAllNumberBalls() {
        for (int i = 0; i < numberBalls.Length; i++) {
            if(!CheckOneBallMotionless (numberBalls[i])) {
                return false;
            }
        }    
        return true;
    }
//检查参数传入的那个球是否静止,oneBall.activeSelf == true确定球未落袋oneRigidbody.velocity.magnitude < 0.0001 && oneRigidbody.angularVelocity.magnitude < 0.0001 当角速度和速度小于一微小值是认为其停止,我们知道float是不能用等号判断的
    bool CheckOneBallMotionless(GameObject oneBall)  //物体消失或速度过小都算停止
    {
        if (oneBall.activeSelf == true) {
            Rigidbody oneRigidbody = oneBall.GetComponent<Rigidbody> ();
            if (oneRigidbody.velocity.magnitude < 0.0001 && oneRigidbody.angularVelocity.magnitude < 0.0001)
                return true;
            else
                return false;
        } else
            return true;
    }
}
0 0
原创粉丝点击