如何减少与敌人碰撞的伤害

时间:2021-01-12 05:09:34

标签: c# unity3d collider

嗨,我对 unity 和 C# 很陌生,所以非常感谢任何帮助!我试图让我的敌人(预制件名为雪人)和我的玩家(预制件名为圣诞老人)发生碰撞。发生这种情况时,玩家应该在其健康栏中失去伤害。健康栏出现了,但我对如何让它在与雪人相撞时失去健康感到迷茫。

脚本如下:

using UnityEngine;
using System.Collections;
using Mirror;
using UnityEngine.UI;

public class Player : NetworkBehaviour {
    CharacterController characterController;

    public float speed = 6.0f;
    public float jumpSpeed = 8.0f;
    public float gravity = 20.0f;
    public int maxHealth = 30;
    public int currentHealth;
    //private HealthBar healthBar;
    private Vector3 moveDirection = Vector3.zero;
    
    void TakeDamage(int damage) {
        currentHealth -= damage;
        FindObjectOfType<HealthBar>().SetHealth(currentHealth);
        // healthBar.SetHealth(currentHealth);
    }

    void Start() {
        characterController = GetComponent<CharacterController>();
        currentHealth = maxHealth;
        FindObjectOfType<HealthBar>().SetMaxHealth(maxHealth);
        // healthBar.SetMaxHealth(maxHealth);
    }

    void Update() {
        if (isLocalPlayer) {
            if (characterController.isGrounded) {
                // We are grounded, so recalculate
                // move direction directly from axes
                moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0.0f, Input.GetAxis("Vertical"));
                moveDirection *= speed;

                if (Input.GetButton("Jump")) {
                    moveDirection.y = jumpSpeed;
                }
            }
            // if ()
            //  {
            //     TakeDamage (10);
            //  }
            void OnCollisionEnter(Collision collision) {
                TakeDamage (10);
            }
            moveDirection.y -= gravity * Time.deltaTime;

            characterController.Move(moveDirection * Time.deltaTime);
            transform.rotation = Quaternion.LookRotation(moveDirection);
        }

        void TakeDamage(int damage) {
            currentHealth -= damage;
            FindObjectOfType<HealthBar>().SetHealth(currentHealth);
            // healthBar.SetHealth(currentHealth);
        }
    }

    public override void OnStartLocalPlayer() {
        Camera.main.GetComponent<CameraFollow>().setTarget(gameObject.transform);
    }
}

1 个答案:

答案 0 :(得分:0)

const importTables = [ "Macquarie University course.csv", "Australia National University courses.csv", "UTS courses.csv", "UNSW courses.csv", "Western University of Sydney courses.csv" ] const Importdatamultiplefiles = async function () { await Promise.all(importTables.map(CourseInformation => importdata(CourseInformation, courseParams.TableName))); return; } Importdatamultiplefiles(); TakeDamage 移动到类作用域。另外我建议暂时删除网络功能。建议的代码如下:

OnCollisionEnter

首先从 using UnityEngine; using System.Collections; using Mirror; using UnityEngine.UI; public class Player : Monobehaviour { CharacterController characterController; public float speed = 6.0f; public float jumpSpeed = 8.0f; public float gravity = 20.0f; public int maxHealth = 30; public int currentHealth; //private HealthBar healthBar; private Vector3 moveDirection = Vector3.zero; void Start() { characterController = GetComponent<CharacterController>(); currentHealth = maxHealth; FindObjectOfType<HealthBar>().SetMaxHealth(maxHealth); // healthBar.SetMaxHealth(maxHealth); } void Update() { if (isLocalPlayer) { if (characterController.isGrounded) { // We are grounded, so recalculate // move direction directly from axes moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0.0f, Input.GetAxis("Vertical")); moveDirection *= speed; if (Input.GetButton("Jump")) { moveDirection.y = jumpSpeed; } } // if () // { // TakeDamage (10); // } moveDirection.y -= gravity * Time.deltaTime; characterController.Move(moveDirection * Time.deltaTime); transform.rotation = Quaternion.LookRotation(moveDirection); } } void OnCollisionEnter(Collision collision) { TakeDamage (10); } void TakeDamage(int damage) { currentHealth -= damage; FindObjectOfType<HealthBar>().SetHealth(currentHealth); // healthBar.SetHealth(currentHealth); } public void Start() { Camera.main.GetComponent<CameraFollow>().setTarget(gameObject.transform); } } 中删除 OnCollisionEnterTakeDamage,您需要它们在类范围内。

另一方面要考虑代码格式以提高代码可读性。如果格式混乱且代码不可读,您就会劝阻潜在的帮助者来帮助您!祝你好运