赞
踩
unityc#基础
1.脚本作为行为组件
using UnityEngine; using System.Collections; public class ExampleBehaviourScript : MonoBehaviour { void Update() { if (Input.GetKeyDown(KeyCode.R)) //R键被按下 { GetComponent<Renderer> ().material.color = Color.red;//颜色变为红色 } if (Input.GetKeyDown(KeyCode.G)) { GetComponent<Renderer>().material.color = Color.green; } if (Input.GetKeyDown(KeyCode.B)) { GetComponent<Renderer>().material.color = Color.blue; } } }
2.变量和函数
using UnityEngine; using System.Collections; public class VariablesAndFunctions : MonoBehaviour { int myInt = 5; void Start () { myInt = MultiplyByTwo(myInt); //调用函数 Debug.Log (myInt); } int MultiplyByTwo (int number) { int ret; ret = number * 2; return ret; } }
3.惯例与句法
using UnityEngine;
using System.Collections;
public class BasicSyntax : MonoBehaviour
{
void Start ()
{
Debug.Log(transform.position.x);
if(transform.position.y <= 5f)
{
Debug.Log ("I'm about to hit the ground!");
}
}
}
4.if语句
using UnityEngine; using System.Collections; public class IfStatements : MonoBehaviour { float coffeeTemperature = 85.0f; float hotLimitTemperature = 70.0f; float coldLimitTemperature = 40.0f; void Update () { if(Input.GetKeyDown(KeyCode.Space)) TemperatureTest(); coffeeTemperature -= Time.deltaTime * 5f; } void TemperatureTest () { // If the coffee's temperature is greater than the hottest drinking temperature... if(coffeeTemperature > hotLimitTemperature) { // ... do this. print("Coffee is too hot."); } // If it isn't, but the coffee temperature is less than the coldest drinking temperature... else if(coffeeTemperature < coldLimitTemperature) { // ... do this. print("Coffee is too cold."); } // If it is neither of those then... else { // ... do this. print("Coffee is just right."); } } }
5.循环语句
for循环
using UnityEngine; using System.Collections; public class ForLoop : MonoBehaviour { int numEnemies = 3; void Start () { for(int i = 0; i < numEnemies; i++) { Debug.Log("Creating enemy number: " + i); } } }
while循环
using UnityEngine; using System.Collections; public class WhileLoop : MonoBehaviour { int cupsInTheSink = 4; void Start () { while(cupsInTheSink > 0) { Debug.Log ("I've washed a cup!"); cupsInTheSink--; } } }
dowhile循环
using UnityEngine; using System.Collections; public class DoWhileLoop : MonoBehaviour { void Start() { bool shouldContinue = false; do { print ("Hello World"); }while(shouldContinue == true); } }
foreach循环
using UnityEngine; using System.Collections; public class ForeachLoop : MonoBehaviour { void Start () { string[] strings = new string[3]; strings[0] = "First string"; strings[1] = "Second string"; strings[2] = "Third string"; foreach(string item in strings) { print (item); } } }
6.Awake and Strart
using UnityEngine; using System.Collections; public class AwakeAndStart : MonoBehaviour { void Awake () { Debug.Log("Awake called."); } void Start () { Debug.Log("Start called."); } }
7.Update and FixedUpdate
using UnityEngine; using System.Collections; public class UpdateAndFixedUpdate : MonoBehaviour { void FixedUpdate () { Debug.Log("FixedUpdate time :" + Time.deltaTime); } void Update () { Debug.Log("Update time :" + Time.deltaTime); } }
8.Scope and Access Modifiers
ScopeAndAccessModifiers
using UnityEngine; using System.Collections; public class ScopeAndAccessModifiers : MonoBehaviour { public int alpha = 5; private int beta = 0; private int gamma = 5; private AnotherClass myOtherClass; void Start () { alpha = 29; myOtherClass = new AnotherClass(); myOtherClass.FruitMachine(alpha, myOtherClass.apples); } void Example (int pens, int crayons) { int answer; answer = pens * crayons * alpha; Debug.Log(answer); } void Update () { Debug.Log("Alpha is set to: " + alpha); } }
AnotherClass
using UnityEngine; using System.Collections; public class AnotherClass { public int apples; public int bananas; private int stapler; private int sellotape; public void FruitMachine (int a, int b) { int answer; answer = a + b; Debug.Log("Fruit total: " + answer); } private void OfficeSort (int a, int b) { int answer; answer = a + b; Debug.Log("Office Supplies total: " + answer); } }
9.启用和禁用组件
using UnityEngine; using System.Collections; public class EnableComponents : MonoBehaviour { private Light myLight; void Start () { myLight = GetComponent<Light>(); } void Update () { if(Input.GetKeyUp(KeyCode.Space)) { myLight.enabled = !myLight.enabled; } } }
10.平移和旋转`
using UnityEngine; using System.Collections; public class TransformFunctions : MonoBehaviour { public float moveSpeed = 10f; public float turnSpeed = 50f; void Update () { if(Input.GetKey(KeyCode.UpArrow)) transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime); if(Input.GetKey(KeyCode.DownArrow)) transform.Translate(-Vector3.forward * moveSpeed * Time.deltaTime); if(Input.GetKey(KeyCode.LeftArrow)) transform.Rotate(Vector3.up, -turnSpeed * Time.deltaTime); if(Input.GetKey(KeyCode.RightArrow)) transform.Rotate(Vector3.up, turnSpeed * Time.deltaTime); } }
11.激活游戏对象
ActiveObjects
using UnityEngine;
using System.Collections;
public class ActiveObjects : MonoBehaviour
{
void Start ()
{
gameObject.SetActive(false);
}
}
CheckState
using UnityEngine;
using System.Collections;
public class CheckState : MonoBehaviour
{
public GameObject myObject;
void Start ()
{
Debug.Log("Active Self: " + myObject.activeSelf);
Debug.Log("Active in Hierarchy" + myObject.activeInHierarchy);
}
}
12.Look At
CameraLookat
using UnityEngine;
using System.Collections;
public class CameraLookAt : MonoBehaviour
{
public Transform target;
void Update ()
{
transform.LookAt(target);
}
}
13.Destroy
DestroyBasic
using UnityEngine;
using System.Collections;
public class DestroyBasic : MonoBehaviour
{
void Update ()
{
if(Input.GetKey(KeyCode.Space))
{
Destroy(gameObject);
}
}
}
DestroyOther
using UnityEngine; using System.Collections; public class DestroyOther : MonoBehaviour { public GameObject other; void Update () { if(Input.GetKey(KeyCode.Space)) { Destroy(other); } } }
DestroyComponent
using UnityEngine;
using System.Collections;
public class DestroyComponent : MonoBehaviour
{
void Update ()
{
if(Input.GetKey(KeyCode.Space))
{
Destroy(GetComponent<MeshRenderer>());
}
}
}
14.线性插值
在进行游戏时,有时可以在两个值之间进行线性插值。这是通过一个名为Lerp的函数完成的。线性插值是指在两个给定的值之间找到一个一定百分比的值。例如,我们可以在数字3和5之间进行线性插值,得到数字4,这是因为4是介于3和5之间的50%。
在联合中,有几个LERP函数可以用于不同的类型。对于我们刚才使用的例子,等效的是Mathf.Lerp函数,如下所示:
// In this case, result = 4
float result = Mathf.Lerp (3f, 5f, 0.5f);
Lerp函数接受3个浮动参数:一个表示要插值的值,另一个表示要插值的值,最后一个浮点数表示插值的距离。在这种情况下,插值值为0.5,即50%。如果为0,则该函数将返回“FROM”值,如果为1时,该函数将返回“to”值。
Lerp函数的其他示例包括Col.Lerp和Vector3.Lerp。这些工作方式与Mathf.Lerp完全相同,但“From”和“to”值分别为Color和Vector 3类型。在每种情况下,第三个参数仍然是一个浮点数,表示要插值多少。这些函数的结果是找到一个颜色,它是两个给定颜色的混合,一个向量,是两个给定向量之间的某个百分比。
让我们看另一个例子:
Vector3 from = new Vector3 (1f, 2f, 3f);
Vector3 to = new Vector3 (5f, 6f, 7f);
// Here result = (4, 5, 6)
Vector3 result = Vector3.Lerp (from, to, 0.75f);
在这种情况下,结果是(4,5,6),因为4是1到5之间的75%,5是2到6之间的75%,6是3到7之间的75%。
在使用Col.Lerp时也应用了相同的原理。在颜色结构中,颜色由代表红色、蓝色、绿色和α的4个浮标表示。当使用LERP时,这些浮点数就像Mathf.Lerp和Vector3.Lerp一样被内插。
在某些情况下,Lerp函数可以用来平滑随时间变化的值。考虑以下代码:
void Update ()
{
light.intensity = Mathf.Lerp(light.intensity, 8f, 0.5f);
}
如果光的强度从0开始,那么在第一次更新之后,它将被设置为4。下一帧将设置为6,然后设置为7,然后设置为7.5等等。因此,在几个帧,灯光强度将倾向于8,但其变化速度将放缓,因为它接近它的目标。注意,这发生在几个帧的过程中。如果我们希望它不依赖于帧速率,那么我们可以使用以下代码:
voidUpdate(){light.强度= Mathf.Lerp(光强,8f,0.5F * Time.deltaTime); }
void Update ()
{
light.intensity = Mathf.Lerp(light.intensity, 8f, 0.5f * Time.deltaTime);
}
强度的变化将发生在每秒而不是每帧。
请注意,当平滑一个值时,通常最好使用SmoothDamp函数。只有当你确信你想要的效果时,才使用LERP来平滑。
15.GetButton and GetKey
KeyInput
using UnityEngine; using System.Collections; public class KeyInput : MonoBehaviour { public GUITexture graphic; public Texture2D standard; public Texture2D downgfx; public Texture2D upgfx; public Texture2D heldgfx; void Start() { graphic.texture = standard; } void Update () { bool down = Input.GetKeyDown(KeyCode.Space); bool held = Input.GetKey(KeyCode.Space); bool up = Input.GetKeyUp(KeyCode.Space); if(down) { graphic.texture = downgfx; } else if(held) { graphic.texture = heldgfx; } else if(up) { graphic.texture = upgfx; } else { graphic.texture = standard; } guiText.text = " " + down + "\n " + held + "\n " + up; } }
ButtonInput
using UnityEngine; using System.Collections; public class ButtonInput : MonoBehaviour { public GUITexture graphic; public Texture2D standard; public Texture2D downgfx; public Texture2D upgfx; public Texture2D heldgfx; void Start() { graphic.texture = standard; } void Update () { bool down = Input.GetButtonDown("Jump"); bool held = Input.GetButton("Jump"); bool up = Input.GetButtonUp("Jump"); if(down) { graphic.texture = downgfx; } else if(held) { graphic.texture = heldgfx; } else if(up) { graphic.texture = upgfx; } else { graphic.texture = standard; } guiText.text = " " + down + "\n " + held + "\n " + up; } }
16.GetComponent
UsingOtherComponents
using UnityEngine; using System.Collections; public class UsingOtherComponents : MonoBehaviour { public GameObject otherGameObject; private AnotherScript anotherScript; private YetAnotherScript yetAnotherScript; private BoxCollider boxCol; void Awake () { anotherScript = GetComponent<AnotherScript>(); yetAnotherScript = otherGameObject.GetComponent<YetAnotherScript>(); boxCol = otherGameObject.GetComponent<BoxCollider>(); } void Start () { boxCol.size = new Vector3(3,3,3); Debug.Log("The player's score is " + anotherScript.playerScore); Debug.Log("The player has died " + yetAnotherScript.numberOfPlayerDeaths + " times"); } }
AnotherScript
using UnityEngine;
using System.Collections;
public class AnotherScript : MonoBehaviour
{
public int playerScore = 9001;
}
YetAnotherScript
using UnityEngine;
using System.Collections;
public class YetAnotherScript : MonoBehaviour
{
public int numberOfPlayerDeaths = 3;
}
17.OnMouseDown
MouseClick
using UnityEngine;
using System.Collections;
public class MouseClick : MonoBehaviour
{
void OnMouseDown ()
{
rigidbody.AddForce(-transform.forward * 500f);
rigidbody.useGravity = true;
}
}
18.GetAxis
AxisExample
using UnityEngine; using System.Collections; public class AxisExample : MonoBehaviour { public float range; public GUIText textOutput; void Update () { float h = Input.GetAxis("Horizontal"); float xPos = h * range; transform.position = new Vector3(xPos, 2f, 0); textOutput.text = "Value Returned: "+h.ToString("F2"); } }
AxisRawExample
using UnityEngine; using System.Collections; public class AxisRawExample : MonoBehaviour { public float range; public GUIText textOutput; void Update () { float h = Input.GetAxisRaw("Horizontal"); float xPos = h * range; transform.position = new Vector3(xPos, 2f, 0); textOutput.text = "Value Returned: "+h.ToString("F2"); } }
DualAxisExample
using UnityEngine; using System.Collections; public class DualAxisExample : MonoBehaviour { public float range; public GUIText textOutput; void Update () { float h = Input.GetAxis("Horizontal"); float v = Input.GetAxis("Vertical"); float xPos = h * range; float yPos = v * range; transform.position = new Vector3(xPos, yPos, 0); textOutput.text = "Horizontal Value Returned: "+h.ToString("F2")+"\nVertical Value Returned: "+v.ToString("F2"); } }
19.DeltaTime
using UnityEngine; using System.Collections; public class UsingDeltaTime : MonoBehaviour { public float speed = 8f; public float countdown = 3.0f; void Update () { countdown -= Time.deltaTime; if(countdown <= 0.0f) light.enabled = true; if(Input.GetKey(KeyCode.RightArrow)) transform.position += new Vector3(speed * Time.deltaTime, 0.0f, 0.0f); } }
20.Classes
SingleCharacterScript
using UnityEngine; using System.Collections; public class SingleCharacterScript : MonoBehaviour { public class Stuff { public int bullets; public int grenades; public int rockets; public Stuff(int bul, int gre, int roc) { bullets = bul; grenades = gre; rockets = roc; } } public Stuff myStuff = new Stuff(10, 7, 25); public float speed; public float turnSpeed; public Rigidbody bulletPrefab; public Transform firePosition; public float bulletSpeed; void Update () { Movement(); Shoot(); } void Movement () { float forwardMovement = Input.GetAxis("Vertical") * speed * Time.deltaTime; float turnMovement = Input.GetAxis("Horizontal") * turnSpeed * Time.deltaTime; transform.Translate(Vector3.forward * forwardMovement); transform.Rotate(Vector3.up * turnMovement); } void Shoot () { if(Input.GetButtonDown("Fire1") && myStuff.bullets > 0) { Rigidbody bulletInstance = Instantiate(bulletPrefab, firePosition.position, firePosition.rotation) as Rigidbody; bulletInstance.AddForce(firePosition.forward * bulletSpeed); myStuff.bullets--; } } }
Inventory
using UnityEngine; using System.Collections; public class Inventory : MonoBehaviour { public class Stuff { public int bullets; public int grenades; public int rockets; public float fuel; public Stuff(int bul, int gre, int roc) { bullets = bul; grenades = gre; rockets = roc; } public Stuff(int bul, float fu) { bullets = bul; fuel = fu; } // Constructor public Stuff () { bullets = 1; grenades = 1; rockets = 1; } } // Creating an Instance (an Object) of the Stuff class public Stuff myStuff = new Stuff(50, 5, 5); public Stuff myOtherStuff = new Stuff(50, 1.5f); void Start() { Debug.Log(myStuff.bullets); } }
MovementControls
using UnityEngine; using System.Collections; public class MovementControls : MonoBehaviour { public float speed; public float turnSpeed; void Update () { Movement(); } void Movement () { float forwardMovement = Input.GetAxis("Vertical") * speed * Time.deltaTime; float turnMovement = Input.GetAxis("Horizontal") * turnSpeed * Time.deltaTime; transform.Translate(Vector3.forward * forwardMovement); transform.Rotate(Vector3.up * turnMovement); } }
Shooting
using UnityEngine; using System.Collections; public class Shooting : MonoBehaviour { public Rigidbody bulletPrefab; public Transform firePosition; public float bulletSpeed; private Inventory inventory; void Awake () { inventory = GetComponent<Inventory>(); } void Update () { Shoot(); } void Shoot () { if(Input.GetButtonDown("Fire1") && inventory.myStuff.bullets > 0) { Rigidbody bulletInstance = Instantiate(bulletPrefab, firePosition.position, firePosition.rotation) as Rigidbody; bulletInstance.AddForce(firePosition.forward * bulletSpeed); inventory.myStuff.bullets--; } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。