Unity传送脚本报错:当前上下文中不存在final_Distance变量
Unity传送功能坐标获取报错的修复方案
错误原因拆解
final_Distance是Mouse_Radius类中Update方法的局部变量,仅在方法内部有效,外部类根本访问不到。- 你把Unity自带的
Update生命周期方法当成普通方法调用,还传了个未定义的参数,这完全不符合Unity的调用规则。 - 如果
Teleport和Mouse_Radius脚本没挂在同一个游戏对象上,GetComponent<Mouse_Radius>()会返回空值,后续调用直接报错。
第一步:修改Mouse_Radius类,暴露传送坐标
把final_Distance改成类的公共成员变量,让外部能直接读取:
using UnityEngine; public class Mouse_Radius : MonoBehaviour { public GameObject Player; public float radius; // 把局部变量升级为类的公共成员 public Vector2 final_Distance; void Start() { Cursor.visible = false; } // 保留Unity原生Update方法,不要改返回值和参数 void Update() { Vector2 Mouse_Cord = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y)); Vector2 Player_Coord = Player.transform.position; Vector2 Player_Cursor_Distance = Mouse_Cord - Player_Coord; Vector2 dir = Player_Cursor_Distance.normalized; Vector2 cursorVector = dir * radius; // 赋值给类成员变量 final_Distance = Player_Coord + cursorVector; transform.position = final_Distance; } private void OnDrawGizmosSelected() { UnityEditor.Handles.DrawWireDisc(transform.parent.position, Vector3.back, radius); } }
第二步:修复Teleport类的调用逻辑
修正调用方式,直接读取Mouse_Radius的成员变量,同时优化地面检测逻辑:
using UnityEngine; public class Teleport : MonoBehaviour { private CharacterController2D characterController2D; private Mouse_Radius MR; public bool canTeleport = true; void Awake() { characterController2D = GetComponent<CharacterController2D>(); // 注意:如果Mouse_Radius在其他对象上,换成FindObjectOfType或者Inspector拖拽赋值 MR = GetComponent<Mouse_Radius>(); } void FixedUpdate() { if (canTeleport && Input.GetMouseButtonDown(0)) { T_Port(); } else { // 简化逻辑:落地才能重新传送 canTeleport = characterController2D.m_Grounded; } } public void T_Port() { // 直接读取Mouse_Radius的传送坐标 transform.position = MR.final_Distance; canTeleport = false; } }
额外注意点
- 确保
Mouse_Radius脚本挂在显示传送位置的GameObject上,并且Player变量已在Inspector中拖入正确对象。 - 如果两个脚本不在同一个对象,别用
GetComponent,改用FindObjectOfType<Mouse_Radius>()或者手动在Inspector给MR变量赋值。 - 原代码里
screenPosition和worldPosition没用到,可按需删除。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

