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

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);

   }
}
 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值