通过c# Unity投掷一个游戏对象

本文关键字:一个 游戏 对象 Unity 通过 | 更新日期: 2023-09-27 18:12:17

有一个小麻烦得到一个游戏对象抛出。我有一款2d游戏,我想要投掷的游戏对象是手榴弹。目前,我有以下代码:

using UnityEngine;
using System.Collections;
[RequireComponent(typeof(Rigidbody))]
[RequireComponent(typeof(CapsuleCollider))]
public class SoldierController : MonoBehaviour
{
    public GameObject grenadeObject;
     void Start()
        {
            grenadeObject.SetActive(false); 
        }
    void Update()
    {
     if (Input.GetKeyDown(KeyCode.I))
                    {
                        grenadeObject.SetActive(true);
                        animator.SetBool("Grenade", true);
                        GrenadeThrow();
                        //speed = Mathf.Lerp(10, 0, Time.deltaTime);
                       // grenadeObject.transform.Translate(Vector3.forward * 10);
                        StartCoroutine(GrenadeCooldown());
                    }
     }
    void GrenadeThrow()
        {
            StartCoroutine(COPlayOneShot("Grenade"));
            Instantiate(grenadeObject, new Vector3(10 * 2.0F, 0, 0), Quaternion.identity);
        }

        IEnumerator GrenadeCooldown()
        {
            canFire = false;
            yield return new WaitForSeconds(0.01f);
            //rifleMuzzle.GetComponent<ParticleSystem>().top();
            canFire = true;
            animator.SetBool("Grenade",false);
        }
}

我希望对象至少从字符手中被抛出,除非什么也没发生。任何帮助吗?

通过c# Unity投掷一个游戏对象

你需要在grenadeObject预制件上有一个组件,例如Grenade脚本。在那里,你会有一个Vector3的方向,它应该去和一个浮动的速度。在该脚本的Start()中,您将使用速度和方向来发射手榴弹。速度和方向由你在问题中提供的类指定。

下面是一个手榴弹类的例子:
public class Grenade : Monobehaviour {
    public Vector3 direction;
    public float speed;
    void Start () {
        // initiate movement of the grenade
    }
}

你的班级从问题中更新:

public GameObject grenadeObject;
void Update() {
   if (Input.GetKeyDown(KeyCode.I)) {
       animator.SetBool("Grenade", true);
       GrenadeThrow();
    }
}
void GrenadeThrow() {
    StartCoroutine(COPlayOneShot("Grenade")); // unknown function
    Grenade grenade = Instantiate(grenadeObject, new Vector3(10 * 2.0F, 0, 0), Quaternion.identity).GetComponent<Grenade> ();
    grenade.direction = Vector3.one; // change this to the appropriate direction
    grenade.speed = 10f; // change this to the appropriate speed
}

IEnumerator GrenadeCooldown() {
    canFire = false;
    yield return new WaitForSeconds(0.01f);
    //rifleMuzzle.GetComponent<ParticleSystem>().top();
    canFire = true;
    animator.SetBool("Grenade",false);
}