Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
public class Trigger : MonoBehaviour {
public GameObject prefab;
public GameObject cuby;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if(Input.GetKeyDown(KeyCode.F))
{
Gravity();// создаю триггер
}
if(Input.GetKeyDown(KeyCode.Z))
{
CreateCubys(); // создаю несколько кубиков возле плеера
}
}
public void Gravity()
{
GameObject pref = Instantiate(prefab,new Vector3(this.transform.position.x, 10f, this.transform.position.z), Quaternion.identity) as GameObject;
}
public void CreateCubys()
{
float i = 1f;
GameObject pref1 = Instantiate(cuby,new Vector3(this.transform.position.x+0.5f+i, this.transform.position.y, this.transform.position.z), Quaternion.identity) as GameObject;
GameObject pref2 = Instantiate(cuby,new Vector3(this.transform.position.x-0.5f+i, this.transform.position.y, this.transform.position.z), Quaternion.identity) as GameObject;
GameObject pref3 = Instantiate(cuby,new Vector3(this.transform.position.x, this.transform.position.y, this.transform.position.z+0.5f+i), Quaternion.identity) as GameObject;
GameObject pref4 = Instantiate(cuby,new Vector3(this.transform.position.x, this.transform.position.y, this.transform.position.z-0.5f+i), Quaternion.identity) as GameObject;
GameObject pref5 = Instantiate(cuby,new Vector3(this.transform.position.x+0.5f+i, this.transform.position.y, this.transform.position.z+0.5f+i), Quaternion.identity) as GameObject;
GameObject pref6 = Instantiate(cuby,new Vector3(this.transform.position.x-0.5f+i, this.transform.position.y, this.transform.position.z-0.5f+i), Quaternion.identity) as GameObject;
GameObject pref7 = Instantiate(cuby,new Vector3(this.transform.position.x+0.5f+i, this.transform.position.y, this.transform.position.z-0.5f+i), Quaternion.identity) as GameObject;
GameObject pref8 = Instantiate(cuby,new Vector3(this.transform.position.x-0.5f+i, this.transform.position.y, this.transform.position.z+0.5f+i), Quaternion.identity) as GameObject;
}
}
using System.Collections;
public class Trigger : MonoBehaviour {
public GameObject prefab;
public GameObject cuby;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if(Input.GetKeyDown(KeyCode.F))
{
Gravity();// создаю триггер
}
if(Input.GetKeyDown(KeyCode.Z))
{
CreateCubys(); // создаю несколько кубиков возле плеера
}
}
public void Gravity()
{
GameObject pref = Instantiate(prefab,new Vector3(this.transform.position.x, 10f, this.transform.position.z), Quaternion.identity) as GameObject;
}
public void CreateCubys()
{
float i = 1f;
GameObject pref1 = Instantiate(cuby,new Vector3(this.transform.position.x+0.5f+i, this.transform.position.y, this.transform.position.z), Quaternion.identity) as GameObject;
GameObject pref2 = Instantiate(cuby,new Vector3(this.transform.position.x-0.5f+i, this.transform.position.y, this.transform.position.z), Quaternion.identity) as GameObject;
GameObject pref3 = Instantiate(cuby,new Vector3(this.transform.position.x, this.transform.position.y, this.transform.position.z+0.5f+i), Quaternion.identity) as GameObject;
GameObject pref4 = Instantiate(cuby,new Vector3(this.transform.position.x, this.transform.position.y, this.transform.position.z-0.5f+i), Quaternion.identity) as GameObject;
GameObject pref5 = Instantiate(cuby,new Vector3(this.transform.position.x+0.5f+i, this.transform.position.y, this.transform.position.z+0.5f+i), Quaternion.identity) as GameObject;
GameObject pref6 = Instantiate(cuby,new Vector3(this.transform.position.x-0.5f+i, this.transform.position.y, this.transform.position.z-0.5f+i), Quaternion.identity) as GameObject;
GameObject pref7 = Instantiate(cuby,new Vector3(this.transform.position.x+0.5f+i, this.transform.position.y, this.transform.position.z-0.5f+i), Quaternion.identity) as GameObject;
GameObject pref8 = Instantiate(cuby,new Vector3(this.transform.position.x-0.5f+i, this.transform.position.y, this.transform.position.z+0.5f+i), Quaternion.identity) as GameObject;
}
}
Второй скрипт висит на префабе содержащем триггер и принимает префаб содержащий кубик (как коллайдер)
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
public class Gravity : MonoBehaviour {
public Collider my;
private bool up;
private bool down;
// Use this for initialization
void Start () {
up=true;
down=true;
}
// Update is called once per frame
void Update () {
if(up && down)
OnTriggerStay(my);
}
void OnTriggerStay(Collider other) {
if (other.attachedRigidbody)
{
if(up){
other.attachedRigidbody.constantForce.force = new Vector3(0f,10f,0f); // 1 раз применяем силу к объекту
up=false; //
}
if(other.transform.position.y>5f && down){ // если предмет поднялся выше чем 5 метров
other.attachedRigidbody.constantForce.force = new Vector3(0f,-20f,0f); // бросаем на землю с удвоенной силой + сила гравитации
if(other.attachedRigidbody.velocity.y==0) // если скорость предмета по оси У равна нулю
{
down=false; // отключаем функционал данного триггера
}
}
}
}
}
using System.Collections;
public class Gravity : MonoBehaviour {
public Collider my;
private bool up;
private bool down;
// Use this for initialization
void Start () {
up=true;
down=true;
}
// Update is called once per frame
void Update () {
if(up && down)
OnTriggerStay(my);
}
void OnTriggerStay(Collider other) {
if (other.attachedRigidbody)
{
if(up){
other.attachedRigidbody.constantForce.force = new Vector3(0f,10f,0f); // 1 раз применяем силу к объекту
up=false; //
}
if(other.transform.position.y>5f && down){ // если предмет поднялся выше чем 5 метров
other.attachedRigidbody.constantForce.force = new Vector3(0f,-20f,0f); // бросаем на землю с удвоенной силой + сила гравитации
if(other.attachedRigidbody.velocity.y==0) // если скорость предмета по оси У равна нулю
{
down=false; // отключаем функционал данного триггера
}
}
}
}
}
Проблемы в следующем: 1 триггер работает только для 1 кубика. Если убрать проверку переменных up и down, то 1 триггер поднимает все кубики, но он работает постоянно, и после первого шмяка об землю - поднимает кубики снова и снова пока они не улетят из зоны его действия, а еще, при шмякании об землю, некоторые кубики проваливаются под терру =\ И еще, во втором скрипте я явно указываю какой объект (префаб) будет обрабатывать скрипт на триггере, можно сделать чтобы он автоматически находил все объекты в зоне его действия, и срабатывал 1 раз для каждого объекта??