前提・実現したいこと
AIBehaviorというアセットのhealthの値をほかのスクリプトから変更したい思っています。
この方法以外でダメージを与えられる方法があるのなら教えていただけると助かります。
発生している問題・エラーメッセージ
Assets\script\werpon1.cs(11,43): error CS0246: The type or namespace name 'AIBehaviors' could not be found (are you missing a using directive or an assembly reference?)
該当のソースコード
using System.Collections; using System.Collections.Generic; using UnityEngine; public class werpon1 : MonoBehaviour { public GameObject AIBehavior; void Start() { float damage = AIBehavior.GetComponent<AIBehaviors>().health; } }
//AIBehaviorのスクリプト using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI; #if UNITY_EDITOR using System.Reflection; #endif using Random = UnityEngine.Random; namespace AIBehavior { [RequireComponent(typeof(AIAnimationStates))] public class AIBehaviors : AIComponent { public bool isActive { get; private set; } public bool isDefending = false; [SerializeField] protected float damageMultiplier = 1.0f; ~文字数制限のため省略~ public float health = 100.0f; public float maxHealth = 100.0f; public GameObject statesGameObject = null; // === Animation Callback Info === // public Component animationCallbackComponent = null; public string animationCallbackMethodName = ""; public AIAnimationStates animationStates; // === Callbacks === // public Action<BaseState, BaseState> onStateChanged = null; public Action<AIAnimationState> onPlayAnimation = null; public Action<Vector3, float, float> externalMove = null; // === Targetting and Rotation === // ~文字数制限のため省略~ [System.Obsolete("Use Damage instead.")] public void GotHit(float damage) { Damage(damage); } public void Damage(float damage) { GotHitState gotHitState = GetState<GotHitState>(); if ( gotHitState != null && gotHitState.CanGetHit(this) ) { float totalDamage = damage * GetDamageMultiplier (); SubtractHealthValue(totalDamage); Debug.Log ("Got " + totalDamage + " damage"); if ( gotHitState.CoolDownFinished() ) { ChangeActiveState(gotHitState); } } } public virtual void SetDamageMultiplier (float newDamageMultiplier) { damageMultiplier = newDamageMultiplier; } public virtual float GetDamageMultiplier () { return damageMultiplier; } ~文字数制限のため省略~ public float GetHealthValue() { return health; } public void SetHealthValue(float healthAmount) { health = healthAmount; } public void AddHealthValue(float healthAmount) { health += healthAmount; } public void SubtractHealthValue(float healthAmount) { health -= healthAmount; } ~文字数制限のため省略~ }
//サンプルシーンに入っていたダメージを与えるスクリプト using UnityEngine; using AIBehavior; namespace AIBehaviorExamples { public class ExampleProjectile : MonoBehaviour { public GameObject explosionPrefab; public AttackData attackData; public float playerShootingDamage; void Awake() { Destroy(gameObject, 10.0f); } void OnTriggerEnter(Collider col) { SpawnFlames(); if (col.tag == "Player") col.SendMessage ("Damage", CalculateDamage(attackData)); else col.SendMessage ("Damage", playerShootingDamage); } void OnCollisionEnter(Collision col) { SpawnFlames(); } void SpawnFlames() { Instantiate(explosionPrefab, transform.position, Quaternion.identity); Destroy(gameObject); } float CalculateDamage(AttackData attackData) { float minDamage = attackData.damage - attackData.plusOrMinusDamage; float maxDamage = attackData.damage + attackData.plusOrMinusDamage; return Random.Range (minDamage, maxDamage); } } }
試したこと
このサイトを参考に値を変更するスクリプトを書いたのですがうまくいきませんでした。
ほかのシーンで試してみたところそれはうまくいきました。
補足情報(FW/ツールのバージョンなど)
Unity 2020 3.4f1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/17 07:32