unityバージョン:2019.1.10f1
unityで3dシューティングゲームの開発を行っています。飛行機(プレイヤー)からクリックをすると弾がとんでいくという仕組みなのですが、マウスで敵を狙うのではなくTobii EyeTrackerを用いて、視線移動で敵を狙う仕組みにしようと考えています。
現在視線でマウスカーソルを動かすことに成功し、見ている方向に弾が飛んでいくのですが、敵に直接弾が飛んではいかないため、うまく敵に弾を当てることができません。
下記コードはマウスカーソルを視線移動で動かし、またクリックすると弾を飛ばすスクリプトです。
using UnityEngine; using System.Collections; using Tobii.Gaming; using System.Runtime.InteropServices; public class AddForceBullet : MonoBehaviour { //win32API [DllImport("user32.dll")] public static extern bool SetCursorPos(int x, int y); int GazeTrackX, GazeTrackY; // カーソルに使用するテクスチャ [SerializeField] private Texture2D cursor; // 弾のゲームオブジェクト [SerializeField] private GameObject bulletPrefab; // 銃口 [SerializeField] private Transform muzzle; // 弾を飛ばす力 [SerializeField] private float bulletPower = 500f; //クリックしたところに飛ばすray; private Ray ray; void Start() { // カーソルを自前のカーソルに変更 Cursor.SetCursor(cursor, new Vector2(cursor.width / 2, cursor.height / 2), CursorMode.ForceSoftware); } void Update() { //TobiiAPIを使い注視座標を取得 Vector2 gazePoint = TobiiAPI.GetGazePoint().Screen; GazeTrackX = (int)gazePoint.x; GazeTrackY = 1075-(int)gazePoint.y; SetCursorPos(GazeTrackX, GazeTrackY); ray = Camera.main.ScreenPointToRay(Input.mousePosition); //transform.rotation = Quaternion.LookRotation(ray.direction); RaycastHit hit; if (Physics.Raycast(ray, out hit, 1f, LayerMask.GetMask("Gun"))) { Cursor.visible = false; } else { Cursor.visible = true; } // マウスの左クリックで撃つ if (Input.GetButtonDown("Fire1")) { Shot(); } } // 敵を撃つ void Shot() { Vector2 gazePoint = TobiiAPI.GetGazePoint().Screen; GazeTrackX = (int)gazePoint.x; GazeTrackY = (int)gazePoint.y; SetCursorPos(GazeTrackX, GazeTrackY); ray = Camera.main.ScreenPointToRay(Input.mousePosition); var bulletInstance = Instantiate<GameObject>(bulletPrefab, muzzle.position, muzzle.rotation); bulletInstance.GetComponent<Rigidbody>().AddForce(ray.direction * bulletPower, ForceMode.Force); } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/23 03:31