我想让我的箭指出我在比赛中的目标。
此刻,我的预制实例化在屏幕中心指向左侧。当我移动箭头时,该点仍然保持在左侧。我怎样才能得到它,使箭头至少指向我的屏幕中心,或者理想情况下,有一种移动方式,具体取决于玩家瞄准的方向。
例如,如果我的播放器瞄准屏幕的左上方,箭头将面向那个方向并向该方向发射。
这是我到目前为止的代码:
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;
}
}
所有这些代码都在我的FireProjectile类中找到。它附在我的相机上。
答案 0 :(得分:0)
如果我理解正确,你的游戏就是2D。但它并不重要。我会为您的问题提供两种解决方案:
1)您可以使用简单的矢量数学来获得指向方向。 Vector3(来自)。所以你的箭头指向是:Target.transform.position - Player.transform.position。现在,当它指向正确的方向时,您可以将其移动为: Arrow.transform.Translate(Vector3.forward * Time.deltaTime);
此外,如果你的箭头必须指向目标,但保持在与玩家不同的位置,只需从玩家到目标的光线投射,获得光线投射点,然后你的箭头“转到”Vector3。
2)如果箭头始终模仿用户旋转,则可以简单地将旋转应用于箭头Arrow.transform.rotation = Player.transform.rotation。如果旋转不匹配(即旋转对象),只需添加空游戏对象以模拟旋转并将箭头作为其子对象。现在你可以随意旋转它。
这是非常基本的问题所以我认为这个答案不需要源代码。希望有所帮助。