【发布时间】:2016-03-18 22:07:25
【问题描述】:
我在尝试编译我的游戏时遇到问题,该问题源于我的损坏界面脚本和我的射弹脚本。控制台中的错误代码如下。
Assets/Scripts/Projectile.cs(32,33):错误 CS0266:无法隐式转换类型 UnityEngine.Component' toDamageInterface'。存在显式转换(您是否缺少演员表?)
DamageInterface.cs
using UnityEngine;
using System.Collections;
//damage interface
public interface DamageInterface {
void TakeHit (float damage, RaycastHit hit);
}
Projectile.cs
using UnityEngine;
using System.Collections;
public class Projectile : MonoBehaviour {
public LayerMask collisionMask; //detect what layer projectile collides with
float speed = 10;
float damage = 1;
public void SetSpeed(float newSpeed) {
speed = newSpeed;
}
void Update () {
float moveDistance = speed * Time.deltaTime;
CheckCollisions (moveDistance);
transform.Translate (Vector3.forward * moveDistance);
}
void CheckCollisions(float moveDistance) { //raycast to detect collision
Ray ray = new Ray (transform.position, transform.forward);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, moveDistance, collisionMask)) {
OnHitObject(hit);
}
}
void OnHitObject(RaycastHit hit) {
DamageInterface damageableObject = hit.collider.GetComponent(typeof(DamageInterface)); //ERROR RESIDES HERE
if (damageableObject != null) {
damageableObject.TakeHit(damage, hit); //damage + raycast hit
}
GameObject.Destroy (gameObject); //destroy projectile if enemy layer is hit
}
}
我相信我已经使用 typeof(T) 方法来获取我的界面组件,但我必须清楚地遗漏一些东西。谢谢
错误位于我的 Projectile.cs 中的这一行:
DamageInterface damageableObject = hit.collider.GetComponent(typeof(DamageInterface));
【问题讨论】:
-
包含 RaycastHit 的代码,换句话说,它是否实现了 DamageInterface 或对撞机对象
-
我不相信我已经这样做了,因为在从统一 5 移动到统一 4 后我不得不更改我的代码
-
DamageInterface 不扩展行为或组件。
-
这与我最初在 unity 5 中编译时的方式相似,以前的版本不获取与我的问题所在的函数的接口