好的我很好...... 2个问题
我的第一个问题: 如果我实例化一个对象,那么脚本会保留在它上面,并且脚本会像游戏开始时那样开始。
我的第二个问题: 我实例化了我的对象,但我不断收到此错误
UnassignedReferenceException:尚未分配GreenGoUp的变量目标。 您可能需要在检查器中分配GreenGoUp脚本的目标变量。 GreenGoUp.Update()(在Assets / Resources / Scripts / GreenGoUp.cs:23)
基本上我可以说我有信封(它是对象),我将我的对象(这是一个预制件)放入触发器中,当它触及触发器时,对象被销毁...然后我实例化对象回到它的起始位置,但如果我试图再次将我的物体扔到触发器上。什么都没发生。
问题是我在maincamera中有一个脚本,它执行随机范围并将其放入变量中,并根据数字运行脚本。我现在为其中一个信封显示我的脚本。
MainCamera脚本
using UnityEngine;
using System.Collections;
public class RandomFunction : MonoBehaviour {
int n;
public GameObject blueObject= null;
public GameObject greenObject= null;
public GameObject yellowObject= null;
public GameObject redObject= null;
public GameObject orangeObject= null;
public GameObject purpleObject= null;
void Start ()
{
n=Random.Range(0,1);
switch(n)
{
case 0:
greenObject.GetComponent<GreenGoUp> ().enabled = true;
Debug.Log ("GreenGoUp Should be Working");
break;
}
}
}
其中一个信封的脚本
using UnityEngine;
using System.Collections;
public class GreenEnvelope : MonoBehaviour
{
bool isMove = false;
public float speed = 40;
Vector3 targetPosition;
Vector3 currentPosition;
Vector3 directionOfTravel ;
public Transform target;
public GameObject playerObject;
GameObject Green=null;
//public GameObject playerObject;
void Start()
{
playerObject.GetComponent<OnTrig>().enabled=true;
Debug.Log ("GreenEnvelope is now on, I should be moving");
}
void Update()
{
Debug.Log ("GreenEnvelope is now moving");
targetPosition = target.transform.position; // Get position of object B
currentPosition = this.transform.position; // Get position of object A
directionOfTravel = targetPosition - currentPosition;
if (Vector3.Distance (currentPosition, targetPosition) > .2f) {
this.transform.Translate (
(directionOfTravel.x * speed * Time.deltaTime),
(directionOfTravel.y * speed * Time.deltaTime),
(directionOfTravel.z * speed * Time.deltaTime),
Space.World);
transform.Rotate (new Vector3 (Time.deltaTime * 400, 0, 0));
}
}
}
此脚本稍微抬起信封,以便可以向用户显示,以便他可以扔掉它
using UnityEngine;
using System.Collections;
public class GreenGoUp : MonoBehaviour {
Vector3 targetPosition;
Vector3 currentPosition;
Vector3 directionOfTravel;
public Transform target;
//public GameObject playerObject;
public float speed = 40;
void Start () {
Debug.Log ("GreenGoUp IS WORKING");
}
void Update () {
Debug.Log ("GreenGoUp IS GOING UP");
targetPosition = target.transform.position; // Get position of object B
currentPosition = this.transform.position; // Get position of object A
directionOfTravel = targetPosition - currentPosition;
if (Vector3.Distance (currentPosition, targetPosition) > .1f) {
this.transform.Translate (
(directionOfTravel.x * speed * Time.deltaTime),
(directionOfTravel.y * speed * Time.deltaTime),
(directionOfTravel.z * speed * Time.deltaTime),
Space.World);
}
}
}
此脚本位于触发器上,用于销毁对象
using UnityEngine;
using System.Collections;
public class OnTrig : MonoBehaviour {
ParticleSystem particle;
public GameObject playerObject;
public GameObject greenDestroy;
bool isMove=false;
public GameObject Purple;
public GameObject Green;
public GameObject Blue;
public GameObject Red;
public GameObject Orange;
public GameObject Yellow;
public GameObject mainCamera;
void OnTriggerEnter(Collider col)
{
if(col.gameObject.tag == "Green")
{
Destroy(col.gameObject);
Debug.Log ("GreenEnvelope Has Been Destroyed");
Green = Instantiate(Resources.Load("Prefabs/greenEnvelope"),new Vector3(-11.63f,-10.49f,30.09f), Quaternion.identity) as GameObject;
mainCamera.GetComponent<RandomFunction>().enabled=true;
}
}
void OnMouseDown()
{
if (Input.GetMouseButtonDown (0)) {
isMove = true;
}
if (isMove == true) {
playerObject.GetComponent<GreenEnvelope> ().enabled = true;
}
}
}
答案 0 :(得分:1)
我无法回答问题#1。但是对于问题#2来修复错误,你必须为GreenGoUp分配对象。就像这个人没有在这张照片中分配视力一样:。
答案 1 :(得分:0)
答案1:
是的,在实例化预制件后,所有脚本及其值都将被复制到实例中。但是,如果您要实例化运行时对象(例如,您之前实例化的对象),则可能会遇到意外情况,因为新实例将复制已初始化对象中的所有值,然后尝试初始化它,这可能会产生不一致状态。
答案2:
我假设您将绿色,蓝色等对象作为场景中预制件的实例。对于这些情况,您可以设置&#34; target&#34;绿色(/蓝色/红色)GoUp脚本的字段到另一个场景对象。
到目前为止一切顺利。游戏将运行并运行,直到您的绿色场景对象被销毁并重新实例化。 Instantiate()将创建一个绿色预制件的新实例,而不是&#34; target&#34;正在设置,因为Prefabs无法保存对场景对象的引用。
你必须重新分配&#34;目标&#34;在实例化你的对象之后。