新建空物体,命名为 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);
}
}
运行项目
此时,道具可以被玩家“吃掉”
网友评论