1. ホーム
  2. c#

[解決済み】Unity - Gameobjectがマウスを見る

2022-01-27 15:12:30

質問

問題が発生しました。

基本的なセットアップは、カメラとプレイヤーオブジェクトの2つです。

プレイヤーはWASDのTransformで移動し、マウスで回転するようになっています。 の動きです。

カメラはトップダウン(3psのような角度で、プレイヤーオブジェクトをカメラの中心に置き、プレイヤーの回転に合わせて回転します)です。

これがプレイヤーの移動スクリプトです。

using UnityEngine;
using System.Collections;

public class PlayerController : MonoBehaviour 
{
    public int playerSpeed = 8;  //players movement speed

    void Update () {
        if (Input.GetKey ("w")) 
        {
            transform.Translate (Vector3.forward * Time.deltaTime * playerSpeed); //move forward
        }  
        if (Input.GetKey ("s")) 
        {
            transform.Translate (Vector3.back * Time.deltaTime * playerSpeed); //move backwards
        }  
        if (Input.GetKey ("a")) 
        {
            transform.Translate (Vector3.left * Time.deltaTime * playerSpeed); //move left
        }  
        if (Input.GetKey ("d")) 
        {
            transform.Translate (Vector3.right * Time.deltaTime * playerSpeed); //move right
        }
    }
}

これは選手交代用のスクリプトです。

using UnityEngine;
using System.Collections;

public class mouseLook : MonoBehaviour {
    private Vector3 inputRotation;
    private Vector3 mousePlacement;
    private Vector3 screenCentre;

    void Update () {
        FindCrap();
        transform.rotation = Quaternion.LookRotation(inputRotation);
    }

    void FindCrap () {
        screenCentre = new Vector3(Screen.width * 0.5f,0,Screen.height * 0.5f);
        mousePlacement = Input.mousePosition;
        mousePlacement.z = mousePlacement.y;
        mousePlacement.y = 0;
        inputRotation = mousePlacement - screenCentre;
    } 
}

私が示したすべての結果は、回転しますが、マウスが物理的に存在する場所に忠実に回転するわけではありません。

マウスで円を描いている間、全回転はしますが、マウスがある場所を一貫して指しません。なぜなのかはよくわかりません。

カメラ(プレイヤーオブジェクトの子)がプレイヤーの移動と回転に追従し、プレイヤーは移動スクリプトで移動し、マウスの位置を正確に指すように回転することが望ましい結果です。

どなたかアイデアをお持ちの方はいらっしゃいませんか?よろしくお願いします。

編集:参考になればと思いますが、現在の回転はこのような仕組みになっています。

マウスでプレイヤーの周りに大きな円を描くと、プレイヤーの周りに極端に狭い円を描くよりもゆっくりとした回転になります。

解決方法は?

何をしようとしているのか理解できないのですが。もし、ゲーム「Dead Nation」のようなことをしようとしているのであれば、次のようなことを提案したいと思います。

マウスルック.cs

void Update()
{
    Vector3 mouse = Input.mousePosition;
    Vector3 mouseWorld = Camera.main.ScreenToWorldPoint(new Vector3(
                                                        mouse.x, 
                                                        mouse.y,
                                                        player.transform.position.y));
    Vector3 forward = mouseWorld - player.transform.position;
    player.transform.rotation = Quaternion.LookRotation(forward, Vector3.up);
}

もしカメラをプレーヤーと一緒に移動、回転させたい場合は、カメラをプレーヤーオブジェクトの子オブジェクトにすればよいでしょう。