如何修改轨道脚本,开始在Unity3d的按钮触摸

本文关键字:开始 Unity3d 触摸 按钮 脚本 何修改 修改 轨道 | 更新日期: 2023-09-27 17:53:08

我有以下轨道脚本运行良好,在Unity3d中的GameObject。我想让脚本在GameObject上运行,如果是GUI的话。点击Android设备上的按钮

这是原始的c#轨道脚本:

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;
        }
    }

}

我在编码中做错了什么?我已经编译好了,请指教。提前感谢大家的回答

如何修改轨道脚本,开始在Unity3d的按钮触摸

在你的if语句中,你禁止block在1次迭代后运行,导致几乎没有任何移动,试着注释掉禁用布尔值,这样它就可以运行

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;
    }