我正在尝试开发一款游戏,您需要躲避掉落的物体。我造成了危险,但似乎危险“克隆”的行为有所不同。
当危害到达需要消除的平台时,我制作了一个碰撞脚本。这适用于危险对象,但不适用于掉落的危险克隆对象。
如您在第一个屏幕截图中所见,红色圆圈的行为
喜欢它过去。但是蓝色圆圈(克隆)掉落一次
对象。
如您在第二张屏幕截图中所见,红色圆圈消失了,
因为它击中了平台。但是蓝色仍然落在右边
通过。
提前致谢!
在u下方可以找到Collision脚本,在下面是Hazard Spawn脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HazardCollisionFunctions : MonoBehaviour {
#region Variables
//Public
//Private
#endregion
#region UnityFunctions
void Start()
{
}
void Update()
{
}
#endregion
private void OnCollisionEnter(Collision collision)
{
if(collision.gameObject.tag == "platform")
{
this.gameObject.SetActive(false);
}
if(collision.gameObject.tag == "Player")
{
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SpawnHazards : MonoBehaviour {
#region Variables
//Public
//Private
[SerializeField]
public float minX = 0.0f;
[SerializeField]
public float maxX = 0.0f;
[SerializeField]
private GameObject[] hazards; //potential array of hazards
[SerializeField]
private float timeBetweenSpawns = 0.0f;
private bool canSpawn = false;
private int amountOfHazardsToSpawn = 0;
private int hazardToSpawn = 0;
#endregion
#region UnityFunctions
public void Start()
{
canSpawn = true; //Temp start
}
public void Update()
{
if(canSpawn == true)
{
StartCoroutine("GenerateHazard");
}
}
#endregion
private IEnumerator GenerateHazard()
{
canSpawn = false;
timeBetweenSpawns = Random.Range(0.5f, 2.0f); //Testing values
amountOfHazardsToSpawn = Random.Range(1, 5); //Testing values
for(int i = 0; i < amountOfHazardsToSpawn; i ++)
{
Vector3 spawnPos = new Vector3(Random.Range(minX, maxX), 8.0f, 0.0f); //Gen spawnpoint for the hazard
Instantiate(hazards[hazardToSpawn], spawnPos, Quaternion.identity); //Spawn the hazard
}
yield return new WaitForSeconds(timeBetweenSpawns);
canSpawn = true;
}
}
最佳答案
OnCollisionEnterOnCollisionEnter
将Collision
对象作为参数,并且要求附加的isTrigger
组件的Collider
属性为FALSE。
void OnCollisionEnter(Collision collision)
{
foreach (ContactPoint contact in collision.contacts)
{
Debug.DrawRay(contact.point, contact.normal, Color.white);
}
}
OnTriggerEnter
OnTriggerEnter
将Collider
对象作为参数,并且要求附加的isTrigger
组件的Collider
属性为TRUE。void OnTriggerEnter(Collider other)
{
if (other.CompareTag("CheckPoint"))
{
Destroy(other.gameObject);
}
}
如果要从
prefab
实例化对象,请确保prefab
具有必需的组件(rigidbody
/ collider
)和属性以实现所需的行为。
要检测碰撞/触发,至少一个对象必须具有一个
物理成分(
Rigidbody
)刚体必须附着在运动物体上。
希望这可以帮助 :)