本文实例为大家分享了统一已知落点和速度自动计算发射角度的具体代码,供大家参考,具体内容如下
在发射物已知落点和速度的情况下如果刚体应用重力,不容易算出发射角度,以下为计算过程
///& lt; summary>///挂载到发射器上即可///& lt;/summary> 公共类旋转:MonoBehaviour { 公共GameObject预制;//发射物 公共漂浮速度;//发射物速度 公共bool抛射=false;//抛射:仰角比;45°,否:仰角& lt;45° 雷RayMouse; Vector3方向; 旋转四元数; 无效的更新() { 如果(Input.GetMouseButtonDown (0)) { GameObject=实例化(预制,变换。位置,transform.rotation); go.AddComponent()。速度=go.transform。向前*速度; } RaycastHit打击; RayMouse=Camera.main.ScreenPointToRay (Input.mousePosition); 如果(Physics.Raycast (RayMouse。起源、RayMouse。方向,打击,Mathf.Infinity)) { RotateToMouseDirection (gameObject hit.point); } }///& lt; summary>///执行整体旋转///& lt;/summary>///& lt;参数name=" obj祝辞旋转的物体(自身)& lt;/param>///& lt;参数name=澳康牡亍痹谀勘甑?鼠标指向)& lt;/param> 空白RotateToMouseDirection (GameObject obj, Vector3目的地) {=目的地- obj.transform.position方向; 旋转=Quaternion.LookRotation(方向); Vector3 finalAngle=rotation.eulerAngles; 浮动targetAng=角(目的地); finalAngle=new Vector3 (-targetAng finalAngle。y, finalAngle.z);//注意正负 obj.transform。localRotation=Quaternion.Euler (finalAngle); }///& lt; summary>///自动计算x欧拉角,即仰角///& lt;/summary>///& lt;参数name=澳勘辍痹谀勘甑阕? lt;/param>///& lt; returns> & lt;/returns> 浮动角(Vector3目标) { 浮动angleX; distX=Vector2浮动。(新Vector2(目标的距离。x, target.z)新Vector2 (transform.position。x, transform.position.z)); 浮动distY=目标。y - transform.position.y; posBase=(Physics.gravity浮动。y * Mathf。战俘(distX, 2.0 f))/(2.0 f * Mathf。战俘(速度、2.0 f)); 浮动posX=distX/posBase; 诗句=(Mathf浮动。战俘(posX, 2.0 f)/4.0 f) - ((posBase - distY)/posBase); 如果(诗句祝辞=0.0) { 如果抛射)//字段 angleX=Mathf。Rad2Deg * Mathf。(-posX/每股2.0 f + Mathf。战俘(诗句,0.5 f)); 其他的 angleX=Mathf。Rad2Deg * Mathf。(-posX/每股2.0 f - Mathf。战俘(诗句,0.5 f)); } 其他的 { angleX f=45.0; } 返回angleX; } }
实际效果
抛射效果
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。