![](/img/trans.png)
[英]Deserialization Error: InvalidCastException: Cannot cast from source type to destination type
[英]Unity error: “Cannot cast from source type to destination type”
我目前正在統一制作一個游戲,因此游戲的背景和障礙不斷“重生”並創建一個循環。 在我添加第二個腳本到障礙物以使其垂直移動之前,一切都工作正常。 添加腳本后,我收到錯誤消息:“無法從源類型轉換為目標類型”。
這個腳本使對象循環(Cs):
public class BgLooper : MonoBehaviour {
int numBGPanels = 10;
float cloudMax = 2.2f;
float cloudMin = -0.2f;
void Start() {
GameObject[] clouds = GameObject.FindGameObjectsWithTag ("Cloud");
foreach (GameObject cloud in clouds) {
Vector3 pos = cloud.transform.position;
pos.y = Random.Range(cloudMin, cloudMax);
cloud.transform.position = pos;
}
}
void OnTriggerEnter2D(Collider2D collider) {
Debug.Log ("Triggered: " + collider.name);
float widthOfBGobject = ((BoxCollider2D)collider).size.x;
Vector3 pos = collider.transform.position;
pos.x += widthOfBGobject * numBGPanels;
if (collider.tag == "Cloud") {
pos.y = Random.Range(cloudMin, cloudMax);
}
collider.transform.position = pos;
}
}
這是使Obsticales移動(Js)的腳本:
var maxX = 6.1;
var minX = -6.1;
var maxY = 4.2;
var minY = -4.2;
var moveSpeed = 0.3;
private var tChange: float = 0; // force new direction in the first Update
private var randomX: float;
private var randomY: float;
function Update () {
// change to random direction at random intervals
if (Time.time >= tChange){
randomX = Random.Range(-2.0,2.0); // with float parameters, a random float
randomY = Random.Range(-2.0,2.0); // between -2.0 and 2.0 is returned
// set a random interval between 0.5 and 1.5
tChange = Time.time + Random.Range(0.5,1.5);
}
transform.Translate(Vector3(randomX,randomY,0) * (moveSpeed / 15) * Time.deltaTime);
// if object reached any border, revert the appropriate direction
if (transform.position.x >= maxX || transform.position.x <= minX) {
randomX = -randomX;
}
if (transform.position.y >= maxY || transform.position.y <= minY) {
randomY = -randomY;
}
// make sure the position is inside the borders
transform.position.x = Mathf.Clamp(transform.position.x, minX, maxX);
transform.position.y = Mathf.Clamp(transform.position.y, minY, maxY);
}
您應該能夠訪問Collider2D上的bounds屬性,而不是像這樣使用強制類型轉換。
void OnTriggerEnter2D(Collider2D collider) {
Debug.Log ("Triggered: " + collider.name);
//change this line
float widthOfBGobject = collider.bounds.size.x;
Vector3 pos = collider.transform.position;
pos.x += widthOfBGobject * numBGPanels;
if (collider.tag == "Cloud") {
pos.y = Random.Range(cloudMin, cloudMax);
}
collider.transform.position = pos;
}
那應該是您的OnTriggerEnter2D
的更改所顯示的樣子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.