В своей игре FPS я пытаюсь заставить своего игрока бросить гранату. Я знаю, что есть подобные вопросы, но сообщения старые, и их ответы мне совсем не помогли. Когда я попытался бросить гранату с помощью метода AddForce (), граната просто появилась прямо перед игроком, как будто метод AddForce () никогда не вызывался. То же самое произошло, когда я установил для него значение скорости. Похоже, граната вообще не сдвинется с места! Я убедился, что:
- Граната НЕ кинематическая
- Не работает как при включенной, так и при выключенной гравитации
- Позиции / вращения не заморожены
- К нему прикреплено твердое тело
- К гранате не прикреплен контроллер персонажа.
- Масса всего одна
Мой код ниже:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class Script : MonoBehaviour {
[SerializeField] GameObject grenade;
public int throwForce = 30;
Vector3 spawnPosition;
// Use this for initialization
void Start () {
instantiateVariables ();
}
void instantiateVariables(){
}
void throwGrenade(){
print (spawnPosition);
GameObject tempGrenade = (GameObject) Instantiate (grenade, spawnPosition, transform.rotation);
Vector3 direction = new Vector3(transform.forward.x, transform.forward.y, transform.forward.z );
Rigidbody rb = grenade.GetComponent<Rigidbody> ();
if (rb != null){
rb.velocity = direction.normalized * 10f;
Destroy (tempGrenade, 10);
}
else {
Debug.LogError ("There is no rigid body on your cube!");
}
}
// Update is called once per frame
void Update () {
spawnPosition = transform.forward + transform.position;
print (spawnPosition);
if (Input.GetMouseButtonDown (1)) {
throwGrenade ();
}
}
}
Инспектор: