通过单击按钮旋转游戏对象

发布于 2024-12-12 11:41:59 字数 997 浏览 1 评论 0原文

我有一个对象和 2 个 GUI 纹理按钮。我想在按下左侧按钮时将对象向左旋转,在按下另一个按钮时将对象向右旋转。

有什么想法吗?

我有一个在拖动对象时可以运行的脚本。我将发布重要部分:

function Start () 
{
  var angles = transform.eulerAngles;
  x = angles.y;    

  // Make the rigid body not change rotation
  if (rigidbody)
    rigidbody.freezeRotation = true;    
}

function LateUpdate () 
{   
    if (isMouseOverGuiTexture()) return;  

    if (target && Input.GetMouseButton(0)) 
    {  
         //0.1 represents the sensitivity of the mouse
         x += Input.GetAxis("Mouse X") * xSpeed *0.1; //x rotation
         //y -= Input.GetAxis("Mouse Y") * ySpeed *0.1;  //y rotation
         //y = ClampAngle(y, yMinLimit, yMaxLimit);                
         var rotation = Quaternion.Euler(y, x, 0);
         var position = rotation * Vector3(0.900528, 8.829305, -distance+0.49548)+ target.position;

         transform.rotation = rotation;
         transform.position = position;
    }
}

I have an object and 2 GUI texture buttons. I want to rotate the object to the left when I press the left button and to the right while pressing the other one.

Any ideas ?

I have a script that works when I drag my object. I will post the important part:

function Start () 
{
  var angles = transform.eulerAngles;
  x = angles.y;    

  // Make the rigid body not change rotation
  if (rigidbody)
    rigidbody.freezeRotation = true;    
}

function LateUpdate () 
{   
    if (isMouseOverGuiTexture()) return;  

    if (target && Input.GetMouseButton(0)) 
    {  
         //0.1 represents the sensitivity of the mouse
         x += Input.GetAxis("Mouse X") * xSpeed *0.1; //x rotation
         //y -= Input.GetAxis("Mouse Y") * ySpeed *0.1;  //y rotation
         //y = ClampAngle(y, yMinLimit, yMaxLimit);                
         var rotation = Quaternion.Euler(y, x, 0);
         var position = rotation * Vector3(0.900528, 8.829305, -distance+0.49548)+ target.position;

         transform.rotation = rotation;
         transform.position = position;
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

吃兔兔 2024-12-19 11:41:59

(问题已在评论中回答。请参阅问题没有答案,但问题已在评论中解决(或在聊天中扩展)

OP 写道:

我使用以下方法解决了这个问题:

var imageLeft:Texture2D; // 将左按钮图像拖到此处
var imageRight:Texture2D; // 右键图像
变量速度:float = 60; // 旋转速度(以度/秒为单位)
私有变量 rotLeft = false; // 如果 true 则对象向左旋转
私有变量 rotRight = false; // 如果 true 则对象向右旋转;

函数 OnGUI()
{
    rotLeft = GUI.RepeatButton(矩形(10,10,200,200), imageLeft);
    rotRight = GUI.RepeatButton(矩形(230,10,200,200), imageRight);
}

函数更新()
{    
    if (rotLeft) 变换.旋转(0, -speed*Time.deltaTime, 0);
    if (rotRight) 变换.旋转(0, 速度*Time.deltaTime, 0);
}

我不知道 Time.deltaTimeOnGUI 中采用哪个值 - 它应该是自上次 OnGUI 以来的时间,但我'我不确定。为了避免出现问题,我将实际旋转放在 Update 中,并使用两个控制布尔值(rotLeftrotRight)与 OnGUI< 进行通信/代码>.


(Question answered in the comments. See Question with no answers, but issue solved in the comments (or extended in chat) )

The OP wrote:

I solved it by using the following :

var imageLeft: Texture2D; // drag the left button image here
var imageRight: Texture2D; // right button image
var speed: float = 60; // rotate speed in degrees per second
private var rotLeft = false; // object rotates left if true
private var rotRight = false; // object rotates right if true;

function OnGUI()
{
    rotLeft = GUI.RepeatButton(Rect(10,10,200,200), imageLeft);
    rotRight = GUI.RepeatButton(Rect(230,10,200,200), imageRight);
}

function Update()
{    
    if (rotLeft) transform.Rotate(0, -speed*Time.deltaTime, 0);
    if (rotRight) transform.Rotate(0, speed*Time.deltaTime, 0);
}

I don't know which value Time.deltaTime assumes inside OnGUI - it should be the time since last OnGUI, but I'm not sure. To avoid problems, I placed the real rotation in Update and used two control booleans (rotLeft and rotRight) to communicate with OnGUI.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文