通过鼠标单击统一控制对象旋转

时间:2019-02-27 10:08:55

标签: unity3d

我需要统一的项目帮助

我想通过单击停止每个对象。

到目前为止我做了什么: 我所有的对象都旋转,但是当我单击任意位置时,它们都会停止,仅当我单击每个对象时,才需要它们停止。

这是我使用System.Collections的代码; 使用System.Collections.Generic; 使用UnityEngine;

公共类EarthScript:MonoBehaviour {     公共布尔rotateObject = true;

public GameObject MyCenter;
// Start is called before the first frame update
void Start()
{   
}
// Update is called once per frame
void Update()
{
    if (Input.GetMouseButtonDown(0))
    {

        if(rotateObject == true)
        {
            rotateObject = false;
        }
        else
        {
            rotateObject = true;
        }
    }
    if(rotateObject == true)
    {
         Vector3 axisofRotation = new Vector3(0,1,0);
        transform.RotateAround(MyCenter.transform.position,axisofRotation, 30*Time.deltaTime);
        transform.Rotate(0,Time.deltaTime*30,0,Space.Self);
    }
}

}`

1 个答案:

答案 0 :(得分:0)

有两种方法可以实现这一目标。两种方式都需要您在对象上附加对撞机。

一种方法是通过光标从摄像机射线投射到场景中,以检查当前在光标下的对象。

第二种方法是使用unity的EventSystem。您将需要在相机上附加一个PhysicsRaycaster,但是随后您会从事件系统中获得回调,从而简化了检测(由Unity处理,因此无需编写代码)

using UnityEngine;
using UnityEngine.EventSystems;


public class myClass: MonoBehaviour, IPointerClickHandler
{
   public GameObject MyCenter;
   public void OnPointerClick (PointerEventData e)
   {
    rotateObject=!rotateObject;
   }


   void Update()
   {

    if(rotateObject == true)
    {
         Vector3 axisofRotation = new Vector3(0,1,0);
        transform.RotateAround(MyCenter.transform.position,axisofRotation, 30*Time.deltaTime);
        transform.Rotate(0,Time.deltaTime*30,0,Space.Self);
    }
}