目前我正在尝试制作一个非常简单的自上而下的射击游戏。作为一个例子,我目前有一个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);
}
答案 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但在制作自上而下游戏方面有很大帮助。