通过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);
}
}
我希望对象至少从字符手中被抛出,除非什么也没发生。任何帮助吗?
你需要在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);
}