public Rigidbody projectile;
public Transform startBulletPosition;
public float speed;
public float rotationSpeed;
public Camera camera;
Vector3 startingDirection;
void Start() {
startingDirection = startBulletPosition.transform.forward;
}
void Update() {
if (Input.GetButtonDown("Fire1")) {
RaycastHit hit;
Vector3 targetDirection;
if (Physics.Raycast(Camera.main.transform.position, camera.transform.forward, out hit)){
targetDirection = hit.transform.position - startBulletPosition.position;
} else {
targetDirection = startingDirection;
}
Vector3 newDirection = Vector3.RotateTowards(startBulletPosition.transform.forward, targetDirection, rotationSpeed * Time.deltaTime, 0.0f);
startBulletPosition.transform.forward = newDirection;
Rigidbody clone;
clone = Instantiate(projectile, startBulletPosition.position, startBulletPosition.rotation) as Rigidbody;
clone.velocity = targetDirection * speed;
}
}
私はあなたがヒットし、その方向に武器を回転させることができるものを見るためにカメラ位置からレイキャストを行うだろう。私の例コードのように。武器はあなたのカメラRaycastが狙うものを正確にCenter Viewに指します。
また、最大のターン数をそのフロートで制御することもできます。これは瞬時のジャンプだけでなく、素晴らしい武器の動きにも役立ちます。ここで
が、私はこのスニペットで使用されるもののドキュメンタリーリンクは以下のとおりです。 https://docs.unity3d.com/ScriptReference/RaycastHit.html
レイキャストミスした場合、武器の保存された元の方向が使用されます。
maxBistanceパラメータをPhysics.Raycast呼び出しに追加して、この動作が有効な距離を制限することができます。
センターに弾丸を発射していないため、** Raycast **を試して、オブジェクトがあなたの前にいるかどうかを確認することができます。もしそうなら、** BulletSpawn **ポイントと**オブジェクトの間の距離を取得します**。弾丸が中心に当たる角度を計算します。あなたの**変形でそれを使用してください** – Thalthanas
これまでに実際の撮影範囲に行ったことがありますか?私はそのような(または何かにexcentricにマウントされている場合)私の銃を保持することを余儀なくされた場合、私は完全にその動作を期待したい。 – Fildor