[英]How to modify orbit script to start on button touched in Unity3d
我的以下軌道腳本在Unity3d中的GameObject上運行正常。 如果要在Android設備上觸摸GUI.Button,我想在GameObject上運行腳本。
這是原始的C#Orbir腳本:
using UnityEngine;
using System.Collections;
public class Orbiter : MonoBehaviour {
GameObject cube;
public Transform center;
public Vector3 axis = Vector3.up;
public Vector3 desiredPosition;
public float radius = 2.0f;
public float radiusSpeed = 0.5f;
public float rotationSpeed = 80.0f;
void Start () {
cube = GameObject.FindWithTag("MarkerObject");
center = cube.transform;
transform.position = (transform.position - center.position).normalized * radius + center.position;
radius = 2.0f;
}
void Update () {
transform.RotateAround (center.position, axis, rotationSpeed * Time.deltaTime);
desiredPosition = (transform.position - center.position).normalized * radius + center.position;
transform.position = Vector3.MoveTowards(transform.position, desiredPosition, Time.deltaTime * radiusSpeed);
}
}
不管我嘗試了什么,這都是拒絕運行的修改后的代碼。
using UnityEngine;
using System.Collections;
public class Orbiter : MonoBehaviour {
private bool IsOrbited = false;
private bool MustOrbit = false;
GameObject cube;
public Transform center;
public Vector3 axis = Vector3.up;
public Vector3 desiredPosition;
public float radius = 2.0f;
public float radiusSpeed = 0.5f;
public float rotationSpeed = 80.0f;
public Texture btnTexture2;
void Start () {
cube = GameObject.FindWithTag("MarkerObject");
center = cube.transform;
transform.position = (transform.position - center.position).normalized * radius + center.position;
radius = 2.0f;
}
// Update is called once per frame
void Update () {
if (MustOrbit && !IsOrbited) {
//Rotate all models around X,Y,Z axe
if (cube != null)
transform.RotateAround (center.position, axis, rotationSpeed * Time.deltaTime);
desiredPosition = (transform.position - center.position).normalized * radius + center.position;
transform.position = Vector3.MoveTowards(transform.position, desiredPosition, Time.deltaTime * radiusSpeed);
IsOrbited = true;
MustOrbit = false;
}
}
void OnGUI() {
GUI.matrix = Matrix4x4.TRS(Vector2.zero, Quaternion.identity,new Vector3(Screen.width / 480.0f, Screen.height / 320.0f, 1));
if (!btnTexture2) {
Debug.LogError("Please assign a texture on the inspector");
return;
}
//GUI.color = new Color(0,0,0,0);
//GUI.backgroundColor = Color.clear;
if (GUI.Button(new Rect(10, 10, 120, 30), btnTexture2))
if (!IsOrbited) {
MustOrbit = true;
}
}
}
我在編碼中做錯了什么? 我可以編譯了,請指教。 謝謝advace的所有人的回答。
在if語句中,您要在1次迭代后禁用該塊,導致幾乎沒有任何移動,請嘗試注釋掉禁用boolean以便它可以運行
if (MustOrbit && !IsOrbited) {
//Rotate all models around X,Y,Z axe
if (cube != null)
transform.RotateAround (center.position, axis, rotationSpeed * Time.deltaTime);
desiredPosition = (transform.position - center.position).normalized * radius + center.position;
transform.position = Vector3.MoveTowards(transform.position, desiredPosition, Time.deltaTime * radiusSpeed);
// IsOrbited = true;
// MustOrbit = false;
}
在開始時重置模型上的x,y,z將開始的xyz作為矢量3
public Vector3 reset;
在Start()中
void Start () {
cube = GameObject.FindWithTag("MarkerObject");
center = cube.transform;
transform.position = (transform.position - center.position).normalized * radius + center.position;
radius = 2.0f;
reset = transform.position;
}
然后onGUI()
void OnGUI() {
GUI.matrix = Matrix4x4.TRS(Vector2.zero, Quaternion.identity,new Vector3(Screen.width / 480.0f, Screen.height / 320.0f, 1));
if (!btnTexture2) {
Debug.LogError("Please assign a texture on the inspector");
return;
}
//GUI.color = new Color(0,0,0,0);
//GUI.backgroundColor = Color.clear;
if (GUI.Button(new Rect(10, 10, 120, 30), btnTexture2))
if (!IsOrbited) {
MustOrbit = true;
}
}
if(GUI.Button(new Rect(Screen.width*5/6,Screen.height*5/6,Screen.width/6,Screen.height/6),"reset")){
transform.position = reset;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.