【发布时间】:2018-05-29 02:30:09
【问题描述】:
我有一个名为 Player 的游戏对象。 附加到 Player 有一个名为 Player 的脚本组件(相同) 在 Player 的脚本中,我有一个名为 _weaponPrefab 的字段(GameObject 类型)
在 Inspector 中,我可以轻松地从 Prefab 文件夹中的 _weaponPrefab 变量中拖放任何预制件。
到目前为止一切顺利。我想要归档的是:能够基于 Collision2D 添加我的预制件。因此,如果我的 Player 与 Prefab(比如说一把剑)发生碰撞,那把剑的 prefab 将自动附加并插入到 Player 脚本内的 _weaponPrefab 字段中。
在我的播放器脚本下方:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
[SerializeField] private float _speed = 5.0f;
[SerializeField] private float _fireRate = 0.2f;
private bool _canFire = true;
[SerializeField] private GameObject _weaponPrefab; <- to populate runtime
// Use this for initialization
void Start ()
{
transform.position = Vector3.zero;
}
// Update is called once per frame
void Update ()
{
if (Input.GetKeyDown(KeyCode.Space) && _canFire)
StartCoroutine(Shoot());
}
void OnTriggerEnter2D(Collider2D other)
{
//here i don't know how to continue.
}
public IEnumerator Shoot()
{
_canFire = false;
Instantiate(_weaponPrefab, transform.position + new Vector3(0, 1, 0), Quaternion.identity);
yield return new WaitForSeconds(_fireRate);
_canFire = true;
}
}
编辑:我刚刚写了一条评论,说明我不知道该怎么做。
【问题讨论】:
-
问题出在哪里?
-
碰撞时变量获取游戏对象的引用,不好!因为如果我销毁对象,我的脚本中会出现 Missing 游戏对象。
-
嗯,你可以在这里做的是,当它与武器发生碰撞时,你可以将
prefab weapon的位置设置为_weaponPrefab. -
@ErnestoCampese 在销毁之前将其实例化。将其设置为禁用。需要时激活它。
-
我不能在变量中实例化一个对象,可以吗?所以我应该这样做:_weaponPrefab = Instantiate(other.gameObject) ??
标签: c# unity3d collision-detection