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

unity 玩家和炸弹切线计算方式

脚本挂在炸弹上!

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

public class TargetDetaction : MonoBehaviour
{


    private Transform PlayerTF;
    private Transform bomb;
    private float radius;
    private string Player = "Player";


    void Start()
    {
        bomb = this.gameObject.transform;
        GameObject PlayerGO = GameObject.FindWithTag(Player);
        PlayerTF = PlayerGO.transform;
        SphereCollider capsuleCollider = PlayerGO.transform.GetComponent<SphereCollider>();
        radius = capsuleCollider.radius;
       
    }


    private Vector3 LeftTarget, RightTarget;
    /// <summary>
    /// 计算切点
    /// </summary>
    private void CaculateTarget()
    {
        //向量加减的位置在原点位置
        Vector3 PlayertoExplosionBomo = this.transform.position - PlayerTF.position;
       // Debug.DrawLine(Vector3.zero, PlayertoExplosionBomo);
       // Debug.DrawLine(Vector3.zero, this.transform.position);
       // Debug.DrawLine(Vector3.zero, PlayerTF.position);
        //归一化后* 半径  获取 人物到炸弹的半径向量
        Vector3 PlayertoExplosionBomoDircetion = PlayertoExplosionBomo.normalized * radius;//归一化
       // Debug.DrawLine(Vector3.zero, PlayertoExplosionBomoDircetion*3,Color.cyan);                                                                                //math.acos 求反余弦 (临边/chang) 弧度值-> 弧度转角度
        float angle = Mathf.Acos(radius / PlayertoExplosionBomo.magnitude) * Mathf.Rad2Deg;
        //向量旋转一个指定的欧拉角
        LeftTarget = PlayerTF.position+ Quaternion.Euler(0, -angle, 0) * PlayertoExplosionBomoDircetion;
        RightTarget = PlayerTF.position+ Quaternion.Euler(0, angle, 0) * PlayertoExplosionBomoDircetion;

        Debug.DrawLine(Vector3.zero, Quaternion.Euler(0, -angle, 0) * PlayertoExplosionBomoDircetion * 2, Color.cyan);
        Debug.DrawLine(Vector3.zero, Quaternion.Euler(0, angle, 0) * PlayertoExplosionBomoDircetion * 2, Color.cyan);
        Debug.DrawLine(Vector3.zero, PlayerTF.position, Color.cyan);
        Debug.DrawLine(Vector3.zero, LeftTarget);
    }
    private void Detchtion()
    {
        CaculateTarget();
        Debug.DrawLine(this.transform.position, LeftTarget, Color.red);
        Debug.DrawLine(this.transform.position, RightTarget, Color.blue);
        Debug.DrawLine(this.transform.position, PlayerTF.position, Color.yellow);

    }
    // Update is called once per frame
    void Update()
    {
        Detchtion();
    }
}


http://www.kler.cn/a/393945.html

相关文章:

  • 【Excel】身份证号最后一位“X”怎么计算
  • Java 多线程(三)—— 死锁
  • 手动实现promise的all,race,finally方法
  • react 中 useContext Hook 作用
  • redis7.x源码分析:(1) sds动态字符串
  • 文件输入输出——NOI
  • python 爱心邮件代码
  • 二叉树的遍历(手动)
  • 2025年法定节假日日历
  • 【Docker】Docker Compose部署单节点多容器应用
  • 从零开始的 Hugging Face 项目:我的首个在线 SQL 查询工具之旅20241111
  • 将python下载的依赖包传到没网的服务器
  • Docker基础概念
  • sentinel服务保护
  • SQL面试题——蚂蚁SQL面试题 会话分组问题
  • 【C语言】指针数组和数组指针的区别
  • 【MinIO】Python 运用 MinIO 实现简易文件系统
  • 【MySQL基础刷题】总结题型(三)
  • 前端入门一之ES6--递归、浅拷贝与深拷贝、正则表达式、es6、解构赋值、箭头函数、剩余参数、String、Set
  • 乐维网管平台(六):如何正确管理设备端口
  • 矩阵中的路径(dfs)-acwing
  • spring boot项目打成war包部署
  • 重构代码之用多态替代条件逻辑
  • 设计模式设计模式
  • 释放 PWA 的力量:2024 年的现代Web应用|React + TypeScript 示例
  • HarmonyOS App 购物助手工具的开发与设计