【发布时间】:2019-06-24 18:29:21
【问题描述】:
更新:正如下面的 cmets 中提到的,定位 target_manager; (在 MakeAbility 中)为空。这似乎是问题的根源,但为什么它是空的?
============
在下面的代码中,我创建了 PartAttack 类的一个实例,然后为我的目标管理器分配了引用。
第一个调试日志返回 PartAttack。第二个返回 null。
public Targeting target_manager(在第一个脚本中)在检查器中分配给带有 Targeting 脚本的游戏对象。
我做错了什么?为什么这没有正确分配目标管理器?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class MakeAbility : MonoBehaviour
{
public BlockScriptableObject block;
public IDictionary<string, IAbility> abilities_parts = new Dictionary<string, IAbility>();
public Targeting target_manager;
public PartAttack part_attack = new PartAttack();
private void Start()
{
part_attack.block_attack_damage = block.attack_damage;
part_attack.target_manager = target_manager;
Debug.Log(part_attack);
Debug.Log(part_attack.target_manager);
abilities_parts.Add("part_attack", part_attack);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class PartAttack: IAbility
{
public Targeting target_manager;
public void Use()
{
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Targeting : MonoBehaviour
{
public int max_targets = 3;
public string current_target = null;
public List<Combatant> list_of_targetable = new List <Combatant>();
public BlockScriptableObject block; // The abilityblock
public GameObject target_clickfield_char1;
public Combatant character_slot_1;
}
【问题讨论】:
-
public Targeting target_manager 在检查器中分配给带有 Targeting 脚本的游戏对象。
-
public Targeting target_manager;(在 MakeAbility 中)和public Targeting target_manager;(在 PartAttack 中)不是同一个对象。 -
最初是这样,但我不是将 PartAttack target_manager 设置为与另一个实例相同的实例吗?
-
public Targeting target_manager;(在 MakeAbility 中)是否为非空? -
您不会使用 new 或构造函数创建 MonoBehaviour 类型的实例。创建新实例的唯一方法是使用 gameObjectReference.AddComponent
() 将其添加到现有游戏对象!你不是说已经在 Inspector 中引用了相应的 GameObject 吗?那你为什么用 public Targeting target_manager = new Targeting();(这是不允许的)呢?