<マウスで照準器を動かす>
(スクリプトの作成)
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class AimController_Z : MonoBehaviour { public Vector3 targetPos; public Image aimImage; void Update() { // 「マウスの位置」と「照準器の位置」を同期させる。 transform.position = Input.mousePosition; RaycastHit hit; // MainCameraからマウスの位置にRayを飛ばす Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out hit)) { // RayがColliderと衝突した地点の座標を取得 targetPos = hit.point; print(targetPos); if(hit.transform.CompareTag("Enemy")) { // 照準器を赤色に変化させる。 aimImage.color = new Color(1.0f, 0.0f, 0.0f, 1.0f); } else { // 照準器の色は白 aimImage.color = new Color(1.0f, 1.0f, 1.0f, 1.0f); } } else { // 照準器の色は白 aimImage.color = new Color(1.0f, 1.0f, 1.0f, 1.0f); } } }
(設定)
- スクリプトをAimオブジェクトに追加
- 空欄にAimオブジェクトをドラッグ&ドロップ
(確認)
- ゲームを再生して確認
- マウスのカーソル位置に照準器が移動すれば成功です。
<照準器の位置に戦車のヘッド部分をゆっくり旋回&砲塔の角度を調整させる>
(ヘッド部分のスクリプト)
using System.Collections; using System.Collections.Generic; using UnityEngine; public class HeadController_Z : MonoBehaviour { public AimController_Z acz; private Vector3 targetPosition; public float speed; private float step; void Update() { // (テクニック)「ターゲットの高さ」と「戦車ヘッドの高さ」を揃える。 // これでヘッド部分が「真横に旋回」するようになる。 acz.targetPos.y = transform.position.y; targetPosition = acz.targetPos; step = speed * Time.deltaTime; Vector3 targetDir = targetPosition - transform.position; Vector3 moveDir = Vector3.RotateTowards(transform.forward, targetDir, step, 0f); transform.rotation = Quaternion.LookRotation(moveDir); } }
(設定)
- スクリプトを戦車のヘッド部分に追加
- 空欄にAimオブジェクトをドラッグ&ドロップ
- Speedは自由に設定
(確認)
- ゲームを再生して確認
- マウスを動かすと、ヘッド部分が左右に水平旋回すれば成功です。
(砲塔部分のスクリプト)
using System.Collections; using System.Collections.Generic; using UnityEngine; public class HeadController_Z2 : MonoBehaviour { public AimController_Z acz; private Vector3 targetPosition; public float speed; private float step; void Update() { targetPosition = acz.targetPos; step = speed * Time.deltaTime; Vector3 targetDir = targetPosition - transform.position; Vector3 moveDir = Vector3.RotateTowards(transform.forward, targetDir, step, 0f); transform.rotation = Quaternion.LookRotation(moveDir); } }
(設定)
- 砲塔オブジェクトはヘッド部分の子供に設定する(これで横旋回はヘッド部分と一体で行うようになる)
- スクリプトを砲塔オブジェクトに追加
- 空欄にAimオブジェクトをドラッグ&ドロップ
- Speedは自由に設定
(確認)
- ゲームを再生して確認
- 照準器の位置に合わせて、砲塔の角度もゆっくり変化すれば成功です。