我正在做一个学校项目,需要帮助我的代码的某个方面。我正在做一个游戏,想包括一个传送移动,这将是通过一个矢量,其Angular 将由鼠标的方向控制的球员。
我计划通过一个单独的GameObject向玩家显示传送的位置,因此需要从一个单独的对象中的类继承信息。这就是错误开始的地方。而不是继承变量final_Distance,这是一个矢量,包含玩家在传送后出现的矢量末端的坐标,出现错误消息说:“final_Distance名称在当前上下文中不存在。在这件事上工作了大约一个小时后,我真的被我应该做什么难住了。我试着在类的开头声明向量,但没有成功,在Awake void中也是如此。我会很感激你的帮助。
以下是我的传送类:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Teleport : MonoBehaviour
{
public Vector2 screenPosition;
public Vector2 worldPosition;
private CharacterController2D characterController2D;
private Mouse_Radius MR;
public bool canTeleport = true;
void Awake()
{
characterController2D = GetComponent<CharacterController2D>();
MR = GetComponent<Mouse_Radius>();
}
void FixedUpdate()
{
if (canTeleport == true && Input.GetMouseButtonDown(0))
{
T_Port();
}
else
{
bool ground_check = characterController2D.m_Grounded;
if (!ground_check && canTeleport == false)
{
canTeleport = false;
}
else
{
canTeleport = true;
}
}
}
public void T_Port()
{
worldPosition = MR.Update(final_Distance);
transform.position = worldPosition;
canTeleport = false;
}
}
这里是负责提供gameobject位置的类,它显示了玩家在传送后的最终位置:
public class Mouse_Radius : MonoBehaviour
{
public GameObject Player;
public float radius;
void Start()
{
Cursor.visible = false;
}
// Update is called once per frame
public 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;
Vector2 final_Distance = Player_Coord + cursorVector;
transform.position = final_Distance;
}
private void OnDrawGizmosSelected()
{
UnityEditor.Handles.DrawWireDisc(transform.parent.position, Vector3.back, radius);
}
}
2条答案
按热度按时间n7taea2i1#
变量 * 在这个上下文中不存在。在
T_Port
方法或其名为final_Distance
的类中没有变量。请注意
Mouse_Radius
中的代码是如何首先 * 创建 * 一个变量,然后 * 使用 * 该变量的:将此与
Teleport
中的代码进行比较,该代码只尝试 * 使用 * 变量,从未 * 创建 * 它:在它被使用之前,它必须存在。因此,目前还不清楚您希望该变量是什么,也不清楚它应该包含什么值。
后退一步。..为什么首先要尝试向
Update
方法发送值?它不期望一个:因此,即使你声明了你的变量,并在使用它之前给它赋值,下一个错误将告诉你,你正在向一个不接受值的方法传递一个值。
由于该方法不接受值,因此不要向其传递值:
这将有一个额外的好处,即纠正试图使用不存在的变量的错误,因为你不再试图使用它。
另外..
Update
方法也不会 * 返回任何内容 *:因此,将其返回值赋给
worldPosition
也会生成错误。删除分配操作:总的来说,
Update
方法不接受任何参数,也不产生任何结果,所以不要尝试向它传递参数,也不要尝试使用它的结果。如果你想传递参数给它和/或使用它的结果,那么首先你需要修改
Update
方法来做你想做的事情,然后你可以调用它来执行那个操作。w8biq8rn2#
要回答为什么
final_Distance
在上下文中不存在的问题,这是因为Teleport
类不能访问该变量-它没有在类定义中定义,或者在Teleport
继承的任何类的定义中定义,并且它没有在T_Port()
方法的作用域中定义。幸运的是,在这种情况下,它不需要。
Mouse_Radius
的Update()
方法不带参数,并且查看它,执行所有计算以获得final_Distance
(仅在该方法的范围内定义,因此仅存在于该方法中)。调用Teleport的T_Port()
中的MR
上的Update()
而不带参数也可以工作,尽管应该注意的是,MonoBehaviour中的Update()
在每帧都被unity调用。由于Mouse_Radius
的Update()
方法中没有检查是否允许心灵传送,因此单位将导致玩家在每一帧都进行心灵传送,无论是否应该。综上所述,将
Mouse_Radius
中的Update()
重命名为类似TeleportPlayer()
的东西,无论是在其定义中还是在Teleport
脚本中的使用,并且在调用它时也不要给予它任何参数,因为它不需要任何参数(像这样-MR.TeleportPlayer();
)。