Персонаж парит в воздухе, когда анимация смерти воспроизводится в единстве.C#

Место общения программистов C#
Ответить
Anonymous
 Персонаж парит в воздухе, когда анимация смерти воспроизводится в единстве.

Сообщение Anonymous »

Я новичок в Unity и пытаюсь создать небольшую короткую игру. Все идет гладко, кроме анимации смерти, которая должна воспроизводиться, когда таймер достигает нуля или заканчивается здоровье персонажа. Анимация воспроизводится, но мой персонаж парит в воздухе во время воспроизведения анимации.
Смотрите ниже:
Персонаж стоит нормально
воспроизводится анимация смерти
I попробовал изменить размер контроллера персонажа, так как подозревал, что это источник моей проблемы:
ctrl.height= 0.16;
ctrl.radius= 0.14;

Я также использовал raycasting, когда искал в Интернете и обнаружил, что это может быть полезно:
RaycastHit hit;

// ارسال Ray به سمت پایین از موقعیت فعلی پلیر
if (Physics.Raycast(transform.position, Vector3.down, out hit, Mathf.Infinity))
{
print("Raycast");
// تنظیم موقعیت Y کاراکتر بر اساس موقعیت برخورد با زمین
transform.position = new Vector3(transform.position.x, hit.point.y, transform.position.z);

}

Увы, ни один из них не сработал. Я также проверил, оператор if работает нормально. Честно говоря, я не знаю, что еще я могу сделать.
мой код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class Movement : MonoBehaviour
{

[SerializeField]private GameObject endtext;
[SerializeField]private GameObject restart;
[SerializeField]private GameObject dust;
[SerializeField]private GameObject Timertext;
[SerializeField]private GameObject[] health;
private CharacterController ctrl;
private float jump;
private Animator playerAnimator;
private float gravity;
private int counter;
private float timer;
public bool win;
public bool gameover;
// Start is called before the first frame update
void Start()
{

gravity= 15f;
counter= 0;
timer= 25;
gameover= false;
win= false;
endtext.SetActive(false);
restart.SetActive(false);
ctrl = GetComponent();
playerAnimator = GetComponent();
playerAnimator.SetBool("IsRun", false);
playerAnimator.SetBool("IsJump", false);
playerAnimator.SetBool("IsDead", false);
playerAnimator.SetBool("FirstState", true);
}

// Update is called once per frame
void Update()
{
if (!(win) && !(gameover))
{

jump -= gravity * Time.deltaTime;
Vector3 direction= new Vector3(Input.GetAxis("Horizontal") * Time.deltaTime * 5, jump * Time.deltaTime, 0);
ctrl.Move(direction);
if(Input.GetAxis("Horizontal") > 0)
{
transform.rotation= Quaternion.Euler(0, 90, 0);
}
if(Input.GetAxis("Horizontal") < 0)
{
transform.rotation= Quaternion.Euler(0, 270, 0);
}
if(Input.GetKeyDown(KeyCode.Space) && (ctrl.isGrounded))

{
jump= 8;
playerAnimator.SetBool("IsJump", true);
}
else
{
playerAnimator.SetBool("IsJump", false);
}

if(direction.x != 0)
{
playerAnimator.SetBool("IsRun", true);
}
else
{
playerAnimator.SetBool("IsRun", false);
}

timer -= Time.deltaTime;
Timertext.GetComponent().text= ((int)timer).ToString() + " Seconds";

if(Vector3.Distance(transform.position,GameObject.Find("EndPoint").transform.position)

Подробнее здесь: https://stackoverflow.com/questions/789 ... d-in-unity
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»