【发布时间】:2023-01-11 02:41:55
【问题描述】:
我是 Unity 和 Stackoverflow 的新手。需要你的帮助,因为我陷入了下面提到的这种情况。 当我产生我的弹丸(子弹)时,它应该在玩家的当前位置实例化但它没有改变。子弹仅从中心生成(而不是从玩家的位置生成)。请指教。 image is for reference
SpawnobjectController 脚本
public class SpawnobjectController : MonoBehaviour
{
[SerializeField]
GameObject projectilereference;
[SerializeField]
GameObject enemyreference;
[SerializeField]
GameObject playerreference;
void Start()
{
StartCoroutine(Enemycoroutine());
StartCoroutine(ProjectileCoroutine());
}
void SpawnProjectile()
{
Instantiate(projectilereference, new Vector3(playerreference.transform.position.x,projectilereference.transform.position.y,0.0f), Quaternion.identity);
}
IEnumerator ProjectileCoroutine()
{
while (true)
{
SpawnProjectile();
yield return new WaitForSeconds(2.0f);
}
}
IEnumerator Enemycoroutine()
{
while (true) {
SpawnEnemy();
yield return new WaitForSeconds(1.0f);
}
}
void SpawnEnemy()
{
Instantiate(enemyreference, enemyreference.transform.position, Quaternion.identity);
}
}
玩家控制器脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
float _horizontalAxisPlayer;
float _playerSpeed = 5f;
float _maxXBoundry = 2.31f;
void Start()
{
}
void Update()
{
ControlPlayerBoundries();
PlayerMovement();
}
void PlayerMovement()
{
_horizontalAxisPlayer = Input.GetAxis("Horizontal")*_playerSpeed*Time.deltaTime;
transform.Translate(new Vector3(_horizontalAxisPlayer, 0.0f, 0.0f));
}
void ControlPlayerBoundries()
{
if (transform.position.x>_maxXBoundry)
{
transform.position = new Vector3(_maxXBoundry,transform.position.y,0.0f);
}
else if (transform.position.x<-_maxXBoundry)
{
transform.position = new Vector3(-_maxXBoundry, transform.position.y, 0.0f);
}
}
}
敌人控制器
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyController : MonoBehaviour
{
[SerializeField]
private float enemeySpeed = 2f;
void Start()
{
}
void Update()
{
transform.Translate(Vector3.down * enemeySpeed * Time.deltaTime);
}
}
弹丸控制器脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ProjectileController : MonoBehaviour
{
[SerializeField]
private GameObject Playerref;
[SerializeField]
private float projectile_speed = 2f;
void Start()
{
}
void Update()
{
// print(Playerref.transform.position);
}
private void LateUpdate()
{
transform.Translate(new Vector3(transform.position.x, 0.5f) * projectile_speed * Time.deltaTime);
}
}
【问题讨论】:
-
SpawnProjectile正在使用来自播放器的x和y,而不是x和z。yup,所以尝试使用玩家的x和z来匹配玩家的位置,并使用正值y来设置子弹开始的高度。 -
@ps2goat 首先,非常感谢您的及时回复。我如下更改了 Spawnprojectile 方法:但仍然得到相同的结果。子弹仅从中心生成。抱歉,如果我误解了您的回答请求您提供帮助。
void SpawnProjectile() { Instantiate(projectilereference, new Vector3(playerreference.transform.position.x,projectilereference.transform.position.y,playerreference.transform.position.z), Quaternion.identity); } -
您的 spawn 对象使用播放器作为 x,但使用预制件作为 y。所以可能为零。
-
嗨@BugFinder,谢谢。您能否帮我解决一下我需要在此代码中进行哪些更改,以便获得预期的结果。请指教。
标签: unity3d game-development unityscript