我正在嘗試在 Unity 中構建一個 3D 游戲,在這個游戲中,我希望一個物件在玩家與其碰撞時搖晃/搖晃。
我可以在 2D 中進行,但我不知道如何將其轉換為 3D。
這是我的代碼:
using System.Collections;
using UnityEngine;
public class ItemNudge : MonoBehaviour
{
private WaitForSeconds pause;
private bool isAnimating = false;
private void Awake()
{
pause = new WaitForSeconds(0.04f);
}
private void OnTriggerEnter2D(Collider2D collision)
{
if (isAnimating == false)
{
if (gameObject.transform.position.x < collision.gameObject.transform.position.x)
{
StartCoroutine(RotateAntiClock());
}
else
{
StartCoroutine(RotateClock());
}
//Play rustle sound if player
}
}
private void OnTriggerExit2D(Collider2D collision)
{
if (isAnimating == false)
{
if (gameObject.transform.position.x > collision.gameObject.transform.position.x)
{
StartCoroutine(RotateAntiClock());
}
else
{
StartCoroutine(RotateClock());
}
//Play rustle sound if player
}
}
private IEnumerator RotateAntiClock()
{
isAnimating = true;
for (int i = 0; i < 4; i )
{
gameObject.transform.Rotate(0f, 0f, 2f);
yield return pause;
}
for (int i = 0; i < 5; i )
{
gameObject.transform.Rotate(0f, 0f, -2f);
yield return pause;
}
gameObject.transform.Rotate(0f, 0f, 2f);
yield return pause;
isAnimating = false;
}
private IEnumerator RotateClock()
{
isAnimating = true;
for (int i = 0; i < 4; i )
{
gameObject.transform.Rotate(0f, 0f, -2f);
yield return pause;
}
for (int i = 0; i < 5; i )
{
gameObject.transform.Rotate(0f, 0f, 2f);
yield return pause;
}
gameObject.transform.Rotate(0f, 0f, -2f);
yield return pause;
isAnimating = false;
}
}
uj5u.com熱心網友回復:
改變這個:
OnTriggerEnter2D(Collider2D collision)..
OnTriggerExit2D(Collider2D collision)...
對此:
OnTriggerEnter(Collider collision)..
OnTriggerExit(Collider collision)...
并確保 3D 物件上的碰撞器不是二維碰撞器,而是常規碰撞器。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/536477.html
標籤:C#unity3d
