Unity 我可以从可编写脚本的对象实例化游戏对象吗?
Unity can I instantiate a game object from a scriptable object?
我希望每把弓射出我在创建时在 SO 中设置的不同箭。我需要每把弓来射击 SO 中分配的箭头预制件。
WeaponConfig 有 [SerializeField] public GameObject projectile;
字段,我希望能够在其中换出不同的箭,这样每个新武器都可以发射不同的箭,我将在检查器中设置这些箭。
拍摄脚本:
public void ShootingArrows()
{
var screenCam = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector3 worldMousePos = screenCam;
// Direction of mouse to player
Vector2 direction = (Vector2)((worldMousePos - firePoint.position));
direction.Normalize();
// Creates the arrow locally
GameObject arrow = (GameObject)Instantiate (
arrowPrefab,
firePoint.position + (Vector3)( direction * 0.5f),
firePoint.rotation);
FindObjectOfType<AudioManager>().Play("BowShoot");
// Adds velocity to the arrow
arrow.GetComponent<Rigidbody2D>().velocity = direction * arrowForce;
// Rotate arrow based on position from player to cursor
angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg - 90f;
arrow.transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.AngleAxis(angle, Vector3.forward), 1000 * Time.deltaTime);
}
在我的 Instantiate 中,我调用了 arrowPrefab
,它被设置为脚本顶部的游戏对象。
我要将其更改为什么,以实例化预期的射弹?
如果我将其更改为下面的代码,则表示它没有对象引用。
GameObject arrow = (GameObject)Instantiate (
WeaponConfig.projectile,
firePoint.position + (Vector3)( direction * 0.5f),
firePoint.rotation);
我在检查器中的射弹槽中填入了我想要发射的预期箭头。每个人都选择了不同的预制件。如何在 SO 中实例化分配的箭头?
好吧而不是到目前为止
public GameObject arrowPrefab;
你需要有一个
public WeaponConfig config:
字段,在此处引用您的 Bow
资产,然后执行
GameObject arrow = Instantiate (
config.projectile,
firePoint.position + (Vector3)(direction * 0.5f),
firePoint.rotation);
我希望每把弓射出我在创建时在 SO 中设置的不同箭。我需要每把弓来射击 SO 中分配的箭头预制件。
WeaponConfig 有 [SerializeField] public GameObject projectile;
字段,我希望能够在其中换出不同的箭,这样每个新武器都可以发射不同的箭,我将在检查器中设置这些箭。
拍摄脚本:
public void ShootingArrows()
{
var screenCam = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector3 worldMousePos = screenCam;
// Direction of mouse to player
Vector2 direction = (Vector2)((worldMousePos - firePoint.position));
direction.Normalize();
// Creates the arrow locally
GameObject arrow = (GameObject)Instantiate (
arrowPrefab,
firePoint.position + (Vector3)( direction * 0.5f),
firePoint.rotation);
FindObjectOfType<AudioManager>().Play("BowShoot");
// Adds velocity to the arrow
arrow.GetComponent<Rigidbody2D>().velocity = direction * arrowForce;
// Rotate arrow based on position from player to cursor
angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg - 90f;
arrow.transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.AngleAxis(angle, Vector3.forward), 1000 * Time.deltaTime);
}
在我的 Instantiate 中,我调用了 arrowPrefab
,它被设置为脚本顶部的游戏对象。
我要将其更改为什么,以实例化预期的射弹?
如果我将其更改为下面的代码,则表示它没有对象引用。
GameObject arrow = (GameObject)Instantiate (
WeaponConfig.projectile,
firePoint.position + (Vector3)( direction * 0.5f),
firePoint.rotation);
我在检查器中的射弹槽中填入了我想要发射的预期箭头。每个人都选择了不同的预制件。如何在 SO 中实例化分配的箭头?
好吧而不是到目前为止
public GameObject arrowPrefab;
你需要有一个
public WeaponConfig config:
字段,在此处引用您的 Bow
资产,然后执行
GameObject arrow = Instantiate (
config.projectile,
firePoint.position + (Vector3)(direction * 0.5f),
firePoint.rotation);