脚本挂载到物体上就成为了类似RigBody和Material这种组件,所以也是可以在其他脚本中调用的;

本文也搭配有视频演示(文章末尾)

开工

1.首先规划一下要实现的功能和思路,比如实现角色的生命值和UI上的血条进行同步的效果

2.新建一个名为Playe的胶囊体,添加RigBody组件和创建一个名为PlayerS的C#脚本,具体看下图或演示视频

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

public class PlayerS : MonoBehaviour {

    public float health = 100;      // 角色健康值
    public float speed = 5;         // 角色移动速度
    private Rigidbody rig;

	// Use this for initialization
	void Start () {
        rig = GetComponent<Rigidbody> ();
	}
	
	// Update is called once per frame
	void Update () {
        rig.velocity = new Vector3(Input.GetAxis("Horizontal")*speed, 0, Input.GetAxis("Vertical")*speed);
	}

    // 添加碰撞检测
    void OnCollisionEnter(Collision col)
    {
        if(col.gameObject.name == "Hurt")
        {
            // 当Player每碰撞一次Hurt的时候,将它的健康值减百分之10;
            if(health > 0)
            {
                health -= 10;
            }
            print("Health = " + health);
        }
    }
}

3.再建一个名为Hurt的Cube物体,不做任何组件和属性的修改

4.到目前为止就实现了下面的GIF图一样的效果,Player每碰撞一次Hurt就会减百分之10的健康值(health)

5.现在再来创建一个Text UI,添加一个名为HealthUI的C#脚本,UI的属性设置看自己习惯

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

public class HealthUI : MonoBehaviour {

    private GameObject player;      // 定义角色
    private PlayerS PlayerS;        // 角色上挂载的脚本
    private float getHealth;        // 定义角色的健康值
    private Text text;      // text UI

	// Use this for initialization
	void Start () {
        player = GameObject.Find("Player");     // 获取角色
        PlayerS = player.GetComponent<PlayerS>();   // 获取角色上的脚本
        text = GetComponent<Text>();        // UI组件
	}
	
	// Update is called once per frame
	void Update () {
        getHealth = PlayerS.health;     // 获取角色健康值
        text.text = getHealth.ToString("0");        // 将 Text UI的值改为角色的健康值
	}
}

6.完工,洗洗睡了!!!

视频

https://www.bilibili.com/video/av20244956/