簡體   English   中英

每次擊殺敵人如何提高速度?

[英]How do I increase speed every time I kill an enemy?

我正在努力讓每次我殺死一個敵人時,我的玩家的速度都會增加 1。我一直在嘗試這樣做,但我真的不知道我在做什么。 有人可以幫助我嗎?

這是我的玩家移動腳本

using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public float MovementSpeed = 5;
    public float JumpForce = 5;
    private Rigidbody2D _rigidbody;

    private void Start()
    {
        _rigidbody = GetComponent<Rigidbody2D>();
    }

    private void Update()
    {
        //Movement
        var movement = Input.GetAxis("Horizontal");
        transform.position += new Vector3(movement, 0, 0) * Time.deltaTime * MovementSpeed;

        if (Input.GetButtonDown("Jump") && Mathf.Abs(_rigidbody.velocity.y) < 0.001f)
        {
            _rigidbody.AddForce(new Vector2(0, JumpForce), ForceMode2D.Impulse);
        }
    }
}

這是我的敵人腳本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class enemyScript : MonoBehaviour
{
public int health = 100;
    private static float speed;
    private static float jump;

    public void TakeDamage(int damage)
    {
        health -= damage;

        if (health <= 0)
        {
            Die();
            speed += 1.0f;
            jump += 1.0f;
        }
    }

    void Die()
    {
        Destroy(gameObject);
        speed = GetComponent<PlayerMovement>().MovementSpeed;
        jump = GetComponent<PlayerMovement>().JumpForce;
    }
}

抱歉,我的問題沒有提供所有細節,玩家沒有獲得任何速度。 我嘗試使用

GetComponent<PlayerMovement>().MovementSpeed += 1.0f;
GetComponent<PlayerMovement>().JumpForce += 1.0f;

現在我收到此錯誤消息

NullReferenceException:Object 引用未設置為 object 的實例

帶來不便敬請諒解

我假設您想在玩家殺死敵人時增加玩家的跳躍力和速度。 另外,如果您遇到任何錯誤或只是速度沒有增加,您能否詳細說明問題?

請找到 Enemy Script 的內聯響應。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class enemyScript : MonoBehaviour
{
public int health = 100;
private static float speed;//This is enemy speed variable that you have declared
private static float jump;//This is enemy jump variable that you have declared

public void TakeDamage(int damage)
{
    health -= damage;

    if (health <= 0)
    {
        Die();
        //speed += 1.0f; Here you are increasing enemy speed and not playerspeed.
        //jump += 1.0f; Same goes for jump.
    }
}

void Die()
{
    Destroy(gameObject);
    //speed = GetComponent<PlayerMovement>().MovementSpeed; here you are assigning Player movement speed to enemy speed.
    //jump = GetComponent<PlayerMovement>().JumpForce; here you are assigning Player movement jump to enemy jump.

//Instead try
GetComponent<PlayerMovement>().MovementSpeed += 1.0f;
GetComponent<PlayerMovement>().JumpForce += 1.0f;

}
}

你也可以使用

Debug.Log(你的移動速度變量);

檢查玩家速度是否正在增加。

首先,使用GetComponent是沒有意義的,因為PlayerMovement沒有附加到你的敵人對象上。

然后

speed = GetComponent<PlayerMovement>().MovementSpeed;
jump = GetComponent<PlayerMovement>().JumpForce

也是錯誤的方式..從玩家那里獲取價值並將其存儲在敵人的領域有什么用?

如果無論如何只有一個玩家,您可以簡單地使用FindObjectOfType並執行

void Die()
{
    Destroy(gameObject);
    FindObjectOfType<PlayerMovement>().MovementSpeed += 1.0f;
    FindObjectOfType<PlayerMovement>().JumpForce += 1.0f;
}

或者或者使用 Singleton 模式,正如之前提到的文檔所建議的那樣,例如

public class PlayerMovement : MonoBehaviour
{
    public static PlayerMovement Instance { get; private set;}

    private void Awake ()
    {
        if(Instance && Instance!= this)
        {
            Destroy(gameObject);
            return;
        }

        Instance = this;
    }

    ...
}

然后簡單地做

void Die()
{
    Destroy(gameObject);
    PlayerMovement.Instance.MovementSpeed += 1.0f;
    PlayerMovement.Instance.JumpForce += 1.0f;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM