我在使用Unity时遇到了一些问题。我试图让它成为如果敌人与玩家发生碰撞,玩家就会失去健康点。我的C#代码如下。
在你看代码之前,我想说敌人是刚体,这样物体子弹就会影响它们。我制作了一个额外的太空舱作为玩家身体的一部分,可以是一个僵硬的身体,以便代码可以检测到碰撞。你觉得那会有用吗?我不确定刚体是否更容易发现另一个刚体碰撞,或者它是否不关心。public class playerhealth : MonoBehaviour {
private int curHealth;
private int playerLives;
public GUIText winText;
public GUIText healthText;
public GUIText livesText;
void Start() {
curHealth = 3;
playerLives = 3;
SetHealthText();
SetLivesText();
winText.text = "";
}
void FixedUpdate()
{
// where physics codes go
}
// HERE'S WHERE THE COLLISIONS STUFF IS
void OnCollisionEnter(Collider rigidbody) {
if (rigidbody.gameObject.tag == "Enemy") {
curHealth = curHealth - 1;
SetHealthText();
}
if (rigidbody.gameObject.tag == "reloader") {
playerLives = playerLives - 1;
SetLivesText();
}
}
// setting GUI TEXT and reloading level
void SetHealthText() {
healthText.text = "Health Points: " + curHealth.ToString();
if (curHealth <= 0) {
Application.LoadLevel("shootingworld");
playerLives = playerLives - 1;
}
if(curHealth >= 10) {
playerLives+= 1;
}
}
void SetLivesText() {
livesText.text = "Lives: " + playerLives.ToString();
if (playerLives <= 0) {
winText.text = "GAME OVER";
}
}
}
答案 0 :(得分:1)
你在这里做了一些假设,其中一些是错误的。我会试着指出它们。
将一个RigidBody添加到游戏对象是正确的想法,但它是Collider组件,用于确定对象碰撞的形状和大小。考虑将BoxCollider,SphereCollider或CapsuleCollider添加到两者中。
我认为你在让对象实际碰撞时遇到困难,这可能是解决方案。
此外,
void OnCollisionEnter(Collider rigidbody){
碰撞类包含有关接触点,撞击速度等的信息。
无论如何,你对通过标签比较Collider的游戏对象有了正确的想法。您需要做的就是在编辑器中或通过代码在对象上强制执行标记。
答案 1 :(得分:0)
你正在使用这个:
void OnCollisionEnter(Collider collision) {
}
Collider用于Ontrigger ......
试试这个:
void OnCollisionEnter(Collision collision) {
}
希望这有帮助! :)
答案 2 :(得分:0)
你试着这可能也有帮助
void OnCollisionEnter(Collision collision)
{
}
文档是:
http://docs.unity3d.com/Documentation/ScriptReference/Collider.OnCollisionEnter.html