和C#代码
using UnityEngine;
using System.Collections;
public class ClicktoPlayWebMovieClass : MonoBehaviour {
// Use this for initialization
void Start () {
}
private Vector3 FindBoundCord (int i, GameObject _GameObject){
/*This is basically where the code starts. It starts out by creating a
* bounding box around the target GameObject.
It calculates the 8 coordinates forming the bounding box, and
returns them all to the for loop.
Because there are no real method which returns the coordinates
from the bounding box I had to create a switch/case which utillized
Bounds.center and Bounds.extents.*/
Bounds _TargetBounds = _GameObject.GetComponent<Renderer>().bounds;
Vector3 _TargetCenter = _TargetBounds.center;
Vector3 _TargetExtents = _TargetBounds.extents;
switch(i){
case 0:
return _TargetCenter + new Vector3(_TargetExtents.x, _TargetExtents.y, _TargetExtents.z);
case 1:
return _TargetCenter + new Vector3(_TargetExtents.x, _TargetExtents.y, _TargetExtents.z*-1);
case 2:
return _TargetCenter + new Vector3(_TargetExtents.x, _TargetExtents.y*-1, _TargetExtents.z);
case 3:
return _TargetCenter + new Vector3(_TargetExtents.x, _TargetExtents.y*-1, _TargetExtents.z*-1);
case 4:
return _TargetCenter + new Vector3(_TargetExtents.x*-1, _TargetExtents.y, _TargetExtents.z);
case 5:
return _TargetCenter + new Vector3(_TargetExtents.x*-1, _TargetExtents.y, _TargetExtents.z*-1);
case 6:
return _TargetCenter + new Vector3(_TargetExtents.x*-1, _TargetExtents.y*-1, _TargetExtents.z);
case 7:
return _TargetCenter + new Vector3(_TargetExtents.x*-1, _TargetExtents.y*-1, _TargetExtents.z*-1);
default:
return Vector3.zero;
}
}
IEnumerator MyMethod() {
//Debug.Log("Before Waiting 2 seconds");
yield return new WaitForSeconds(2);
//Debug.Log("After Waiting 2 Seconds");
}
public string url = "http://becunningandfulloftricks.files.wordpress.com/2013/04/hedgehog_in_the_fog.ogg";
// Update is called once per frame
void Update () {
if (Input.GetMouseButtonDown (0)) {
Debug.Log("clicked");
// Start download
var www = new WWW(url);
// Make sure the movie is ready to start before we start playing
var movieTexture = www.movie;
while (!movieTexture.isReadyToPlay) {
StartCoroutine(MyMethod());
}
print("LOADED!!!");
Vector2 _ObjectScreenCord, _Xmin = new Vector2(Screen.width,0), _Xmax = Vector2.zero, _Ymin = new Vector2(Screen.height,0), _Ymax = Vector2.zero;
float _Height, _Width;
for(int i = 0; i != 8; i++){
//FindBoundCord() locates the eight coordinates that forms the boundries, followed by converting the coordinates to screen space.
// The entire script starts in FindBoundCord
_ObjectScreenCord = Camera.main.WorldToScreenPoint(FindBoundCord(i, transform.gameObject));
/* After gathering the coordinates and converting them to screen space
we try to locate which of these have the highest/minimum x and y values.
The difference between highest/minimum x and y must correspond to
width and height.*/
if(_ObjectScreenCord.x > _Xmax.x){
_Xmax.x = _ObjectScreenCord.x;
}
else if(_ObjectScreenCord.x < _Xmin.x){
_Xmin.x = _ObjectScreenCord.x;
}
if(_ObjectScreenCord.y > _Ymax.x){
_Ymax.x = _ObjectScreenCord.y;
}
else if(_ObjectScreenCord.y < _Ymin.x){
_Ymin.x = _ObjectScreenCord.y;
}
}
//Too measure the distance between them, I use the Vector2 method Distance.
_Height = Vector2.Distance(_Ymax, _Ymin);
if (_Height > Screen.height || _Height < 0){
_Height = 0;
}
_Width = Vector2.Distance(_Xmax, _Xmin);
if (_Width > Screen.width || _Width < 0){
_Width = 0;
}
print(_Height+" - "+_Width);
GetComponent<Renderer>().material.mainTexture = movieTexture;
// Assign clip to audio source
// Sync playback with audio
GetComponent<AudioSource>().clip = movieTexture.audioClip;
// Play both movie & sound
GUITexture gt = GetComponent<GUITexture>();
gt.texture = movieTexture;
transform.localScale = new Vector3 (0f,0f,0f);
transform.position = new Vector3 (0.5f,0.5f,0f);
Rect r = gt.pixelInset;
print(_Width);
print(movieTexture.width / 2);
r.xMin = -_Width / 2;
r.xMax = _Width / 2;
r.yMin = -_Height / 2;
r.yMax = _Height / 2;
// r.xMin = -movieTexture.width / 2;
// r.xMax = movieTexture.width / 2;
// r.yMin = -movieTexture.height / 2;
// r.yMax = movieTexture.height / 2;
gt.pixelInset=r;
movieTexture.Play();
GetComponent<AudioSource>().Play();
}
}
}
当我点击我的电视机时,看起来不错:
在我不旋转相机之前看起来不错。相机旋转后,movieTexture在屏幕上有初始位置:
它让我的电视机坏了......
如何指定movieTexture,它必须具有GetComponent<Renderer>().material.mainTexture
的位置?我需要make看起来像这样
但是电视的屏幕必须是必须旋转的电影屏幕,就像电视机的屏幕一样......
答案 0 :(得分:1)