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

Unity 小功能

1.物体a看向物体b方向,而忽略b的高度

   private void LookTargetDirection(Transform target)
    {
        var dic = (target.position - transform.position).normalized;
        dic.y = 0;
        if (dic != Vector3.zero)
        {
            Quaternion targetRotation = Quaternion.LookRotation(dic);
            transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime * 20f); //看向目标
        }
    }

2.延迟调用方法

  public void WaitActionTime(float timer, Action act)
    {
        StartCoroutine(DelayAction(timer, act));
    }

    public IEnumerator DelayAction(float timer, Action callback)
    {
        yield return new WaitForSeconds(timer);

        callback?.Invoke();

    }

3.代码指定动画添加事件

  public void GetAnim(string aniName)
    {
        // 获取动画控制器中的所有动画剪辑
        RuntimeAnimatorController runtimeController = ani.runtimeAnimatorController;
        if (runtimeController == null)
        {
            Debug.LogError("Animator Controller 未找到!");
            return;
        }

        AnimationClip[] animationClips = runtimeController.animationClips;
        if (animationClips == null || animationClips.Length == 0)
        {
            Debug.LogError("未找到动画剪辑!");
            return;
        }

        // 遍历动画剪辑
        foreach (AnimationClip clip in animationClips)
        {
            Debug.Log("找到动画剪辑: " + clip.name);

            // 如果找到目标动画剪辑
            if (clip.name == aniName)
            {
                // 添加动画事件
                AddEventToClip(clip);
                Debug.Log("已为动画剪辑 " + clip.name + " 添加动画事件");
            }
        }
    }

    // 添加动画事件
    void AddEventToClip(AnimationClip clip)
    {
        // 创建动画事件
        AnimationEvent animationEvent = new AnimationEvent
        {
            time = 0.7f, // 事件触发时间(秒)
            functionName = "OnAnimationEvent", // 回调函数名称
            stringParameter = "Hello from Animation Event!" // 传递的参数
        };

        // 将事件添加到动画剪辑
        clip.AddEvent(animationEvent);
    }

    // 动画事件回调函数
    void OnAnimationEvent(string message)
    {
        Debug.Log("动画事件触发: " + message);
        StoneMove();
    }

4.距离范围检测

  bool IsTargetInRange(float range)
    {
        float distance = Vector3.Distance(transform.position, target.position);
        return distance <= range;
    }

5.编辑器选中物体并绘制范围线条

  void OnDrawGizmosSelected()
    {
        Gizmos.color = Color.red; // 设置 Gizmos 的颜色
        Gizmos.DrawWireSphere(transform.position, range); // 绘制一个半径为 range 米的线框球体

    }

6.范围内施加爆炸力

   void Explode()
    {
        // 检测以物体为中心,半径为 explosionRadius 的周围所有碰撞体
        Collider[] colliders = Physics.OverlapSphere(transform.position, explosionRadius);

        foreach (Collider collider in colliders)
        {
            Rigidbody rb = collider.GetComponent<Rigidbody>();  // 获取碰撞体的 Rigidbody 组件
        
                // 对周围物体施加爆炸力
                rb.constraints = RigidbodyConstraints.None;
                rb.useGravity = true;
                rb.AddExplosionForce(100, transform.position, 10, 1, ForceMode.Impulse);
   
          
        }
    }

相关文章:

  • CMD命令大全
  • 算阶,jdk和idea的安装
  • 最近逐笔成交
  • 【折线图 Line】——21
  • 数据开发岗位: 面试测试题(2025年)
  • 信息系统项目管理师--整合管理
  • C++ 数据结构详解及学习规划
  • istio入门到精通-2
  • 16-torch.autograd.Function说明
  • 【PostgreSQL】如何免密使用PostgreSQL数据库内置工具
  • 002-Boost共享内存的使用
  • C语言-函数指针与指针函数的区别
  • ChatGPT结合DeepSeek新式文献获取+文献拆解流程分享!学术论文轻松上岸!
  • SCI1区TOP:自适应学习粒子群算法SLPSO,深度解析+性能实测
  • 【孟德尔随机化】PhenoScanner不能用的,替代方法
  • PPT 技能:巧用 “节” 功能,让演示文稿更有序
  • 使用 Arduino 的 WiFi 控制机器人
  • 【人工智能】【Python】在Scikit-Learn中使用KNN(K最近邻算法)
  • Ruoyi+uniapp+websocket点对点和广播通知消息
  • 分享几个论文校对相关的deepseek提示词
  • 国台办:不管台湾地区领导人讲什么,都改变不了台湾是中国一部分的地位和事实
  • 王毅将出席《关于建立国际调解院的公约》签署仪式
  • 中国戏剧梅花奖终评结果公示,蓝天和朱洁静等15名演员入选
  • 河南通报部分未检疫生猪流入:立案查处,涉案猪肉被封存
  • 上千螺母引发的枪支散件案:五金厂老板的儿子被诉,律师作无罪辩护
  • 南京艺术学院博导、雕塑家尹悟铭病逝,年仅45岁