【发布时间】:2014-03-27 19:31:13
【问题描述】:
我正在 Unity 中处理一些敌方 AI,但是当我尝试实例化单个射弹时,它会在完全相同的位置创建两个。即使实例化被调用一次,也会发生这种情况。
实例化代码:
void Shoot(Vector3 direction){
GameObject EnemyLaser = (GameObject)Instantiate(Resources.Load("EnemyLaser"), FirePosition.transform.position, FirePosition.transform.rotation);
EnemyLaser.renderer.material.color = gameObject.renderer.material.color;
EnemyLaser.rigidbody.velocity = direction * laserPower;
}
触发代码:
void FireRaycast(){
Vector3 direction = transform.TransformDirection(Vector3.forward);
RaycastHit hit;
Debug.DrawRay(transform.position, direction * range);
if(Physics.Raycast(transform.position, direction, out hit, range)){
if(hit.collider.tag == "Player"){
if(currentTime > fireInterval){
Shoot(direction);
currentTime = 0;
}
}
}
currentTime += Time.deltaTime;
}
这会导致多个问题,例如两个射弹由于它们的对撞机而无法移动等......
我尝试使用布尔值来检查该函数是否只被调用一次,但它仍然会创建两个对象。
【问题讨论】:
-
Resources.Load 本身确实已经创建了一个实例。只取它的返回值
-
@Kay 在 GameObject 上使用 Resources.Load 将获得对预制件的引用。但它不会自动实例化它。
-
@esa 感谢您清除此问题,我没有将 Load 与 GameObjects 一起使用,但仅与 TextAssets、图像、...一起使用
-
FireRaycast 多久调用一次?你确定它只被调用一次吗?在 Shoot 中设置断点会发生什么?