【问题标题】:Rotating a 3d object in a top down shooter在自上而下的射击游戏中旋转 3d 对象
【发布时间】:2015-07-24 05:41:30
【问题描述】:

目前我正在尝试制作一个非常简单的自上而下的射击游戏。例如,我目前有一个 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);
}

【问题讨论】:

    标签: unity3d


    【解决方案1】:

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

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

    尝试改用:

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

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

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

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

    Vector3 mousePos = new Vector3(Input.mousePosition.x,
                                   Input.mousePosition.y,
                                   1f);
    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.up);
    

    【讨论】:

    • 感谢您的帮助!有时我想每个人都需要一点帮助:)
    • 另一个问题。这个应用对我的游戏对象进行连续旋转。他们有什么办法让它得到鼠标的位置并停止?
    【解决方案2】:

    看看Top Down Game Basics Tutorial .

    虽然它是关于 2D 的,但对制作 Top-Down 游戏有很大帮助。

    【讨论】:

    • 谢谢,我会检查一下!
    • 好的!让我知道它是否有帮助,或者如果您对此有任何其他问题。
    • 看来你的解决方案的视频有我的实际解决方案。可悲的是,上面的那个只是应用了一个连续的旋转。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多