unity或c++学习记录(记录一下学习过程)

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

会跟据你此时的帧率调整大小,使数据跟随时间变化,从而使运动之类的变得顺畅。

因为你帧率是在随时变化的,完成一帧所用的时间也是在变化的,如果每帧移动固定的距离,运动看起来可能会很不顺畅,所以需要这个东西来调整。

上一篇:【Unity源码】Transform


下一篇:k8s各版本对应支持的docker版本列表