(Unity)戦車のヘッド部分のコントロール

(1)砲弾発射のスクリプト

  • マウス右クリックで砲弾発射
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ShotShell_1 : MonoBehaviour
{
    public GameObject shellPrefab;
    public AudioClip sound;

    void Update()
    {
        // マウスの右クリックで砲弾発射
        if(Input.GetMouseButtonDown(1))
        {
            GameObject shell = Instantiate(shellPrefab, transform.position, Quaternion.identity);
            Rigidbody shellRb = shell.GetComponent<Rigidbody>();
            shellRb.AddForce(transform.forward * 1000);
            AudioSource.PlayClipAtPoint(sound, transform.position);
            Destroy(shell, 3f);
        }
    }
}

(2)ヘッド部分旋回のスクリプト

  1. マウス左クリックでロックオン・・・>カメラ位置に砲塔を旋回させる。
  2. マウスホイールの「クリック」で砲塔が瞬時に正面に戻る。
  3. マウスホイールの「長押し」で砲塔がゆっくり正面に戻る。

*2と3は適宜どちらかを選択 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HeadController_2 : MonoBehaviour
{
    private Quaternion targetRotation;

    void Start()
    {
        targetRotation = transform.rotation;
    }

    void Update()
    {
        // マウス左クリックでロックオン
        // カメラ位置に砲塔を旋回させる。
        if(Input.GetMouseButtonDown(0))
        {
            var rotationHorizontal = Quaternion.AngleAxis(Camera.main.transform.eulerAngles.y, Vector3.up);

            transform.rotation = rotationHorizontal;
        }

        // マウスホイールのクリックで砲塔が正面に戻る
        if (Input.GetMouseButtonDown(2))
        {
            // 瞬時に戻る。
            transform.localRotation = Quaternion.Euler(0, 0, 0);
        }

        // マウスホイールの長押しで砲塔が正面に戻る
        if (Input.GetMouseButton(2))
        {
            // ゆっくり戻る。
            transform.localRotation = Quaternion.Lerp(transform.localRotation, Quaternion.Euler(0, 0, 0), Time.deltaTime * 3);
        }
    }
}