Unity 编写入门项目 roll a ball 之 设置道具(五)

新建空物体,命名为 Stars;新建立方体,命名为 Star


Stars 空物体重置变换值


在 Assert 目录下,新建 Prefab 子目录


Star 立方体转换为预制体,并删除场景中的 Star 立方体

预制体采用单例模式,场景中,多个相同预制体物件,引用相同的数据


新建、编辑 Star 材质


双击打开预制体,并修改变换值、Is Trigger 值

Is Trigger 值为 true,可以防止自身对其他物体 产生作用力


为预制体赋予材质


设置预制体为 不受重力影响的运动刚体

需求一:Star 立方体需要实时旋转
Unity 引擎对动态物体的变换 存在较好的优化,因此,Star 立方体需要设置为刚体。
需求二:Star 立方体不受外力影响
Use Gravity 值为 false:不受重力影响
Is Kinematic 值为 true:开启动力学,使得物体不受力的影响


在 Script 目录下,新建 script 文件,命名为 Rotator,并添加脚本到预制体


双击打开、编辑脚本(Rotator.cs)

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

public class Rotator : MonoBehaviour
{

    // 生命周期函数
    // 触发时机:每帧实时
    void Update()
    {
        float interval = Time.deltaTime;    // 当前帧、上一帧的时间间隔
        transform.Rotate(new Vector3(15, 45, 30) * interval);
    }
}

退出预制体编辑模式


在 Stars 空物体中,添加预制体


复制多个 Star 立方体,并任意编排立方体位置


运行项目

此时,道具还不能被玩家“吃掉”


打开任意一个 Star 立方体的审查面板,新建 Tag,并命名为 Star


设置 Tag 为 Star,并同步配置到其他 Star 立方体中


修改脚本(PlayerController.cs 增加如下代码)

public string tagName = "Star";    // 公开属性,方便在 IDE 修改 tagName 值

// 事件函数,监听是否与 Trigger碰撞体 产生碰撞
void OnTriggerEnter(Collider colliderGameObject)
{
    if(colliderGameObject.gameObject.CompareTag(tagName))
    {
        colliderGameObject.gameObject.SetActive(false);
    }
}

运行项目

此时,道具可以被玩家“吃掉”

你可能感兴趣的:(Unity 编写入门项目 roll a ball 之 设置道具(五))