当前位置: 首页 > news >正文

日志2025.1.30

日志2025.1.30
1.简略地做了一下交互系统
public class Interactable : MonoBehaviour
{
    private MeshRenderer renderer;
    private Material defaultMaterial;
    public Material highlightMaterial;

    private void Awake()
    {
        renderer = GetComponentInChildren<MeshRenderer>();
        defaultMaterial = renderer.material;
    }

    public virtual void Interaction()
    {
        Debug.Log("www");
    }

    public void HightLightActive(bool active)
    {
        if (active)
        {
            renderer.material = highlightMaterial;
        }
        else
        {
            renderer.material = defaultMaterial;
        }
    }

    protected virtual void OnTriggerEnter(Collider other)
    {
        PlayerInteraction playerInteraction = other.GetComponent<PlayerInteraction>();

        if (playerInteraction == null) return;

        playerInteraction.interactables.Add(this);

        playerInteraction.ChangeClosestInteractable();
    }

    protected virtual void OnTriggerExit(Collider other)
    {
        PlayerInteraction playerInteraction = other.GetComponent<PlayerInteraction>();

        if (playerInteraction == null) return;

        playerInteraction.interactables.Remove(this);

        playerInteraction.ChangeClosestInteractable();
    }
}


public class PlayerInteraction : MonoBehaviour
{
    public List<Interactable> interactables;

    private Interactable closestInteractable;

    private Player player;

    private void Awake()
    {
        player = GetComponent<Player>();
        PlayerControls controls = player.controls;
        controls.Character.Interaction.performed += context => InteractWithClosest();
    }

    private void InteractWithClosest()
    {
        closestInteractable?.Interaction();
    }

    //找到最近的可互动物,并将其高光
    public void ChangeClosestInteractable()
    {
        closestInteractable?.HightLightActive(false);
        closestInteractable = null;

        float closestDistance = float.MaxValue;

        foreach (Interactable interactable in interactables)
        {
            float distance = Vector3.Distance(transform.position, interactable.transform.position);

            if (distance < closestDistance) { 
                closestDistance = distance;
                closestInteractable = interactable;
            }
        }

        closestInteractable?.HightLightActive(true);

    }

}


2.将该交互系统用于拾取武器
public class Pickup_Weapon : Interactable
{
    private PlayerWeaponController playerWeaponController;
    [SerializeField] private Weapon_Data weaponData;


    public override void Interaction()
    {
        base.Interaction();

        playerWeaponController.PickUpWeapon(weaponData);

    }

    protected override void OnTriggerEnter(Collider other)
    {
        base.OnTriggerEnter(other);

        if (playerWeaponController == null)
        {
            playerWeaponController = other.GetComponent<PlayerWeaponController>();
        }

    }

    protected override void OnTriggerExit(Collider other)
    {
        base.OnTriggerExit(other);

    }

}

http://www.lryc.cn/news/529240.html

相关文章:

  • 实战:如何快速让新网站被百度收录?
  • PhotoShop中JSX编辑器安装
  • 01-时间与管理
  • MiniMax-01技术报告解读
  • 多头潜在注意力(MLA):让大模型“轻装上阵”的技术革新——从DeepSeek看下一代语言模型的高效之路
  • 哈希表实现
  • Linux的常用指令的用法
  • Ubuntu安装VMware17
  • 什么是线性化PDF?
  • 每日一题——序列化二叉树
  • Transformer+vit原理分析
  • 「AI学习笔记」深度学习的起源与发展:从神经网络到大数据(二)
  • 【漫话机器学习系列】069.哈达马乘积(Hadamard Product)
  • 2025一区新风口:小波变换+KAN!速占!
  • 相同的树及延伸题型(C语言详解版)
  • 【Redis】 String 类型的介绍和常用命令
  • LLM - 大模型 ScallingLaws 的设计 100B 预训练方案(PLM) 教程(5)
  • Docker/K8S
  • 32、【OS】【Nuttx】OSTest分析(1):stdio测试(二)
  • git push到远程仓库时无法推送大文件
  • Vue.js路由管理与自定义指令深度剖析
  • NVIDIA GPU介绍:概念、序列、核心、A100、H100
  • 【PyTorch】6.张量运算函数:一键开启!PyTorch 张量函数的宝藏工厂
  • C语言练习(31)
  • 什么是长短期记忆网络?
  • git中有关old mode 100644、new mode 10075的问题解决小结
  • Jenkins上生成的allure report打不开怎么处理
  • JSR303校验教学
  • 使用DeepSeek技巧:提升内容创作效率与质量
  • 【第六天】零基础入门刷题Python-算法篇-数据结构与算法的介绍-一种常见的贪心算法(持续更新)