<マウスで照準器を動かす>
(スクリプトの作成)
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は自由に設定

(確認)
- ゲームを再生して確認
- 照準器の位置に合わせて、砲塔の角度もゆっくり変化すれば成功です。

