笔者在用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);
}