我正在制作一个自上而下的射击游戏,但是我在得到我想要的射击效果时遇到了麻烦。目前,我有一个玩家脚本来处理移动和射击。
void Update()
{
//Player face mouse
Plane playerPlane = new Plane(Vector3.up, transform.position);
Ray ray = UnityEngine.Camera.main.ScreenPointToRay(Input.mousePosition);
float hitDist = 0.0f;
if(playerPlane.Raycast(ray, out hitDist))
{
Vector3 targetPoint = ray.GetPoint(hitDist);
Quaternion targetRotation = Quaternion.LookRotation(targetPoint - transform.position);
targetRotation.x = 0;
targetRotation.z = 0;
playerObj.transform.rotation = Quaternion.Slerp(playerObj.transform.rotation, targetRotation, 7f * Time.deltaTime);
}
//Player Movement
if (Input.GetKey(KeyCode.W))
{
transform.Translate(Vector3.forward * movementSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.A))
{
transform.Translate(Vector3.left * movementSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.S))
{
transform.Translate(Vector3.back * movementSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.D))
{
transform.Translate(Vector3.right * movementSpeed * Time.deltaTime);
}
//Shooting
if (Input.GetMouseButtonDown(0))
{
Shoot();
gunAudio.Play();
}
}
void Shoot()
{
Instantiate(bullet.transform, bulletSpawnPoint.transform.position, playerObj.transform.rotation);
}
到目前为止,子弹并不总是沿着直线射出。当玩家开始移动时,子弹似乎落后了,并且并不总是从我在武器尖端设置的子弹产卵点射出。所以如果玩家面向左或右,子弹将从玩家身后的左侧或右侧射出。如果玩家面向前,子弹总是从前面出来。
我试过在检查器中增加子弹速度,但似乎并不能解决子弹并不总是沿着正确的方向直线射出的问题。我得到的提示是,使用前向矢量可能会有所帮助,但我该如何改变我必须加入的东西呢?
3条答案
按热度按时间62o28rlo1#
如果我理解你的问题,你设置的子弹旋转是相同的球员,而不是你必须设置它是相同的Bulletspawner。而且,而不是子弹转换你应该示例化子弹作为游戏对象
因此,您的示例化应该如下所示。
xn1cxnb42#
您可以用途:
代替
x7rlezfr3#
我不知道您是否仍然有这个问题,但我有一个类似的问题,我通过在示例化后立即将子弹轨迹作为bulletSpawnPoint的子对象来修复它。