飞雷神苦无(U7 LWRP)

飞雷神苦无(U7 LWRP)

U7 LWRP兼容版!传送苦无!丢弃这把武器即可瞬移至其落点。注意投掷位置,否则可能当场暴毙。使用说明详见详情描述

武器

  • 使用动作按钮(法术选择器按钮)在不同模式之间切换。
  • 普通模式:投掷苦无,传送到其落点位置。
  • 替代模式:苦无上的文字将变为黄色。苦无将粘附在它碰撞到的任何表面上。尝试用心灵传动移动它来传送到其位置。如果你在附近,心灵传动将照常工作。

代码。如果你想要它被注释,请在评论中告诉我。

public class ItemTeleportKunai : MonoBehaviour
    {
        受保护的物品项;
        public Collider 刀刃碰撞器;
        public Transform 玩家变换;
        public Transform 苦无变换;
        private Transform 头部变换;
        public float 初始高度;
        私有 Vector3 传送位置;
        public float smallStep = 0.3f;
        public MeshRenderer 网格渲染器;
        颜色 初始颜色;
        public bool isTeleporting = false;
        public bool 可传送 = false;
        public bool isDelayedMode = false;
        public float 传送半径 = 2f;
        protected void Awake()
        {
            item = this.GetComponent<Item>();
            网格 = this.GetComponentsInChildren<MeshRenderer>()[5];
            初始颜色 = 网格.材质.颜色;
 
            刀刃碰撞器 = item.GetComponentsInChildren<Collider>()[1];
 
            playerTransform = Creature.player.transform;
            headTransform = Player.local.head.gameObject.transform;
            苦无变换 = 物品.变换;
            初始高度 = 苦无变换.位置.y;
            item.OnCollisionEvent += OnKunaiCollisionEvent;
            item.OnGrabEvent += OnKunaiGrabEvent;
            item.OnTeleGrabEvent += OnKunaiTeleGrab;
            item.OnHeldActionEvent += OnKunaiHeldAction;
        }
        void 当苦无持有时执行动作(交互器 交互器, 手柄 手柄, 可交互对象.动作 动作)
        {
            如果(动作 == 可交互对象.动作.备用使用开始 && !是延迟模式)
            {
                延迟模式 = 开启;
                mesh.material.color = Color.yellow;
            } else if(动作 == 可交互对象.动作.备用使用开始 & 是延迟模式)
            {
                延迟模式 = 关闭;
                mesh.material.color = 初始颜色;
            }
        }
        void 当苦无碰撞事件(ref 碰撞结构体 collisionInstance)
        {
            如果(碰撞实例.源碰撞体 == 刀刃碰撞体 || 碰撞实例.目标碰撞体 == 刀刃碰撞体)
            { 
                如果(物品.正在飞行)
                {
                    如果(是延迟模式)
                    {
                        可传送 = true;
                        如果(碰撞实例.目标类型 != 碰撞结构体.目标类型.NPC)
                        {
                            item.rb.isKinematic = true;
                        }
 
                    }
                    否则
                    {
                        传送();
                    }
                }
            } 
        }
        void 当苦无远程抓取(Handle 句柄, Telekinesis 远程抓取器)
        {
            如果 ((Vector3.Distance(headTransform.position, kunaiTransform.position) < 传送半径))
            {
                item.rb.isKinematic = false;
                可传送 = false;
            }
            如果(可传送且为延迟模式)
            {
                传送();
            }
        }
        void 当苦无抓取事件(Handle handle, Interactor interactor)
        {
            item.rb.isKinematic = false;
            可传送 = false;
        }
        void FixedUpdate()
        {
 
        }
        void 传送()
        {
            传送位置 = 苦无变换.位置 - 玩家变换.位置;
            传送位置.y = 0f;
            传送位置.归一化();
            传送位置 *= 小步长;
 
            playerTransform.position = kunaiTransform.position - teleportLocation;
            生物.玩家.身体.玩家.移动到身体(生物.玩家.身体);
        }
    }