您的位置:首页 > 其它

捕鱼达人(炮筒跟着鼠标旋转,委托事件的运用)

2017-04-25 10:47 281 查看
Resources文件夹里的资源是不能打包的

//挂在鱼身上

public class FishMoveScript : MonoBehaviour {
    public float speed;
    private  Vector3 starPosition;//开始位置
    private Vector3 targetPosition;//目标位置
    void Start () {
        starPosition = transform.position;
        GetTarget ();
        if (transform.position.x > 0) {
            ChangeDiretion ();//在右边产生先旋转
        }
    }

    void Update () {
        if (Vector3.Distance (transform.position, targetPosition) <= 0.05f) {
            ChangeDiretion ();
            starPosition = targetPosition;
            GetTarget ();
        }
        MoveToTarget ();
    }
    void MoveToTarget(){//移动到目标位置
        transform.position =Vector3.MoveTowards (transform.position ,targetPosition ,speed*Time.deltaTime );//向前直线移动(当前位置,目标点,最大移动距离)
    }
    //获取目标点
    void GetTarget(){
        targetPosition = new Vector3 (starPosition.x * -1, starPosition.y, 0);
    }
    //掉头
    void ChangeDiretion(){
    //    transform.Rotate (new Vector3 (0, 180, 0));//旋转
        Vector3 scale=transform.localScale ;
        scale.x =-scale.x;
        transform.localScale = scale;//改x
    }
}

//鱼身上
public class FishLiveScript : MonoBehaviour {
    public delegate void FishDelegate();//委托
    public event FishDelegate fishEvent;//事件
    public int   Hp;//鱼的生命值
    public GameObject explosionPer;
    void Start () {
    
    }
    
    // Update is called once per frame
    void Update () {
    
    }
    void OnTriggerEnter2D(Collider2D other){//触发
        
        if (other.tag == "Bullet") {
            Hp -= other.gameObject.GetComponent <BulletScript > ().attack;
            Destroy (other.gameObject);
            if (Hp <= 0) {
                //产生爆炸效果
                Instantiate (explosionPer,transform.position ,Quaternion.identity );
                fishEvent ();
                Destroy (gameObject);
            }
        }

    }
}

//挂在子弹身上
public class BulletScript : MonoBehaviour {
    public int  attack;

    private Rigidbody2D rigid2D;
    void Start(){
        rigid2D = GetComponent <Rigidbody2D > ();
    }
    void Update () {
        rigid2D.AddForce (transform.up * 10,ForceMode2D.Impulse );//自己的正上方加力
    }
}

//挂在炮筒上
public class Cannon_1Script : MonoBehaviour {
    public GameObject BulletPerfabs;//子弹预设体
    public Transform shootPoint;//获取子弹产生的位置
    void Start () {
    
    }
    

    void Update () {
        FollowMouseRotation ();
        if (Input.GetMouseButtonDown (0)) {
            Shoot ();
        }
    }
    void Shoot(){
        Instantiate (BulletPerfabs ,shootPoint.position ,transform.rotation );//和炮筒一起旋转
    }
    void FollowMouseRotation(){
        Vector3 mousePosition = Camera.main.ScreenToWorldPoint (Input.mousePosition);//得到鼠标坐标
        Vector3 direction = mousePosition - transform.position;//得到方向
        direction.z=0;
        //限制旋转角度
        if (direction.y >= 0.5f) {
            //让自身坐标的Y轴指向当前方向
            transform.up = direction;
        }
    }
}

public class GameController : MonoBehaviour {

    private string[] fishName;
    private float time;

   
private int killNumber;
    void Start () {
        fishName = new string[] { "Fish1", "Fish2", "Fish3" };//初始化
    }

    void Update () {
        time += Time.deltaTime;
        if (time >= 0.5f) {
            CreatFish ();
            time = 0;
        }
    }
    void CreatFish(){
        int fishIndex = Random.Range (0, 3);
        //从资源文件夹中获得预设体
        GameObject fishPerfabs=Resources .Load (fishName [fishIndex]) as GameObject ;
        int x_Dic = Random.Range  (0, 2);
        float y = Random.Range (-2f, 3.5f);
        Vector3 fishCreatPosition;
        if (x_Dic ==0) {
            fishCreatPosition = new Vector3 (-11.5f, y, 0);
        } else {
            fishCreatPosition = new Vector3 (11.5f, y, 0);
        }
        GameObject fish = Instantiate (fishPerfabs, fishCreatPosition, Quaternion.identity) as GameObject ;//预设体创建
    }

   void ShowData(){//显示杀死鱼的数据
        killNumber++;
        print ("当前得分为"+killNumber);

   }
}
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: