所以我试图创造一种像坦克一样的潮流。上半部分需要看我的鼠标。我试过了
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
答案 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);
}