(1)
- マウスでロックオン
- ロックオン後、ボタン押しで発射音が鳴る。
- 0.7秒後に敵の破壊を確認(ギミック;弾は飛んでいない)
(スクリプト)
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class MouseLook : MonoBehaviour { public Transform player; private float mouseSensitivity = 200f; private float xRotation = 0; public Image aimImage; private RaycastHit enemyHit; // ★★(敵の破壊) public AudioClip shotSound; public AudioClip destroySound; public GameObject effectPrefab; void Start() { Cursor.lockState = CursorLockMode.Locked; } void Update() { float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime; float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime; xRotation -= mouseY; xRotation = Mathf.Clamp(xRotation, -90f, 90f); transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f); player.Rotate(Vector3.up * mouseX); Ray ray = new Ray(transform.position, transform.forward); if(Physics.Raycast(ray, out enemyHit, 100)) { string hitName = enemyHit.transform.gameObject.tag; if(hitName == "Enemy") { aimImage.color = Color.red; // ★★(敵の破壊) // 左クリック if (Input.GetMouseButtonDown(0)) { // 発射音を出す AudioSource.PlayClipAtPoint(shotSound, Camera.main.transform.position); // Invokeメソッドで時間差を生み出す Invoke("DestroyEnemy", 0.7f); } } else { aimImage.color = Color.white; } } else { aimImage.color = Color.white; } } // ★★(敵の破壊) void DestroyEnemy() { if(enemyHit.transform.gameObject) { GameObject effect = Instantiate(effectPrefab, enemyHit.point, Quaternion.identity); Destroy(effect, 1.0f); AudioSource.PlayClipAtPoint(destroySound, transform.position); } // 破壊すべきものは「Enemy」のTagが付いているものに限定する。 if(enemyHit.transform.CompareTag("Enemy")) { Destroy(enemyHit.transform.gameObject); } } }