在我的游戏中,一个正常的立方体变为一个超级立方体。
using UnityEngine;
public class PlayerSkift : MonoBehaviour {
public GameObject myObject1;
public GameObject myObject2;
// Update is called once per frame
void Update () {
if (Input.GetKeyDown (KeyCode.UpArrow))
{
myObject1.SetActive (false);
myObject2.SetActive (true);
}
if (Input.GetKeyDown(KeyCode.DownArrow))
{
myObject2.SetActive(false);
myObject1.SetActive(true);
}
}
}
这段代码是什么让它这样做。 但是当我改变我的小立方体时,它不会去任何地方。此脚本使多维数据集运行。
using UnityEngine;
public class PlayerMovement : MonoBehaviour {
public Rigidbody rb;
public float forwardForce = 2000f;
public float sidewaysForce = 500f;
void FixedUpdate ()
{
// Add a forward force
rb.AddForce(0, 0, forwardForce * Time.deltaTime);
if (Input.GetKey("d"))
{
rb.AddForce(sidewaysForce * Time.deltaTime, 0, 0, ForceMode.VelocityChange);
}
if (Input.GetKey("a"))
{
rb.AddForce(-sidewaysForce * Time.deltaTime, 0, 0, ForceMode.VelocityChange);
}
if (rb.position.y < -1f)
{
FindObjectOfType<GameManager>().EndGame();
}
}
}
它在较小的立方体上。所以较小的立方体遵循更大的代码:
using UnityEngine;
public class Pl2føglPl1 : MonoBehaviour
{
public Transform player1;
public Vector3 offset;
// Update is called once per frame
void Update ()
{
transform.position = player1.position + offset;
}
}
当更大的立方体消失时,小家伙不会开始跑步。如果可以的话请求帮助。
答案 0 :(得分:0)
以下是发生的事情:
public class PlayerMovement
使正常的立方体移动。但public class PlayerSkift
执行myObject1.SetActive (false);
,因此正常的多维数据集会被停用。并且它不会让void FixedUpdate ()
事件处理程序再次启动。所以正常的立方体不会去任何地方,所以跟随它的小立方体也不会去任何地方。
你需要创建一些“虚拟”不可见的GameObject,让你的立方体成为if的子项,将public class PlayerMovement
附加到它上面,这样它总是会移动,无论内部子多维数据集状态如何。两个子多维数据集当然都会遵循父级的坐标,因为它们的位置与父级相对。因此,您只需移动父级,无需将多维数据集彼此同步,因此您根本不需要public class Pl2føglPl1
。
答案 1 :(得分:0)
这是我最终使用的代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerSkiftStørelse : MonoBehaviour {
public Vector3 small;
public Vector3 normal;
public Vector3 high;
public Vector3 offset;
// Update is called once per frame
void Update ()
{
if (Input.GetKeyDown (KeyCode.DownArrow)) //getkeydown??
{
transform.localScale = small;
}
if (Input.GetKeyDown (KeyCode.UpArrow)) //getkeydown??
{
transform.localScale = normal;
}
}
}