unity3d - Unity 2020 - 2D 游戏,在使用 Raycast 时出现我的对象无法设置为对象实例的错误
问题描述
我目前正在 Unity 上开发一款基于网格运动的 2D 游戏。我遇到了光线投射系统的问题(我打算用它来检测玩家移动到的瓷砖中的内容)。
我的整个播放器代码在所有组之间拆分,这些组都连接到称为“playerScript”的父脚本。
我从两个脚本“PlayerCollisionScript”和“PlayerMovementScript”中得到错误 PlayerCollisionScript看起来像这样
using UnityEngine;
public class PlayerCollisionScript : MonoBehaviour
{
[SerializeField]
internal PlayerScript playerScript;
internal void IfPlayerWalkWall()
{
RaycastHit2D hit = Physics2D.Raycast(transform.position, transform.TransformDirection(playerScript.direction), 1f);
if (hit.collider.name == "Walls")
{
Debug.Log("Walk wall");
}
}
}
和PlayerMovementScript
using System.Collections;
using UnityEngine;
public class PlayerMovementScript : MonoBehaviour
{
[SerializeField]
internal PlayerScript playerScript;
private void Update()
{
// What happens when the player moves
if ((playerScript.moveUp == true) && !playerScript.isPlayerMoving)
{
playerScript.direction = Vector2.up;
playerScript.collisionScript.IfPlayerWalkWall();
if (playerScript.hitWall == false)
{
StartCoroutine(MovePlayer(playerScript.direction));
}
playerScript.hitWall = false;
}
}
我一直在下车错误错误图片
到目前为止,我已经尝试将整个 Raycast 代码移动到 MovementScript 中,但我仍然遇到相同的错误,只要我在 CollisionScript 中键入某些内容就会发生hit
此错误,例如hit.collider.name
会收到此错误,hit
它本身就可以正常工作。
谢谢愿意帮忙的人^^
解决方案
请参考API:
“这个函数返回一个 RaycastHit2D 对象,其中引用了被射线击中的对撞机(如果没有击中,结果的对撞机属性将为 NULL)。”
尤其是由于您将光线投射的最大距离限制为1
单位,因此它不太可能不会击中任何东西。
您的脚本应该在尝试访问之前进行检查hit.collider.name
RaycastHit2D hit = Physics2D.Raycast(transform.position, transform.TransformDirection(playerScript.direction), 1f);
if (hit.collider && hit.collider.name.Equals("Walls"))
{
Debug.Log("Walk wall");
}