模拟重力Parabolic Motion

来源:互联网 发布:织梦cms二次开发 编辑:程序博客网 时间:2024/05/17 22:52
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MissileAI : MonoBehaviour
{
    private Transform mTransform;
    public const float g = 2f;

    private GameObject target;
    public float speed = 2f;
    private float verticalSpeed;
    private Vector3 moveDirection;

    private float angleSpeed;
    private float angle;

    private bool isMove;

    public GameObject temp;
    private Transform selfChild;

    private GameObject explosionEffect;
    private void Awake()
    {
        explosionEffect = Resources.Load<GameObject> ("Effects/BigExplosionEffect");
    }
    public void SetInfo (GameObject targe)
    {
        selfChild = transform.GetChild (0);
        target = targe;
        isMove = true;
        float tmepDistance = Vector3.Distance (transform.position, target.transform.position);
        float tempTime = tmepDistance / speed;
        float riseTime, downTime;
        riseTime = downTime = tempTime / 2;
        verticalSpeed = g * riseTime;
        selfChild.LookAt (target.transform.position);

        float tempTan = verticalSpeed / speed;
        double hu = Mathf.Atan (tempTan);
        angle = (float)(180 / Mathf.PI * hu);
        transform.eulerAngles = new Vector3 (-angle, transform.eulerAngles.y, transform.eulerAngles.z);
        angleSpeed = angle / riseTime;

        moveDirection = target.transform.position - transform.position;
        time = 0;
        //Debug.Log("SetInfo:" + target.transform.position+"  transformPos"+transform.position);
    }
    private float time;
    void Update ()
    {
        if (GameManager.Instance.gameState != EGameState.Gaming) return;
        if (!isMove)
            return;
        if (transform.position.y < target.transform.position.y) {
            time = 0;
            isMove = false;
            //Debug.Log ("missiledestory");
            BattleController.Instance.selfBattlePeopleList.Remove (gameObject);
            GameObject explosion = Instantiate (explosionEffect);
            explosion.transform.parent = BattleController.Instance.generatorParent.transform;
            explosion.transform.localPosition = transform.localPosition;
            explosion.transform.localScale = Vector3.one;
            Damage ();
            Destroy (gameObject,0.1f);
            return;
        }
        selfChild.LookAt (target.transform.position);
        time += Time.deltaTime;
        float test = verticalSpeed - g * time;
        transform.Translate (moveDirection.normalized * speed * Time.deltaTime, Space.World);
        transform.Translate (Vector3.up * test * Time.deltaTime, Space.World);
        float testAngle = -angle + angleSpeed * time;
        transform.eulerAngles = new Vector3 (testAngle, transform.eulerAngles.y, transform.eulerAngles.z);
    }
    public float attackDistance;
    public string maskTarget;
    private int colsLength;
    private HeroAI targetHeroAI;
    private BunkerAI targetBunkerAI;
    void Damage ()
    {
        Collider [] cols = Physics.OverlapSphere (transform.position, attackDistance, 1 << LayerMask.NameToLayer (maskTarget));
        colsLength = cols.Length;
        if (colsLength <= 0) {
            return;
        } else {
            targetHeroAI = null;
            targetBunkerAI = null;

            for (int i = 0; i < colsLength; i++) {
                targetHeroAI = null;
                targetBunkerAI = null;
                targetHeroAI = cols [i].GetComponent<HeroAI> ();
                targetBunkerAI =cols [i].GetComponent<BunkerAI> ();
                if(targetHeroAI!=null)
                {
                    targetHeroAI.HP -= 100;
                    //bomb bomb bomb
                }
                else if(targetBunkerAI !=null)
                {
                    targetBunkerAI.HP -= 100;
                    //bomb bomb bomb
                }
            }

        }
    }
    //private void OnTriggerEnter(Collider other)
    //{
    //    if (other.transform.tag == "RealPlayer1")
    //    {
    //        mTransform.gameObject.SetActive(false);
    //        Debug.Log("OnCollisionEnterRealPlayer1");
    //    }
    //}
    //private void OnTriggerEnter (Collider col)
    //{
    //    //Debug.Log ("collision:");
    //    if (col.transform.name.Contains ("Fish")) {
            

    //    }
    //}

}
  
原创粉丝点击