В моей 2-й игре у меня есть несколько элементов OnGui для выбора пользователем, однако курсор, который использует im, является другим элементом ongui (с помощью kinect для навигации), это возможно случайно, в настоящий момент, когда я использую самолеты, но я буду масштабировать и выходить из камеры, так что, по сути, они должны быть привязаны к экрану. Любые идеи, предложения или обходные пути. Это мой курсор.Элементы OnGui, взаимодействующие с другими элементами OnGui
using UnityEngine;
using System;
using System.Collections;
public class PillarAgent : MonoBehaviour {
public SkeletonWrapper sw;
public Vector3 distance;
public float progress =0f;
public Texture2D cursor;
public Texture2D load;
public Camera mainCam;
public float startTime;
private int roundedRestSecounds;
// Use this for initialization
float differencex = 0;
float differencey = 0;
void Start() {
distance =new Vector3(0f,0f,0f);
}
float translate(float value, float leftMin, float leftMax,
float rightMin,float rightMax)
{
float leftSpan = leftMax - leftMin;
float rightSpan= rightMax - rightMin;
float valueScaled = (value-leftMin)/(leftSpan);
return rightMin+(valueScaled * rightSpan);
}
// Update is called once per frame
void Update() {
if (sw.pollSkeleton())
{
distance.x=sw.bonePos[0,0].x - sw.bonePos[0,7].x;//5 is left shoulder
distance.y=sw.bonePos[0,0].y -sw.bonePos[0,7].y;
differencex=translate(distance.x,.6f,0,0,Screen.width);
differencey=translate(distance.y,-.5f,0,0,Screen.height);
//Debug.Log();
float width = sw.bonePos[0,5].x+ sw.bonePos[0,9].x;
float height =sw.bonePos[0,4].y- sw.bonePos[0,0].y;
float heightdiv= (height/2)+sw.bonePos[0,0].y;
}
}
void OnGUI() {
//left top width height
Rect r = new Rect(differencex,differencey,80,50);
GUI.Label(r,cursor);
GUI.BeginGroup(new Rect(differencex,differencey+50,50*Mathf.Clamp01(progress),15));
//Debug.Log(progress);
GUI.DrawTexture(new Rect(0,0,50,50),load);
GUI.EndGroup();
transform.position =mainCam.ScreenToWorldPoint(new Vector3(differencex,Screen.height-differencey,50));
//mainCam.fieldOfView()
}
void OnCollisionStay(Collision Other)
{
startTime+=Time.deltaTime;
if(Other.gameObject.GetComponent(typeof(TextControl)))
{
roundedRestSecounds=Mathf.CeilToInt(Time.time);
progress = Time.time *0.2f;
CurrentState=true;
}
else if(Other.gameObject.tag==("Scalpal")){
progress = startTime *0.5f;
//scallpall activated
//
}
}
void OnCollisionExit(Collision Other){
startTime =0f;
progress =0f;
}
public Boolean CurrentState{get;set;}
}
Следующий класс, по существу, класс, в котором я забрать свои инструменты, в настоящее время этот код не работает (не знаю почему), но то, что я хочу сделать, это выбрать некоторые инструменты, которые отображаются на экране так что я могу их использовать, например, например, забрать краску кисти, покрасить кирпичи, а что нет. на данный момент у меня есть инструменты на плоскости, я всегда хочу, чтобы они всегда отображались на экране во время движения камеры.
using UnityEngine;
using System.Collections;
public class SelectTool : MonoBehaviour {
public Tools tools;
public float startTime;
public bool ScalpalSelected;
public GameObject selectedTool;
void Start()
{
tools = this.GetComponent<Tools>(); //in order to use this tools muyst be attached to the game object
//this is essentially saying with regards to this game object get the component named tools
}
void update()
{
}
void OnCollisionStay(Collision Other)
{
startTime +=Time.deltaTime;
if(startTime >5f){
if(Other.collider.tag==("Scalpal"))
{
selectedTool = Other.collider.gameObject;
Debug.Log(selectedTool+" What in gods good name is:" +tools.utilities[0]);
}
else {
selectedTool=null;
}
if(selectedTool){
for(int i=0;i<tools.utilities.Length;i++)
{
}
}
ScalpalSelected=true;
renderer.material.color = Color.yellow;
}
}
void OncollisionStay(Collision other){
startTime = 0f;
}
}
Здравствуйте. Трудно понять, что именно вы пытаетесь сделать. Попытайтесь расширить свои вопросы, указав примеры кода, с которым вы столкнулись. –
@EvilClosetMonkey жалеет об этом, по сути, единственный способ, которым я могу придумать, это сделать то, что я сделал с помощью курсора, и это создать другой объект для взаимодействия с игровым миром. –
хорошо, если бы я понял, что вы сказали правильно, вы хотите, чтобы ваши объекты самолета двигались вместе с камерой. Легкий способ сделать это - вставить эти плоские объекты в камеру как дочерние объекты. Затем, когда вы перемещаете камеру, они автоматически перемещаются вместе с ней. –