Полный код:
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class TriggerSliderFront : MonoBehaviour {
public GameObject UIGENERATOR;
public GameObject Generator1;
public GameObject Player1;
public GameObject generatoridle;
public GameObject Sound1;
public Transform gentrans;
public AudioClip[] impact;
public AudioSource audioSource;
public Slider Slider;
public Rigidbody Rig;
public Animator panim;
bool istrigger = false;
bool ispressed = false;
private void Start()
{
UIGENERATOR.SetActive(false);
Sound1.SetActive(false);
Player1 = GameObject.FindWithTag("Player");
Rig = Player1.GetComponent<Rigidbody>();
panim = Player1.GetComponent<Animator>();
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.Mouse0) & istrigger == true)
{
ispressed = true;
}
if (Input.GetKeyUp(KeyCode.Mouse0) || istrigger == false)
{
ispressed = false;
panim.SetBool("Repair", false);
}
if (ispressed == true)
{
Slider.value = Slider.value + Time.deltaTime * 0.05f;
panim.SetBool("Repair", true);
Player1.transform.position = new Vector3(gentrans.position.x, gentrans.position.y, gentrans.position.z);
Player1.transform.rotation = Quaternion.Euler(gentrans.transform.rotation.x, gentrans.transform.rotation.y + 180, gentrans.transform.rotation.z);
if (!audioSource.isPlaying)
{
audioSource.PlayOneShot(impact[Random.Range(0, impact.Length)], 10F);
}
}
if (Slider.value >=1)
{
UIGENERATOR.SetActive(false);
panim.SetBool("Repair", false);
generatoridle.GetComponent<Animator>().SetBool("aktiv", true);
Sound1.SetActive(true);
Destroy(Generator1);
}
}
private void OnTriggerEnter(Collider other)
{
if (other.tag == "Player")
{
// Debug.Log("В триггере");
UIGENERATOR.SetActive(true);
istrigger = true;
}
}
private void OnTriggerExit(Collider other)
{
if (other.tag == "Player")
{
UIGENERATOR.SetActive(false);
istrigger = false;
}
}
}
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class TriggerSliderFront : MonoBehaviour {
public GameObject UIGENERATOR;
public GameObject Generator1;
public GameObject Player1;
public GameObject generatoridle;
public GameObject Sound1;
public Transform gentrans;
public AudioClip[] impact;
public AudioSource audioSource;
public Slider Slider;
public Rigidbody Rig;
public Animator panim;
bool istrigger = false;
bool ispressed = false;
private void Start()
{
UIGENERATOR.SetActive(false);
Sound1.SetActive(false);
Player1 = GameObject.FindWithTag("Player");
Rig = Player1.GetComponent<Rigidbody>();
panim = Player1.GetComponent<Animator>();
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.Mouse0) & istrigger == true)
{
ispressed = true;
}
if (Input.GetKeyUp(KeyCode.Mouse0) || istrigger == false)
{
ispressed = false;
panim.SetBool("Repair", false);
}
if (ispressed == true)
{
Slider.value = Slider.value + Time.deltaTime * 0.05f;
panim.SetBool("Repair", true);
Player1.transform.position = new Vector3(gentrans.position.x, gentrans.position.y, gentrans.position.z);
Player1.transform.rotation = Quaternion.Euler(gentrans.transform.rotation.x, gentrans.transform.rotation.y + 180, gentrans.transform.rotation.z);
if (!audioSource.isPlaying)
{
audioSource.PlayOneShot(impact[Random.Range(0, impact.Length)], 10F);
}
}
if (Slider.value >=1)
{
UIGENERATOR.SetActive(false);
panim.SetBool("Repair", false);
generatoridle.GetComponent<Animator>().SetBool("aktiv", true);
Sound1.SetActive(true);
Destroy(Generator1);
}
}
private void OnTriggerEnter(Collider other)
{
if (other.tag == "Player")
{
// Debug.Log("В триггере");
UIGENERATOR.SetActive(true);
istrigger = true;
}
}
private void OnTriggerExit(Collider other)
{
if (other.tag == "Player")
{
UIGENERATOR.SetActive(false);
istrigger = false;
}
}
}
И второй вопрос касательно:
Синтаксис:
Используется csharp
Player1.transform.rotation = Quaternion.Euler(gentrans.transform.rotation.x, gentrans.transform.rotation.y + 180, gentrans.transform.rotation.z);
Объект gentrans имеет заданные параметры rotation, но персонаж их не перенимает, изменяется только координата y и только при указании значения (соответственно 180). Пробовал создать объект на основной сцене и получать его rotate через find и тем же путем далее, то же самое, как быть? Хотелось бы вычислять относительно самого объекта в префабе. (lookat тоже пробовал даже с мировыми координатами типа vector3.left - бесполезно)
Благодарю за помощь, буду ждать ваших ответов!
P.S. Ну и ваши корректировочки относительно оптимизации кода выслушаю с радостью!