在自上而下的射击游戏中旋转3d对象

时间:2015-07-24 05:41:30

标签: unity3d

目前我正在尝试制作一个非常简单的自上而下的射击游戏。作为一个例子,我目前有一个3d框,我试图获得玩家的鼠标位置并将框的z轴旋转到该角度。我有一些关于如何处理这个问题的小想法,但我似乎无法将它放在有效的代码中。有人可以帮忙吗?

using UnityEngine;
using System.Collections;

public class MoveOnAxisInput : MonoBehaviour
{
public string horizontalAxis = "Horizontal";
public string verticalAxis = "Vertical";
public float speed = 1.0f;

// Update is called once per frame
void Update ()
{
    transform.position += (Vector3.right*Input.GetAxis(horizontalAxis) + Vector3.forward*Input.GetAxis(verticalAxis)).normalized*speed*Time.deltaTime;

    Vector3 mousePos = new Vector3(0, 10, Input.mousePosition.z);
    Vector3 lookPos = Camera.main.ScreenToWorldPoint(mousePos);
    lookPos = lookPos - transform.position;
    float angle = Mathf.Atan2(lookPos.z, lookPos.x) * Mathf.Rad2Deg;
    transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
}

2 个答案:

答案 0 :(得分:1)

获取鼠标位置不适用于您的代码:

public Order[] UpdateCollection(Order[] orderCollection)
{
    foreach(Order o in orderCollection)
          o = Update(o);

    return orderCollection;
}

请尝试使用:

Vector3 mousePos = new Vector3(0, 10, Input.mousePosition.z);

使用Input.mousePosition时,会得到包含x和y中像素坐标的Vector3,以及z分量为0。

此外,由于您正在尝试制作一个自上而下的射击游戏,请尝试使用AngleAx与Vector3.up而不是Vector3.forward。这将使你的角色围绕Y轴旋转。

以下是在测试场景中为我工作的最终代码:

Vector3 mousePos = new Vector3(Input.mousePosition.x,
                               Input.mousePosition.y,
                               1f);

答案 1 :(得分:0)

看看Top Down Game Basics Tutorial

虽然它是关于2D但在制作自上而下游戏方面有很大帮助。