繁体   English   中英

如何统一限制 z 轴旋转?

[英]How do I limit z-axis rotation in unity?

我正在为 android 编写 2d 游戏。 我有一个从 180 度旋转到 - 180 度的角色。 但我需要将 z 的变换旋转限制为 50 和 -50。 我知道可以通过 Math.Clamp() 实现,但我无法应用它。 请帮助我:这是我的代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public : MonoBehaviour
{
 
    private Camera myCam;
    private Vector3 screenPos;
    private float angle0ffset;
    private Collider2D col;
    private void Start()
    {
myCam = Camera.main;
col = GetComponent<Collider2D>();
       
    }
    private void Update()
   {
     
Vector3 mousePos = myCam.ScreenToWorldPoint(Input.mousePosition);
   ( (Input.GetMouseButtonDown(0))
 
screenPos = myCam.WorldToScreenPoint(transform.position);
Vector3 vec3 = Input.mousePosition - screenPos;
angle0ffset = (Mathf.Atan2(transform.right.y, transform.right.x) - Mathf.Atan2(vec3.y, vec3.x)) * Mathf.Rad2Deg;
 
   }
      }
  ( (Input.GetMouseButton(0))
   {
 
  if(col == Physics2D.OverlapPoint(mousePos))
    {
      Vector3 vec3 = Input.mousePosition ;
      float angl = Mathf.Atan2(vec3.y, vec3.x) * Mathf.Rad2Deg;
      transform.eulerAngles = new Vector3(0,0, angl + angle0ffset);
     
    }  
     
  }
     
           }  
    }

实际上,您可以做的是使用Mathf.Clamp() 你会做的是:

rotationZ = Mathf.Clamp(transform.localRotation.z, -lookZLimit, lookZLimit); transform.localRotation = Quaternion.Euler(rotationZ, 0, 0);

在您的情况下,您的rotationX将是:

rotationZ = Mathf.Clamp(transform.localRotation.z, -50, 50);

然后应用新计算的旋转:

transform.localRotation = Quaternion.Euler(rotationZ, 0, 0);

注意:这必须在Update()中完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM