Scripturi, completați martorul

O zi bună tuturor și vă mulțumesc că ați oprit!

Și dacă te-ai uitat deja, răspunde mb la întrebările amatoare?

Și încă un lucru nu este clar, așa cum spunem, permiteți-mi să fac ca un obiect să-și schimbe poziția în funcție de poziția celuilalt, să spunem că o minge și-a schimbat culoarea la fel ca prima.






Cum într-un scenariu este posibil să ajungeți la primul dintr-un script al celui de-al doilea și să setați aceiași parametri pentru al doilea?

Sper că nu am cerut foarte multe la un moment dat)

1. Nu există scripturi globale, dacă doriți, de exemplu, să creați un sistem pentru calcularea punctelor sau a meniurilor, acest script ar trebui să stea pe care dintre obiectele de pe scena.
2. Pentru a afla starea unui alt obiect, trebuie să îl găsiți. Și apoi uitați-vă la proprietățile sale.

Complicarea este simplă, simplificarea este dificilă.

OlegNick a scris: 1. Nu există scripturi globale, dacă doriți, de exemplu, să creați un sistem de punctare puncte sau meniuri, acest script ar trebui să stea pe care dintre obiectele de pe scena.
2. Pentru a afla starea unui alt obiect, trebuie să îl găsiți. Și apoi uitați-vă la proprietățile sale.

1. Greșit. Nu trebuie să atârniți nimic. Pur și simplu același script motor nu moștenesc de la Monobehaviour, ci de la cel de bază, care, la rândul său, se poate mânca ușor în sine în dosar.

Prima sferă reacționează la presele de butoane.

Text ascuns: arată

utilizând UnityEngine;
utilizând System.Collections;

clasa publică Sphere1ChangerColor. MonoBehaviour


public Vector4 culoare = nou Vector4 # 40; 0, 0, 0, 1 # 41 ;;
privat GameObject Sp1;

// Utilizați acest lucru pentru inițializare
void Start # 40; # 41; Sp1 = GameObject.Find "Sphere1" # 41 ;;

// Actualizarea se numește o dată pe cadru
void Update # 40; # 41; Vector4 newColor = culoare;

dacă ## Input.GetKey # 40; KeyCode.Q # 41; # 41;
newColor + = Vector4 nou 0.1f, 0, 0. 0 # 41 ;;


dacă ## Input.GetKey # 40; KeyCode.A # 41; # 41;
newColor - = Vector4 nou 0.1f, 0, 0. 0 # 41 ;;

dacă ## Input.GetKey # 40; KeyCode.W # 41; # 41;
newColor + = Vector4 nou # 40; 0, 0.1f, 0. 0 # 41 ;;


dacă ## Input.GetKey # 40; KeyCode.S # 41; # 41;
newColor - = Vector4 nou # 40; 0, 0.1f, 0. 0 # 41 ;;

dacă ## Input.GetKey # 40; KeyCode.E # 41; # 41;
newColor + = Vector4 nou 0, 0, 0,1f. 0 # 41 ;;








dacă ## Input.GetKey # 40; KeyCode.D # 41; # 41;
newColor - = Vector4 nou 0, 0, 0,1f. 0 # 41 ;;


//newColor.Normalize#40;#41 ;;
color = newColor;


Și a doua sferă copiază pur și simplu culoarea primei.

Text ascuns: arată

utilizând UnityEngine;
utilizând System.Collections;

clasa publică Sphere2ColorChanger. MonoBehaviour

privat GameObject Sp1;
privat GameObject Sp2;
// Utilizați acest lucru pentru inițializare
void Start # 40; # 41; Sp1 = GameObject.Find # 40; "Sphere1" # 41 ;;
Sp2 = GameObject.Find # 40; "Sphere2" # 41 ;;

// Actualizarea se numește o dată pe cadru
void Update # 40; # 41;

Vector4 Sp1Color = Sp1.renderer.material.color;
Sp2.renderer.material.color = Sp1Color;

Acum voi încerca să fac un script global bazat pe clasa de bază.

Am scris doar un script global ne-atașat, care mărește puțin sferele,

Text ascuns: arată

utilizând UnityEngine;
utilizând System.Collections;

clasa publică globală. MonoBehaviour

public GameObject Sp1;
public GameObject Sp2;


// Utilizați acest lucru pentru inițializare
void Start # 40; # 41; Sp1 = GameObject.Find # 40; "Sphere1" # 41 ;;
Sp2 = GameObject.Find # 40; "Sphere2" # 41 ;;

Sp1.transform.localScale = Vector3 nou 1, 2, 1 # 41 ;;
Sp2.transform.localScale = Vector3 nou 1, 3, 1 # 41 ;;

// Actualizarea se numește o dată pe cadru
void Update # 40; # 41;

Dar nu a funcționat atâta timp cât nu am legat-o de un manechin, aici, în general, este clar că scârțâitul aici în sine nu poate exista deloc.

Mulțumesc, am observat și eu. Etichete eliminate. mb cumva trebuie să formatați codul? Și apoi text simplu nu este convenabil pentru a înțelege logica codului, fără formatarea originalului (

Fac ceva de genul pong, chiar și mai ușor, un simplu cub care rulează se ridică de pe pereți. Patru pereți cub interior, podea.
Și întrebarea în acest sens, ce metode sunt utilizate pentru a determina coliziunea?
Am schițat acest scenariu până acum, dar ceva nu se întâmplă sau, mai degrabă, trece prin peretele drept.

Text ascuns: arată

utilizând UnityEngine;
utilizând System.Collections;

clasa publica Pong. MonoBehaviour

public Vector3 position = new Vector3 # 40; 0,1,0 # 41 ;;
public Vector3 velocitate = new Vector3 # 40; 100,0,100 # 41 ;;
public GameObject pongObj;

privat GameObject [] Pereți = new GameObject [4];


// Utilizați acest lucru pentru inițializare
void Start # 40; # 41; pongObj = GameObject.Find # 40; "Pong" # 41 ;;
Pereți [0] = GameObject.Find # 40; "Cube1" # 41 ;;
Pereți [1] = GameObject.Find # 40; "Cube2" # 41 ;;
Pereți [2] = GameObject.Find # 40; "Cube3" # 41 ;;
Pereți [3] = GameObject.Find # 40; "Cube4" # 41 ;;
>

void OnCollisionEnter # 40; Coliziune alte # 41;
// Vector3 otherCenter = other.transform.localPosition;
// Vector3 pongCenter = pongObj.transform.localPosition;

GameObject obj = alt.gameObject;

dacă # 40; obj.tag == "WallsTag" # 41;
viteza = -velocitate;
Debug.Log # 40; "sa ciocnit cu pereții!" # 41 ;;
return;
>

Debug.Log # 40; "se ciocnește cu altceva decât cu pereții!" # 41 ;;
>

// Actualizarea se numește o dată pe cadru
void Update # 40; # 41; poziția + = viteza * Time.deltaTime;
pongObj.transform.localPosition = poziție;
>
>







Trimiteți-le prietenilor: