Unity:在3D自上而下的视图中向鼠标旋转

时间:2015-04-10 10:36:53

标签: c# unity3d rotation mouse

所以我试图创造一种像坦克一样的潮流。上半部分需要看我的鼠标。我试过了

GetComponent().ScreenToWorldPoint(Argument);

多次与

相关

Input.mousePosistion();

但我真的无法弄清楚这一点。我正在使用C#进行编程,如果任何人可以提供帮助或提供一个简单的脚本,该脚本可以在3D设置中工作,那将非常棒!

到目前为止我的代码:

using UnityEngine;
using System.Collections;

public class Laser : MonoBehaviour {
    public float Speed;
    public AudioClip LaserSFX;
    private Transform Player;
    public Vector3 mousePos;
    public Camera Cam;

    // Use this for initialization
    void Start () {
        GameObject player = GameObject.FindWithTag("Player");
        Player = player.transform;
        if(!GetComponent<AudioSource>().isPlaying)
        GetComponent<AudioSource> ().PlayOneShot (LaserSFX);
    }

    // Update is called once per frame
    void Update () {

        //Code to look at mouse or rotate
        //Code to move towards it

        float dist = Vector3.Distance(Player.position, transform.position);
        if (dist >= 500) 
        {
            Destroy(gameObject);
        }
    }

}

亲切的问候,

Misterk99

2 个答案:

答案 0 :(得分:1)

您必须将鼠标位置转换为视图位置,这意味着当时您正在使用的相机应该为您提供ScreenToWorldPoint,并且因为您已经将相机作为cam提供:

         Vector3 pos = Input.mousePosition;
         pos = Cam.ScreenToWorldPoint(pos);

现在你必须面对这个位置,因为你正在使用自上而下的3D我会使相机面向-y位置。如果是这样,请不要忘记设置你想要的y:

pos.y = (your value here, depending to the position you are giving to your objects);
Vectgor3 dir = this.position - pos;
float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.AngleAxis(angle, Vector3.up);

答案 1 :(得分:0)

我在尝试为自己找到一个解决方案时找到了解决方案。 @Spike给出的答案让我走上正轨。但是,我使用鼠标的视点位置并将对象位置转换为视口位置。这是Javascript(我正在使用的)中的代码,它应该很容易转换为C#。

我的相机面向-Y方向,仅供参考。

#pragma strict

var cam: Camera;

function Start () {

}

function Update () {

    var mousePos: Vector3 = Input.mousePosition;
    var playerPos: Vector3 = cam.WorldToScreenPoint(transform.position);

    var dir: Vector3 = mousePos - playerPos;

    var angle: float = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;

    transform.rotation = Quaternion.AngleAxis(-angle, Vector3.up);
}