Unity c#
Destroy语句
用于销毁unity中的整个对象或某个组件,Destroy(gameObject)
也可以在后面跟数字,来产生延迟销毁的效果 Destroy(gameObject,3f)延迟三秒销毁
线性插值
float result = Mathf.Lerp (3f, 5f, 0.5f);
线性插值是通过Lerp 函数来完成的。线性插值会在两个给定值之间找到某个百分比的值。
如上例最后result的值会为4,因为 4 是 3 和 5 之间距离的 50%与3的和。
Mathf.Lerp 函数接受 3 个 float 参数:一个 float 参数表示要进行插值的起始值,另一个 float 参数表示要进行插值的结束值,最后一个 float 参数表示要进行插值的距离。在此示例中,插值为 0.5,表示 50%。如果为 0,则函数将返回“from”值;如果为 1,则函数将返回“to”值。
Lerp 函数的其他示例包括 Color.Lerp 和 Vector3.Lerp。这些函数的工作方式与 Mathf.Lerp 完全相同,但是“from”和“to”值分别为 Color 和 Vector3 类型。在每个示例中,第三个参数仍然是一个 float 参数,表示要插值的大小。这些函数的结果是找到一种颜色(两种给定颜色的某种混合)以及一个矢量(占两个给定矢量之间的百分比)。
Vector3 from = new Vector3 (1f, 2f, 3f);
Vector3 to = new Vector3 (5f, 6f, 7f); // 此处 result = (4, 5, 6)
Vector3 result = Vector3.Lerp (from, to, 0.75f);
在某些情况下,可使用 Lerp 函数使值随时间平滑。请考虑以下代码段:
void Update ()
{
light.intensity = Mathf.Lerp(light.intensity, 8f, 0.5f);
}
可以使光亮随每帧变化而变化
若想要其随时间变化可以改为:
void Update ()
{
light.intensity = Mathf.Lerp(light.intensity, 8f, 0.5f * Time.deltaTime);
}
请注意,在对值进行平滑时,通常情况下最好使用 SmoothDamp 函数。仅当您确定想要的效果时,才应使用 Lerp 进行平滑。
GetKey和GetButton
这两个都起到获取键盘或操作杆的输入的作用,写法上有所区别
bool a=Input.GetKey(KeyCode.Space);
bool held = Input.GetButton("Jump");
KeyCode括号内是KeyCode.按键名称的形式,它以此形式明确指定了按键
GetButton则是获取你设置好的名为Jump的输入,你可以调整jump对应的按键
建议使用GetButton,因为可以自己去修改Jump对应的按键,可读性也相对较好
另外还有GetKeyDown():当通过你所按下指定名称的按键时的那一帧时返回true,记住!是那一帧,就一下的事情,不管你按多久,只是在你按下的那一瞬间
.GetKeyUp():在通过你释放(按键弹起时)给定名字的按键的那一帧返回true,记住!是那一帧,就一下的事情。
GetKey():当通过你所指定的按键被用户按住时返回true,记住!是按住,就是长按的意识,比如你想控制角色在你按住方向键时移动,那么就是用GetKey()
GetButton类似
GetAxis函数
与上文两个不同,GetAxis函数的返回值是浮点型,是-1与1之间的小数,你可以在edit->project setting->input中设置gravity,这个东西是控制你松开按键后返回值减为0的速度的
sensitivity,是控制你按下按键后返回值到达1或-1的速度的
Dead 在用操纵杆操纵时有时候轻微的晃动我们不希望其产生效果,可以通过dead设置盲区,当变化幅度在dead内时不会产生效果
Snap 当你同时按下正负按键时归零,
float h =Input.GetAxisRaw("Horizontal");
float v = Input.GetAxis("Vertical");
Raw的不会返回小数,只会返回正负一,所以也就不存在gravity与sensitivity概念
此适用于精度很高不需要平滑值的时候
OnMouseDown
这个函数用于检测鼠标点击,当有鼠标点击悬挂有该代码的碰撞体或GUI文本时会执行该函数内部的代码。
using UnityEngine;
using System.Collections;
public class MouseClick : MonoBehaviour
{
void onm ouseDown ()
{
rigidbody.AddForce(-transform.forward * 500f);
rigidbody.useGravity = true;
}
}
GetComponet<>()
获取组件用的
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");
}
}
Time.DetalTime
会跟据你此时的帧率调整大小,使数据跟随时间变化,从而使运动之类的变得顺畅。
因为你帧率是在随时变化的,完成一帧所用的时间也是在变化的,如果每帧移动固定的距离,运动看起来可能会很不顺畅,所以需要这个东西来调整。