Unity:玩家在物体碰撞时死亡

时间:2016-11-28 00:32:55

标签: c# android unity3d unity5

我非常接近完成我的游戏,我发布的每个代码都运行良好,但我希望我的玩家能够死掉它是否与盒子(这是敌人)相撞。但是,我试图做一些研究,我似乎无法找到解决方案。我该怎么做呢?这是播放器的代码(JugadorScript.cs):

using UnityEngine;
using System.Collections;

public class JugadorScript : MonoBehaviour
{

    public float velocidad = -10f;
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

    }
    public void moverIzquierda()
    {
        transform.Translate(Vector2.right * velocidad * Time.deltaTime);
        transform.eulerAngles = new Vector2(0, 0);
    }
    public void moverDerecha()
    {
        transform.Translate(Vector2.right * velocidad * Time.deltaTime);
        transform.eulerAngles = new Vector2(0, 180);
    }
}

EnemySpawner.cs代码,效果很好:

using UnityEngine;
using System.Collections;
using System;

public class EnemySpawner : MonoBehaviour
{

    public GameObject BlockPrefab;

    float maxSpawnRateInSeconds = 2.5f;

    void Start()
    {
        Invoke("SpawnEnemy", maxSpawnRateInSeconds);
        InvokeRepeating("IncreaseSpawnRate", 0f, 30f);
    }

    // Update is called once per frame
    void Update()
    {

    }
    void SpawnEnemy()
    {
        Vector2 min = Camera.main.ViewportToWorldPoint(new Vector2(0, 0));

        Vector2 max = Camera.main.ViewportToWorldPoint(new Vector2(1, 1));

        GameObject anEnemy = (GameObject)Instantiate(BlockPrefab);
        anEnemy.transform.position = new Vector2(UnityEngine.Random.Range(min.x, max.x), max.y);


        ScheduleNextEnemySpawn();
    }

    void ScheduleNextEnemySpawn()
    {
        float spawnInNSeconds;

        if (maxSpawnRateInSeconds > 1f)
        {
            spawnInNSeconds = UnityEngine.Random.Range(1f, maxSpawnRateInSeconds);
        }
        else
            spawnInNSeconds = 1f;

        Invoke("SpawnEnemy", spawnInNSeconds);
    }

    void IncreaseSpawnRate()
    {
        if (maxSpawnRateInSeconds > 1f)
            maxSpawnRateInSeconds--;

        if (maxSpawnRateInSeconds == 1f)
            CancelInvoke("IncreaseSpawnRate");
    }


}

BlockScript.cs,这是我的敌人脚本:

using UnityEngine;
using System.Collections;

public class BlockScript : MonoBehaviour
{

    private GameObject wayPoint;
    private Vector3 wayPointPos;
    private Rigidbody2D rigidBody2D;
    public bool inGround = true;
    private float jumpForce = 400f;

    private float speed = 6.0f;
    void Start()
    {

        wayPoint = GameObject.Find("wayPoint");
    }

    private void awake()
    {
        rigidBody2D = GetComponent<Rigidbody2D>();
    }


    void Update()
    {

        if (inGround)
        {
            inGround = false;

            rigidBody2D.AddForce(new Vector2(0f, jumpForce));
        }

        wayPointPos = new Vector3(wayPoint.transform.position.x, transform.position.y,
            wayPoint.transform.position.z);

        transform.position = Vector3.MoveTowards(transform.position,
            wayPointPos, speed * Time.deltaTime);

        Vector2 min = Camera.main.ViewportToWorldPoint(new Vector2(0, 0));

        if (transform.position.y < min.y)
        {
            Destroy(gameObject);
        }



    }


}

1 个答案:

答案 0 :(得分:1)

正如您在文档中看到的,您正在寻找的功能是OnCollisionEnter。

查看本教程:

https://unity3d.com/es/learn/tutorials/topics/physics/detecting-collisions-oncollisionenter