有一个箭头指向我瞄准的方向
本文关键字:方向 有一个 | 更新日期: 2023-09-27 18:06:05
我希望我的箭头指向我在游戏中的目标。
目前,我的预制实例在屏幕的中心指向左边。当我移动我的箭头时,这个点仍然在左边。我该如何让箭头至少指向屏幕中心,或者根据玩家瞄准的方向进行移动?
例如,如果我的玩家瞄准屏幕的左上角,箭头就会朝那个方向发射。
这是我目前为止的代码:
public Object _projectilePrefab;
private bool _pressed = false;
public GameObject _flystickPosition;
private GameObject _currentProjectile;
private Vector3 _firePoint;
private float _startTime;
public float sensitivityX = 15F;
public float sensitivityY = 15F;
int x = 0;
int y = 0;
// Use this for initialization
void Start()
{
_currentProjectile = (GameObject)Instantiate(_projectilePrefab, _flystickPosition.transform.position, _flystickPosition.transform.rotation);
_firePoint = Camera.mainCamera.transform.position - new Vector3(1, 1, 0);
_startTime = (Time.time * 10.0f);
//_serialData = GetComponent<ReadSerial>();
//_udpData = GetComponent<HV_ReadUDPData>();
}
// Update is called once per frame
void Update()
{
_firePoint = Camera.mainCamera.transform.position - new Vector3(1, 1, 0);
float _moveBananaY = transform.localEulerAngles.y + Input.GetAxisRaw("LeftRight") * sensitivityX;
float _moveBananaX = transform.localEulerAngles.x + Input.GetAxisRaw("UpDown") * sensitivityY;
transform.localEulerAngles = new Vector3(_moveBananaX, _moveBananaY, 0);
if (Input.GetKeyDown(KeyCode.LeftArrow))
{
y--;
}
if (Input.GetKeyDown(KeyCode.RightArrow))
{
y++;
}
if (Input.GetKeyDown(KeyCode.UpArrow))
{
x--;
}
if (Input.GetKeyDown(KeyCode.DownArrow))
{
x++;
}
float xPercent = 0;
float yPercent = 0;
xPercent = x / 25.0f;
yPercent = y / 25.0f;
_flystickPosition.transform.parent.localEulerAngles = new Vector3(xPercent * 90, yPercent * 90, 0.0f);
float smooth = Time.time - _startTime;
_currentProjectile.transform.position = Vector3.Lerp(lerpFrom, _flystickPosition.transform.position, smooth);
if (Input.GetKeyDown(KeyCode.Space))
{
_currentProjectile.GetComponent<Rigidbody>().velocity = _flystickPosition.transform.parent.forward.normalized * 20;
_currentProjectile = null;
_currentProjectile = (GameObject)Instantiate(_projectilePrefab, _firePoint, transform.rotation);
lerpFrom = _currentProjectile.transform.position;
_startTime = Time.time;
}
}
所有这些代码都可以在我的fire抛射类中找到。它连在我的照相机上。
如果我没理解错的话,你的游戏是2D的。不过这并不重要。对于你的问题,我有两个解决方案:
- 你可以通过使用简单的矢量数学得到你指向的方向。Vector3(to - from)。所以你的箭头指向的方向是:Target.transform.position - Player.transform.position。现在,当它指向正确的方向时,你可以像这样移动它:Arrow.transform.Translate (Vector3。* Time.deltaTime);
同样,如果你的箭头必须指向目标,但与玩家保持不同的位置,只需从玩家到目标进行光线投射,获得光线投射点,就有你的箭头"Vector3 .
- 如果箭头总是模仿用户旋转,你可以简单地对箭头应用旋转。如果旋转不匹配(即你的对象是旋转的),只需添加空的游戏对象来模拟旋转,并将箭头作为它的子对象。现在你可以随意旋转它了。