+ All Categories
Home > Documents > Programando com Scripts -...

Programando com Scripts -...

Date post: 08-Nov-2018
Category:
Upload: haduong
View: 221 times
Download: 0 times
Share this document with a friend
42
Programando com Scripts Prof. Fellipe Aleixo ([email protected])
Transcript

ProgramandocomScripts

Prof.FellipeAleixo([email protected])

Parte1– Básico

AgendadaParte1

1. IntroduçãoautilizaçãodescriptsnoUnity(definiçãodecomportamentoparaosobjetos)

2. Comousarvariáveis3. Comousaroperadores4. Comousarcondicionais5. Comousarlaçosderepetição

•Serápresumidooconhecimentopréviodefundamentosdeprogramaçãoorientadaaobjetos

Scripts

•Aformadedefinircomportamentos

•Sãoanexadosaosobjetosdojogoeatribueminteratividadeaosmesmos

•Processobásico:1. Criarumscript2. Anexaraumoumaisobjetosdojogo3. Definirquaisquerpropriedadesdoscriptcomvalores

oucomreferênciasaoutrosobjetosdojogo

CriandoScripts

• Importanteguarda-losemumapastaespecífica

•Clicandocomobotãodireitodomousesobreessapasta,selecioneCreate >C#Script• Dandoumnomeaomesmo

•Opçõesdelinguagem:• Nativas – C# eUnityScript (baseadaemJavaScript)• Extensões – possibilidadedeutilizaroutraslinguagens.NETcompilandoparaumaDLLcompatível

CriandoScripts

•Aoclicarnoscriptnavisãodeprojeto,navisãodoinspetoréexibidooconteúdodomesmo

•Clicandoduasvezessobreoscript,eleéabertoparaedição• VisualStudioouMonoDevelop

CriandoScripts

AnexandoumScriptaumObjeto

•Navisãodeprojeto– cliquesobreoscriptesegurando,arraste-oparaoobjetodesejado• Umscriptpodeserarrastadoatéumobjetona:(i)visãodehierarquia,(ii)visãodecenae(iii)visãodoinspetor• Oscripttorna-seumcomponentedoobjeto

AnexandoumScriptaumObjeto

EstruturadeumScriptBásico

•Seçãode“Using”– defineasbibliotecasqueserãoutilizadasnaconstruçãodoscriptusing UnityEngine;using System.Collections;

•Seçãodedeclaraçãodeclasse– defineonomedaclasserepresentandooscriptesuahierarquiapublic class HelloWorldScript :MonoBehaviour {}

EstruturadeumScriptBásico

•Conteúdodaclasse– defineatributosemétodos{

//Métodoutilizadoparaainicializaçãovoid Start(){}

//Métodoexecutadoumavezporframe dojogovoid Update(){}

}

•Qualquersaídageradapelojogoéexibidanajaneladeconsole–Window >Console

Variáveis/Atributos

•EmumscriptUnity,umavariávelpodeconter:• Tiposprimitivos(dalinguagemdeprogramação)• Objetosdojogo• Outrosscripts

•Definiçãodevariáveis:<variable type><name>;

•Exemplo:int num1;

Variáveis/Atributos

•Tiposdeescopo:declasseedemétodo/bloco

•Visibilidadedeatributos(escopodeclasse):public eprivate•Modificadoresdeacessibilidade

Operadores

Categoria OperadoresAritméticos + ; - ; * ; / e%Atribuição =; +=; -=; *=; /=; ++ e--Igualdade == ;> ;< ; >= ;<= e!=Lógicos && (and);|| (or)e ! (not)

EstruturasdeControledeFluxo

•AsestruturasdecontroledefluxoseguemopadrãodalinguagemC

•Condicionais(maisutilizadas):• IF• IF– ELSE• IF– ELSEIF

• Laçosderepetição(maisutilizadas):•WHILE• FOR

Parte2– InteraçãodosObjetos

AgendadaParte2

1. Comoescrevermétodos2. Comocapturaraentradadousuário3. Comotrabalharcomcomponenteslocais4. Comotrabalharcomobjetosdojogo

Métodos

•Podehaverumaconfusãocomaprogramaçãoorientadaaobjetos• Numscriptdefinimosmétodosoufunções?

•Método:representaumaaçãooupropósitoúnico• Podemtrabalharjuntospararesolvertarefascomplexas

Métodos

•Métodospadronizados:• Start:contémocódigoaserexecutadoquandoaprimeiracenativerinício• Update:contémocódigoaserexecutadoemcadaframenodesenrolardacena

•Padrãoparadefinição:<return type><name>(<parameters>){

<Inside the method's block>}

EscrevendoMétodos

•Primeiropasso,questionar-sesobre:• Qualatarefaespecíficaaserrealizada?• Quaisinformaçõesexternassãonecessárias?• Énecessáriodaralgumainformaçãocomoretorno?

•Exemplo:umdadopersonagemfoiatingidoporumaboladefogo,precisamosescreverummétodoqueremove5unidadesdevidadopersonagemint TakeDamageFromFireball(){

int playerHealth =100;return playerHealth – 5;

}

UsandoMétodos

•Umavezdefinido,ométodopodeserinvocado• Apartirdamesmaclasse• Ouporoutroscriptquepossuaumareferência

•Exemplo:int x =TakeDamageFromFireball();print ("Playerhealth:"+x);

EntradadoUsuário

•Aentradadousuáriopodeacontecerapartirdediferentesmeios– teclados,controles,toque,etc.

•Entradabásica:• ComoUnity,podemosprogramarumaaçãointerativaquandofordetectadoqueumadadateclafoipressionada• Porém,émaisaconselhadoutilizarumsistemademapeamentogenéricodecontroles• SãoconfiguradosatravésdoInputManager

EntradadoUsuário

•Paragerenciaraentradadousuário,utilizamosEdit >ProjectSettings>Input• Podeverosvárioseixosassociadosasaçõesdeentrada• Exemplo:

PropriedadesdosEixos

Propriedade Descrição

Name Nomedoeixo – comoéreferenciadoemcódigo

Descriptive Name/Descriptive NegativeName

Nome queseráexibidoaojogadornaconfiguraçãodojogo– onome“negativo”éequivalenteaonomedoeixooposto

NegativeButton/PositiveButton

Osbotõesquepassam osvalores,negativosepositivos,paraoeixo(ex.:setasesquerdaedireita)

Alt NegativeButton/Alt PositiveButton

Botõesalternativos quepassamvaloresparaoeixo(ex.:asteclasAeD paraoeixohorizontal)

Gravity Quãorápidoo eixoiráretornaraozero

Dead Entradasmenoresqueessevalorserãoignoradas

Sensitivity Quãorapidamenteo eixorespondeàentrada

PropriedadesdosEixos

Propriedade Descrição

Snap Quandomarcada, faráqueoeixováimediatamenteazeroquandoadireçãoopostaforpressionada

Invert Iráinverteroscontroles, quandomarcada

Type OTipodaentrada.Seserábotõesdomouse, teclado,movimentodomouseoumovimentodojoystick

Axis OEixocorrespondentedodispositivodeentrada(nãoseaplica aosbotões)

Joy Num Qual ojoystickseráutilizadoparaaentrada.Porpadrão,receberáentradadetodososjoysticks

ProgramandoaEntrada

•Umavezqueoseixosforamdefinidos,trabalharcomosmesmosnocódigoésimples• SeráutilizadaaclasseInput,maisespecificamenteométodoGetAxis() – informandoonomedoeixo

float hVal =Input.GetAxis("Horizontal");

•Paraoeixohorizontal:• Pressionarasetadaesquerda(ouoA)à valornegativo• Pressionarasetadadireita(ouoD)à valorpositivo

EntradadeumaTeclaEspecífica

•Umoutrotipodeentradamuitoutilizadaédeumateclaespecífica– tambémutilizaaclasseInput•MétodoGetKey() – queretornaumbooleanoindicandoquandoamesmafoiteclada

bool isKeyDown =Input.GetKey(KeyCode.K);

•Cadateclapossuiumcódigoespecífico

EntradadoMouse

•Paraomouse,precisamserconsideradodoiscomponentes:(i)movimentoe(ii)botões• NovamenteéutilizadaaclasseInput eométodoGetMouseButtonDown()– recebendouminteiroidentificandoumbotãoespecífico

bool isButtonDown;//seobotãoesquerdodomousefoipressionadoisButtonDown =Input.GetMouseButtonDown(0);//seobotãodireitodomousefoipressionadoisButtonDown =Input.GetMouseButtonDown(1);//seobotãocentraldomousefoipressionadoisButtonDown =Input.GetMouseButtonDown(3);

EntradadoMouse

•OmovimentodomousesedánoseixosX eY,omovimentoécapturadocomométodoGetAxis()

float value;//movimentonoeixoXvalue =Input.GetAxis("MouseX");//movimentonoeixoYvalue =Input.GetAxis("MouseY");

•Omovimentodomouseédadoatravésdamedidadodeslocamentoapenas desdeoúltimoframe

AcessandoComponentesLocais

•Comopodeservistodavisãodoinspetor,umobjetosécompostodevárioscomponentes• Componentestaiscomo:umatransformada,umrenderizador,umaluz,umacâmera,etc.• Scriptstambémsãocomponentes

•Épossívelinteragircomcomponentesemtempodeexecução– énecessáriorecupera-los(noStart)•MétodoGetComponent<Type>()

AcessandoComponentesLocais

•OmétodoGetComponent retornaoprimeirodotipoespecificadoanexadoaomesmoobjetoaoqualoscriptestáassociado

//Umatributoparaarmazenarocomponentedeluzprivate LightlightComponent;

Start(){lightComponent =GetComponent<Light>();lightComponent.type =LightType.Directional;

}

AcessandoComponentesLocais

•Acessandoatransformada(comoobjetoimplícito):• Alterandoessecomponente,vocêmoveoobjetonacena• Métodos– Translate(),Rotate()elocalScale()

//MoveoobjetopositivamentepeloeixoX//O'0f'significa0comoumvalordepontoflutuante(real)transform.Translate(0.05f,0f,0f);

//Rotaciona oobjetopeloeixoZtransform.Rotate(0f,0f,1f);

//Aumentaotamanhodoobjetoaodobroemtodasasdireçõestransform.localScale =newVector3(1.5f,1.5f,1.5f);

AcessandoOutrosObjetos

•Emalgunsmomentoséútilqueumscriptmanipuleoutrosobjetoseosseuscomponentes

•Pararecuperaroutrosobjetosatravésdoeditor:• Criamosumatributo(público)dotipoGameObject• Navisãodoinspetor,selecionamosoobjetodesejado

//Esteéoobjetodojogoquesedesejaacessarpublic GameObject objectYouWant;

AcessandoOutrosObjetos

•ComoscriptsejachamandodeSomeClassScript,avisãodoinspetorseriaaseguinte:• Tambémépossívelarrastaroobjetoatéolocalindicado

AcessandoOutrosObjetos

•Outraformadeacessaroutrosobjetoséutilizarummétododebusca– Find(),FindWithTag() eFindObjectByType()• Buscas(i)pornome,(ii)porrótuloou(iii)portipo

public class SomeClassScript :MonoBehaviour {//Esteéoobjetodojogoquesedesejaacessarprivate GameObject target;//Notequenãoénecessárioserpúblicoaobuscaroobjeto

void Start(){target =GameObject.Find("Cube");

}}

AcessandoOutrosObjetos

•Paraadefiniçãoderótulos(tags):

AcessandoOutrosObjetos

•Apósadefiniçãodorótulo,oobjetoéassociado:

AcessandoOutrosObjetos

•Buscandoobjetosporrótulo:

public class SomeClassScript :MonoBehaviour {//Esteéoobjetoquesedesejaacessarprivate GameObject target;

void Start(){target =GameObject.FindWithTag("TargetCube");

}}

AcessandoOutrosObjetos

•Buscandoobjetosportipo(scriptassociado):

public class SomeClassScript :MonoBehaviour {//Esteéoobjetoquesedesejaacessarprivate GameObject target;

void Start(){target =GameObject.FindObjectByType

<CubeScript>();}

}

ModificandoComponentesdoObjeto

•Umavezcomumareferênciaaumoutroobjeto–podemosmanipularseuscomponentes

//Acessoaocomponentelocal,nãoéoquesedesejatransform.Translate(0f,0f,0f);

//Acessoaoobjetoalvo,éissoquesedesejatargetObject.transform.Translate(0f,0f,0f);

Exercitando

1. Crieumnovoprojetooucena2. Adicioneumcubo,posicionadoem(0,0,-5)3. Crieumapasta“scripts”ecrieumnovoscript

CubeControlScript,associadoaocubo4. Comaseguintefuncionalidade:

a) Quandoforpressionadaassetasesquerdaedireita–movimentamocuboaolongodoeixoX

b) Assetasparacimaeparabaixo– movimentamocubonoeixoY (positivamenteounegativamente)

c) QuandoomousesemoveraolongodoeixoY,rotacione ocubonoeixoX.QuandoomovimentofornoeixoX,rotacione ocubonoeixoY

d) QuandoforpressionadaateclaM,aumenteaescaladocubo.NocasodateclaN,diminuaaescaladocubo

ParamaisInformações

•Confiraotutorialoficial(emportuguês):• http://unity3d.com/pt/learn/tutorials/topics/scripting

•ConfiratambémomanualdoUnity (sobreScripts):• http://docs.unity3d.com/Manual/ScriptingSection.html


Recommended