我有一个"立方体"在Unity中。这个立方体有一个触发器,当它进入它时,物体被抓到空中。这是一个电梯,你可以看到我在这里的意思。这是一个从Spyro 2拍摄的小场景。
https://youtu.be/f8wWMa4N5mE?t=643
我现在使用的代码非常小
private float liftSpeed = 10; // the speed, the object is flying up
private void OnTriggerStay(Collider col)
{
Rigidbody objectRigid = col.gameObject.GetComponent<Rigidbody>(); // get the rigidbody from the object in the trigger
if (objectRigid != null) // does it have a rigidbody?
objectRigid.velocity = new Vector3(objectRigid.velocity.x, liftSpeed, objectRigid.velocity.z); // make it fly in the air
}
所以我有一个电梯,完全正常。但是当我旋转电梯时,我希望它能够工作。
一些例子(我的gamne是3D)
那么我怎样才能让我的电梯适用于所有&#34;旋转&#34;?
答案 0 :(得分:2)
您可以使用transform.up来获取升力的上升方向,然后乘以升力速度。
objectRigid.velocity = transform.up * liftSpeed;
transform.up会根据物体的旋转方式而变化,因此如果您的升力机向左旋转,则升降机会将物体移到左侧。
答案 1 :(得分:1)
您可以像在视频片段中一样使用变换RotateAround方法进行旋转。
Transform t = col.gameObject.GetComponent<Transform>();
transform.RotateAround(Vector3.zero, Vector3.up, 20 * Time.deltaTime);
给定的snipet让对象围绕它指向上方的轴旋转。
答案 2 :(得分:0)
答案 3 :(得分:0)
这是我解决问题的方法。
电梯和EndPoint将为空游戏对象。如果您希望电梯有平台或底座,您可以添加一个GameObject作为升降机的孩子,并使用您喜欢的形状。
您需要将一个碰撞器连接到升降机并将其设置为触发器。
然后将以下脚本添加到lift Empty GameObject
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveLift : MonoBehaviour {
public Transform end;
float speed = 4f;
bool liftActivated = false;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if(liftActivated)
{
float step = speed * Time.deltaTime;
//To move up the lift
transform.position = Vector3.MoveTowards(transform.position, end.position, step);
//To spin the lift
transform.RotateAround(Vector3.up, 2 * Time.deltaTime);
//To stop spining the lift when it reaches the end of the path
if(transform.position.Equals(end.position))
liftActivated = false;
}
}
void OnTriggerEnter(Collider other){
liftActivated = true;
other.gameObject.transform.parent = this.transform;
other.gameObject.GetComponent<Rigidbody>().isKinematic=true;
}
}
然后你应该决定一旦电梯到达目的地,是否必须离开平台的玩家,或者如果你不透明它并让它在行程结束时掉下来