**前言**:unity使用C#语言来做控制游戏元素的脚本,本笔录使用vs2019编译C#脚本.
一.如何移动
- 使用transform.position,不断改变位置以形成移动.
using UnityEngine;
public class Move : MonoBehaviour
{
//movement speed in units per second
private float movementSpeed = 5f;
void Update()
{
//get the Input from Horizontal axis
// 对应键盘上面的左右箭头,当按下左或右箭头时触发,按键A和D亦可
float horizontalInput = Input.GetAxis("Horizontal");
//get the Input from Vertical axis
//对应键盘上面的上下箭头,当按下上或下箭头时触发,按键W和S亦可
float verticalInput = Input.GetAxis("Vertical");
//update the position
transform.position = transform.position + new Vector3(horizontalInput * movementSpeed * Time.deltaTime, verticalInput * movementSpeed * Time.deltaTime, 0);
//output to log the position change
Debug.Log(transform.position);
}
}
- 另外还可以使用transform.Translate()函数
https://docs.unity.cn/cn/2019.4/ScriptReference/Transform.Translate.html
- 使用velocity为Rigidbody添加速度
https://docs.unity.cn/cn/2019.4/ScriptReference/Rigidbody-velocity.html - 使用AddForce为Rigidbody添加力
https://docs.unity.cn/cn/2019.4/ScriptReference/Rigidbody.AddForce.html - 跳跃也应属移动的一种,我们可以使用velocity或AddForce实现移动,下面以velocity为例:
using UnityEngine;
using System.Collections;
/*
*下面并不是单纯的跳跃代码,而是额外使用了OnCollisionEnter2D()来使得物体不能空中跳跃
*/
public class Velocity : MonoBehaviour
{
public Rigidbody2D rb;
bool Isjumping = false;
void Start()
{
rb = GetComponent<Rigidbody2D>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space)&& !Isjumping)
{
rb.velocity = new Vector3(0, 10, 0);
Debug.Log("jumpyes");
Isjumping = true;
}
}
private void OnCollisionEnter2D(Collision2D collision)
{
Isjumping = false;
}
}
二.如何控制媒体等组件
媒体
- 音乐开/关
//定义
public AudioSource Au;
//赋值
Au = GetComponent<AudioSource>();
//播放
Au.Play();
//暂停
Au.Stop();
- 动画开/关
//定义
public Animation an;
//赋值
an = GetComponent<Animation>();
//播放
an.Play();
//暂停
an.Stop();
非媒体
- sprite切换
//定义sprite数组
public SpriteRenderer SP;
public Sprite[] pic;
//为sprite选用pic[0];
GetComponent<SpriteRenderer>().sprite = pic[0];
三.如何改写UI中的text
- 时间text(int型、float型)
//定义Text
public Text timeText;
//定义时间
float timenum = 60;
//更改内容到timeText,"0"整型形式,"0.0"一位小数形式
timeText.text = timenum.ToString("0");
我们可以将其放入update中形成诸如倒计时等功能
void Update()
{
timenum -= Time.deltaTime;//Time.deltaTime指完成上一帧所用的时间(以秒为单位)(只读)。此属性提供当前帧和上一帧之间的时间。
timeText.text = timenum.ToString("0");
}
- 文本text(string型)
public Text Txt;
Txt.text = "内容";
四.退出程序
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class OutGame : MonoBehaviour
{
public void Quit()
{
#if UNITY_EDITOR
UnityEditor.EditorApplication.isPlaying = false;//编辑状态下退出
#else
Application.Quit();//打包编译后退出
#endif
}
}
五.常用函数
函数名 | 作用 |
---|---|
DestoryImmediate() | 立即销毁对象 |
Destory() | 销毁对象(可以添加销毁延迟) |
OnDestroy() | 当前脚本被销毁时调用 |
Input.GetKey() | 按下某键,持续返回true |
Input.GetKeyDown | 按下某键的一瞬间,返回true |
Input.GetKeyUp | 松开某键的一瞬间,返回true |
Input.GetMouseButton(0) | 持续检测是否按鼠标左键(针对鼠标左中右键,0,1,2三个方法同) |
OnMuseDown | 当鼠标按下 |
OnMouseEnter | 当鼠标进入 |
OnMuseExit | 当鼠标退出 |
OnCollisionEnter(Collision) | 当碰撞开始时,调用该方法一次 |
OnCollisionExit(Collision) | 当碰撞结束时,调用该方法一次 |
OnCollisionStay(Collision) | 当碰撞进行中,持续调用该方法 |
OnTriggerEnter(Collider) | 当碰撞开始时,调用该方法一次 |
OnTriggerExit(Collider) | 当碰撞结束时,调用该方法一次 |
OnTriggerStay(Collider) | 当碰撞进行中,持续调用该方法 |
Invoke() | 延时执行 |
LoadScene() | 跳转场景 |
DontDestroyOnLoad() | 切换场景不摧毁 |
Instantiate() | 克隆对象 |