关于捕鱼炮弹的碰撞撞到墙上后,炮弹自动调整方向,面向(炮弹)刚体受力的方向向前走

笔者在用unity做捕鱼游戏的时候关于炮弹碰撞到墙上后  子弹会出现像光一样的反弹,同时子弹始终面向自己被反弹的方向


本中的炮弹与墙均带有刚体碰撞体 同时将去掉所有的重力   将碰撞体上的IS Triiger 设为  取消


这个结局的思路是   1---->>>>> 找到子弹运动的轨迹.从而就知道子弹的前进的方向    2--->>>>>>>那么怎么取到碰到的墙后的一瞬间知道游戏一下步被反弹到哪里  我们需要用到 两个函数 分别是      OnCollisionEnter2D(检测物体碰撞接触)      OnCollisionExit2D(检测碰撞离开)  在这两个函数中取到炮弹现在坐标   3-->>>>>   首先我们建立一个坐标轴   分别有4个象限    然后我们将坐标取到后  以炮弹碰撞墙的时候坐标作为 之前提到的坐标的(0,0)点  因为带2D游戏中 只有X,Y   正好将这个坐标搭建起来     4 ----->>>>>我们就将物体离开墙的时候得到的坐标  与 (0,0)的坐标将比较---<也就是玩家的炮弹> 相比较得到 x,y 的差值.     5---------->>>>将得到的差值使用三角函数中的  我在这里选用的是tan得到物体角度  6---->>>>>这样们取到了 角度   但是呢 ,这个角度还是不能使用,  因为在游戏中2d的物体以z为中心点   向左旋转是正直的旋转角度  我们还需要在进行转化   下面是我的代码

	Vector3 q_v3=new Vector3 (0,0,0);
	Vector3 h_v3=new Vector3 (0,0,0);
 
void OnCollisionExit2D (Collision2D collider2D){

		h_v3 = this.gameObject.transform.position;
		Debug.Log ("111111碰撞时候的接触点=" + this.gameObject.transform.position);


		float x_cha = q_v3.x - h_v3.x;///*-- *// x 轴的差值
		float y_cha=q_v3.y-h_v3.y; /*--*/// / Y轴的差值
		float r = Mathf.Atan (y_cha / x_cha) * 180 / Mathf.PI;   //算出角度
		if  (x_cha<=0 &&   y_cha>=0)    //第二象限   0-90
			this.transform.localEulerAngles=new Vector3(0,0,90+r);
		else if(x_cha>0  &&   y_cha>0)    /* --*///第一象限   270-360
			this.transform.localEulerAngles=new Vector3(0,0,(-90+r));         /*--*///使炮台旋转到相应的额角度
		else if(x_cha<0  &&   y_cha<0 )   //第三象限  90-180
			this.transform.localEulerAngles=new Vector3(0,0,(90+r));  //使炮台旋转到相应的额角度
		else if(x_cha>0  &&   y_cha<0 )    //第四象限   180-270
			this.transform.eulerAngles=new Vector3(0,0,(270+r));  //使炮台旋转到相应的额角度	

	}

	void OnCollisionEnter2D(Collision2D collider2D){
		q_v3 = this.gameObject.transform.position;
		Debug.Log ("22222碰撞时候的接触点=" + this.gameObject.transform.position);





	}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值