unity3d 统一如何影响变量从其他类与光线投射,通过使用脚本和可视化脚本螺栓

arknldoa  于 2023-01-17  发布在  其他
关注(0)|答案(1)|浏览(96)

我需要使用光线投射致盲一个敌方人工智能。当光线投射与敌方发生碰撞时,敌方isblinded的布尔值必须设置为true。我已经引用了敌方的游戏对象,但是控制台日志给我这个错误。NullRefrenceException:对象引用未设置为对象的示例Raycast.Update()(位于Assets/Scripts/Raycast.cs.23)。任务是检测光线投射是否击中敌人,并通过视觉捕捉转移状态。以下是代码:

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

public class Raycast : MonoBehaviour
{
    [SerializeField] LayerMask enemyLayer;
    RaycastHit hitinfo;
    public GameObject enemy;

    // Start is called before the first frame update

    void Update()
    {

        Ray ray = new Ray(transform.position, transform.TransformDirection(Vector3.forward));
        Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * 20, Color.red);
        if (Physics.Raycast(ray, out hitinfo, 100, enemyLayer))
        {
            Debug.Log("Hit");
            Debug.Log(hitinfo.collider.gameObject.name);
            //enemy is blinded is true
            enemy.GetComponent<Enemy>().isBlinded = true;
            Debug.Log(enemy.GetComponent<Enemy>().isBlinded);
        }
        else
        {
            Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * 20, Color.green);
        }
    }
}

第一节第一节第一节第一节第一次
我尝试使用Enemy enemyscript类,但这不允许我在检查器中添加敌人对象。

x4shl7ld

x4shl7ld1#

看起来你得到的是对游戏对象本身的引用,而不是游戏对象上的脚本/组件。
试试看:

private EnemyScript enemyScript;

...

if (Physics.Raycast(ray, out hitinfo, 100, enemyLayer))
    {
        Debug.Log("Hit");
        Debug.Log(hitinfo.collider.gameObject.name);
        //enemy is blinded is true
        
        enemyScript = hitinfo.collider.gameObject.GetComponent<EnemyScript>();
        enemyScript = true;
        Debug.Log(enemyScript.isBlinded);
    }

相关问题