カメラに階段を登ってほしい
Unity超初心者の大学4年女です。
「UnityによるVRアプリケーション開発」の8章をベースにUnityで美術館を作っています。
VRカメラで館内の絵を周って見る、ところまでは完成したんですがblenderで作った二階建ての美術館の階段をカメラが登ってくれません。階段とカメラ両方にコライダをつけたりキャラクターにカメラをアタッチして登らせようとしたんですが、全てうまくいかずカメラが階段を通り抜けて一階をずっとうろうろしてしまいます。
カメラに階段を登って降りて(登ってる風に斜めに上昇したり下降したりして)ほしいのですが、どうしたらよいでしょうか。
貼り付けたC#は「UnityによるVRアプリケーション開発」の8章に記載されているC#です。
C#をどこに貼り付けてよいのかわからないのでJavaの欄に貼り付けました。
上のC#→objectにドロップしたピクチャがplay時に写るようにするためのスクリプト
下のC#→カメラに館内の絵(ピクチャ)を見て周って(動いて)もらうためのスクリプト
環境→Unity 5.6.1f1 Personal(64bit)
建物制作→Blender
VRカメラ→Dive_camera
よろしくお願いします。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PopulateArtFrames : MonoBehaviour
{
public Texture[] images;
// Use this for initialization
void Start()
{
int imageIndex = 0;
foreach (Transform artwork in transform)
{
GameObject art = artwork.Find("Image").gameObject;
Renderer rend = art.GetComponent<Renderer>();
Shader shader = Shader.Find("Standard");
Material mat = new Material(shader);
mat.mainTexture = images[imageIndex];
rend.material = mat;
imageIndex++;
if (imageIndex == images.Length) imageIndex = 0;
}
}
// Update is called once per frame
void Update()
{
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ExhibitionRide : MonoBehaviour
{
public GameObject artworks;
public float startDelay = 3f;
public float transitionTime = 5f;
private AnimationCurve xCurve, zCurve, rCurve;
// Use this for initialization
void Start()
{
int count = artworks.transform.childCount + 1;
Keyframe[] xKeys = new Keyframe[count];
Keyframe[] zKeys = new Keyframe[count];
Keyframe[] rKeys = new Keyframe[count];
int i = 0;
float time = startDelay;
xKeys[0] = new Keyframe(time, transform.position.x);
zKeys[0] = new Keyframe(time, transform.position.z);
rKeys[0] = new Keyframe(time, transform.position.y);
foreach (Transform artwork in artworks.transform)
{
i++;
time += transitionTime;
Vector3 pos = artwork.position - artwork.forward;
xKeys[i] = new Keyframe(time, pos.x);
zKeys[i] = new Keyframe(time, pos.z);
rKeys[i] = new Keyframe(time, artwork.rotation.y);
}
xCurve = new AnimationCurve(xKeys);
zCurve = new AnimationCurve(zKeys);
rCurve = new AnimationCurve(rKeys);
}
// Update is called once per frame
void Update()
{
transform.position = new Vector3(xCurve.Evaluate(Time.time),
transform.position.y, zCurve.Evaluate(Time.time));
Quaternion rot = transform.rotation;
rot.y = rCurve.Evaluate(Time.time);
transform.rotation = rot;
}
}