在 Unity 中向鼠标位置发射炮弹
Shooting a projectile towards mouse location in Unity
我正在创建一个玩家需要点击才能射击的 2D 游戏。鼠标光标在屏幕上的任何位置都是弹丸移动的方向。我能够让射弹实例化并到达鼠标位置,但射弹跟随鼠标,这不是我想要的。
public class LetterController : MonoBehaviour {
private List<GameObject> letters = new List<GameObject>();
public GameObject letterPrefab;
public float letterVelocity;
// Use this for initialization
private void Start()
{
}
// Update is called once per frame
void Update ()
{
Vector3 direction = Camera.main.ScreenToWorldPoint(Input.mousePosition);
if (Input.GetMouseButtonDown(0))
{
GameObject letter = (GameObject)Instantiate(letterPrefab, transform.position, Quaternion.identity);
letters.Add(letter);
}
for (int i = 0; i < letters.Count; i++)
{
GameObject goLetter = letters[i];
if (goLetter != null)
{
goLetter.transform.Translate(direction * Time.deltaTime * letterVelocity );
Vector3 letterScreenPosition = Camera.main.WorldToScreenPoint(goLetter.transform.position);
if (letterScreenPosition.y >= Screen.height + 10 || letterScreenPosition.y <= -10 || letterScreenPosition.x >= Screen.width + 10 || letterScreenPosition.x <= -10)
{
DestroyObject(goLetter);
letters.Remove(goLetter);
}
}
}
}
}
我看了几个 YouTube 视频并查看了几个 Unity 论坛,但解决方案要么给我错误,要么给我不同的问题,比如只在一个轴上拍摄或在相反的轴上拍摄
根据您的评论,Update() 每帧调用一次,并且在每一帧内您都获得当时鼠标的位置,因此它始终趋向于新的鼠标位置。
所以你需要做的是在触发动作时获取鼠标位置,并使用它直到动作 complete/cancelled。
我正在创建一个玩家需要点击才能射击的 2D 游戏。鼠标光标在屏幕上的任何位置都是弹丸移动的方向。我能够让射弹实例化并到达鼠标位置,但射弹跟随鼠标,这不是我想要的。
public class LetterController : MonoBehaviour {
private List<GameObject> letters = new List<GameObject>();
public GameObject letterPrefab;
public float letterVelocity;
// Use this for initialization
private void Start()
{
}
// Update is called once per frame
void Update ()
{
Vector3 direction = Camera.main.ScreenToWorldPoint(Input.mousePosition);
if (Input.GetMouseButtonDown(0))
{
GameObject letter = (GameObject)Instantiate(letterPrefab, transform.position, Quaternion.identity);
letters.Add(letter);
}
for (int i = 0; i < letters.Count; i++)
{
GameObject goLetter = letters[i];
if (goLetter != null)
{
goLetter.transform.Translate(direction * Time.deltaTime * letterVelocity );
Vector3 letterScreenPosition = Camera.main.WorldToScreenPoint(goLetter.transform.position);
if (letterScreenPosition.y >= Screen.height + 10 || letterScreenPosition.y <= -10 || letterScreenPosition.x >= Screen.width + 10 || letterScreenPosition.x <= -10)
{
DestroyObject(goLetter);
letters.Remove(goLetter);
}
}
}
}
}
我看了几个 YouTube 视频并查看了几个 Unity 论坛,但解决方案要么给我错误,要么给我不同的问题,比如只在一个轴上拍摄或在相反的轴上拍摄
根据您的评论,Update() 每帧调用一次,并且在每一帧内您都获得当时鼠标的位置,因此它始终趋向于新的鼠标位置。
所以你需要做的是在触发动作时获取鼠标位置,并使用它直到动作 complete/cancelled。