Unity C#代码入门
Unity C#代码入门
1. 脚本基本结构
1.1 unity生成的模板
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
//设置初始值,相当于构造函数
}
// Update is called once per frame
void Update()
{
//不停循环执行的代码
}
}
1.2 常用的注解属性
[SerializeField]
float moveSpeed = 8;
Debug.Log("Celling");//控制台输出
other.gameObject.tag == "Celling"//获得tag
csharp如果不标明类别, 默认pravite
加上SerializeField, 能让pravite的变量, 在unity右侧直接调节
Time.deltaTime
不同的机器, 游戏帧数不同, Time.deltaTime可以让机器用相同的帧数执行
1.3 常见的类
类名 | 解释 |
---|---|
Text | 得到UI的text(需要导入using UnityEngine.UI;) |
Animator | 动画 |
SpriteRenderer | 渲染器(改变物体的外观?) |
GameObject | 获取游戏内物体 |
2. 源码解析
public class Player : MonoBehaviour
{
//类名必须一致
}
2.1 初始值定义
void Start()
{
HP = 10;
score = 0;
scoreTime = 0f;
anim = GetComponent<Animator>();
render = GetComponent<SpriteRenderer>();
deathSound = GetComponent<AudioSource>();
}
GetComponent();获得的是当前类的组件AudioSource, 由于获取的是类的引用, 因此可以改变类的属性.
2.2 循环执行函数
void Update()
{
if (Input.GetKey(KeyCode.RightArrow))
{
transform.Translate(moveSpeed * Time.deltaTime, 0, 0);
render.flipX = false;
anim.SetBool("run", true);
}
else if (Input.GetKey(KeyCode.LeftArrow))
{
transform.Translate(-moveSpeed * Time.deltaTime, 0, 0);
render.flipX = true;
anim.SetBool("run", true);
}
else
{
anim.SetBool("run", false);
}
UpdateScore();
}
2.2.1 键盘监听函数
Input.GetKey(KeyCode.RightArrow) //输入的是右边箭头
2.2.2 变换属性 transform
transform.Translate(moveSpeed * Time.deltaTime, 0, 0);
将向x轴移动一定的距离
其实就是右侧的这些属性, 因此Rotation旋转, Scale缩放都能调整
render.flipX = false;
GetComponent<SpriteRenderer>().flipX = false;
同理:
anim.SetBool("run", true);
GetComponent<Animator>().SetBool("run", true);
动画也是如此
当然动画要复杂些
2.3 碰撞函数
void OnCollisionEnter2D(Collision2D other)
{
if (other.gameObject.tag == "Normal")
{
if (other.contacts[0].normal == new Vector2(0f, 1f))
{
currentFloor = other.gameObject;
ModifyHp(1);
other.gameObject.GetComponent<AudioSource>().Play();
Debug.Log("floor1");
}
}
else if (other.gameObject.tag == "Nails")
{
if (other.contacts[0].normal == new Vector2(0f, 1f))
{
currentFloor = other.gameObject;
ModifyHp(-2);
Debug.Log("floor2");
anim.SetTrigger("hurt");
other.gameObject.GetComponent<AudioSource>().Play();
}
}
else if (other.gameObject.tag == "Celling")
{
if (other.contacts[0].normal == new Vector2(0f, -1f))
{
currentFloor.GetComponent<BoxCollider2D>().enabled = false;
ModifyHp(-2);
Debug.Log("Celling");
anim.SetTrigger("hurt");
other.gameObject.GetComponent<AudioSource>().Play();
}
}
}
所谓碰撞就是, 遇到other这个物体会和它发生物理效果, 而不是穿过
2.3.1 碰撞检测精确到边
other.contacts[0].normal == new Vector2(0f, 1f)
//normal就是法向量
2.4 穿过函数
void OnTriggerEnter2D(Collider2D other)
{
if (other.gameObject.tag == "DeadLine")
{
ModifyHp(-12);
Die();
}
}
2.5 操作子组件
void UpdateHpBar()
{
for (int i = 0; i < HpBar.transform.childCount; i++)
{
if (HP > i)
{
HpBar.transform.GetChild(i).gameObject.SetActive(true);
}
else
{
HpBar.transform.GetChild(i).gameObject.SetActive(false);
}
}
}
主要是对gameObject的操作
3. 常用函数
3.1 结束游戏
void Die()
{
deathSound.Play();
Time.timeScale = 0f; //时间静止
btnReplay.SetActive(true);
}
3.2 重启游戏
//需要使用以下命名空间
using UnityEngine.SceneManagement;
public void Replay()
{
Time.timeScale = 1;
/*重新加载场景*/
SceneManager.LoadScene("SampleScene");
}
3.3 销毁物体
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Floor : MonoBehaviour
{
[SerializeField] float moveSpeed = 1f;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
transform.Translate(0,moveSpeed * Time.deltaTime,0);
if(transform.position.y>=4.7f)
{
Destroy(gameObject);
transform.parent.GetComponent<FloorManager>().SpwanFloor();
}
}
}
3.4 生成新的物体
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FloorManager : MonoBehaviour
{
[SerializeField] GameObject[] floorPerfabs;
public void SpwanFloor()
{
int r = Random.Range(0,2);
GameObject floor = Instantiate(floorPerfabs[r],transform);
floor.transform.position = new Vector3(Random.Range(-3.8f,3.8f),-5,0);
}
}
Unity C#代码入门的更多相关文章
- Unity实现代码控制音频播放
前言 很久没说过Unity了,现在说一下Unity用代码控制音频播放 准备工作 1.需要播放的音频 2.给需要加声音的对象加Audio Source组件 3.新建Play脚本,并绑定需要播放声音的对象 ...
- unity对话代码
这个是根据网上unity GUI打字机教程修改的 原教程是JS,我给改成了C#,然后增加了许多功能 这个教程能实现一段文字对话,有打字机显示效果,能写许多对话,能快进对话,总之现在RPG游戏里有的功能 ...
- 微软IOC容器Unity简单代码示例3-基于约定的自动注册机制
@(编程) [TOC] Unity在3.0之后,支持基于约定的自动注册机制Registration By Convention,本文简单介绍如何配置. 1. 通过Nuget下载Unity 版本号如下: ...
- 微软IOC容器Unity简单代码示例2-配置文件方式
@(编程) 1. 通过Nuget下载Unity 这个就不介绍了 2. 接口代码 namespace UnityDemo { interface ILogIn { void Login(); } } n ...
- 微软IOC容器Unity简单代码示例1
@(编程) 1. 通过Nuget下载Unity 这个就不介绍了 2. 接口代码 namespace UnityDemo { interface ILogIn { void Login(); } } 3 ...
- 千行代码入门Python
这个是从网上找到的一份快速入门python的极简教程,大概一千行左右,个人觉得不错,特此收藏以备后用. # _*_ coding: utf-8 _*_ """类型和运算- ...
- ue4 代码入门
官网:暴露游戏元素给蓝图 https://docs.unrealengine.com/latest/CHN/Engine/Blueprints/TechnicalGuide/ExtendingBlue ...
- Tensorflow MNIST 数据集测试代码入门
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50614444 测试代码已上传至GitH ...
- Tensorflow MNIST 数据集測试代码入门
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50614444 測试代码已上传至GitH ...
- 使用rider做为unity的代码编辑器
使用Rider做的编写Unity代码的IDE,记录一些与VS不相同的笔记 安装和设置方法: 我使用Rider 2019.1 + Unity3D 2018.3.4,在安装完Rider之后,在Unity中 ...
随机推荐
- 力扣53. 最大子数组和(dp)
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 子数组 是数组中的一个连续部分. 示例 1: 输入:nums = [-2,1,-3,4,-1 ...
- 远程连接linux桌面
https://zhuanlan.zhihu.com/p/127265014 https://zhuanlan.zhihu.com/p/93438433
- 【Windows】IP 地址变为 169.254.x.x 的解决方法
最近每次开机 IP 地址都会自动跳至 169.254.x.x 段,连接不上网络,设置了固定 IP 也会跳段.因此找到以下解决方法: 『IP地址变成169.254.x.x 和固定ip两个IP地址的解决办 ...
- PowerShell学习笔记五_模块
PowserShell其他技巧 1. 执行完一个ps1文件后,不回收 有一个场景,在fun.ps1中,仅仅写了一段 Funtion fun([String] input) { } 然后打开PowerS ...
- How to Avoid Trivial Solutions in Physics-Informed Neural Networks
未发表(2021) 本文也是关注采样点的一篇工作.主要从PINN的性能与采样点数量的关系方面入手考虑.提出了一个新的惩罚项,并对采样策略提出了一点看法. 本文的工作相对比较直观,简单,效果可能并不是很 ...
- ABC136 E - Max GCD 题解
题面 给定一个长度为 $N$ 的整数序列:$A_1, A_2, \ldots, A_n$. 您可以执行以下操作 $0 \sim K$ 次: 选择两个整数 $i$ 和 $j$,满足 $i \ne j$ ...
- 在Vue中实现app拍照-选取本地图库-图片上传成功后预览
基于Vue和uni-app实现手机app的功能实现和打包.拍照功能和选取本地图片使用的是HTML5的API 实现. 我为测试这个功能使用node写了个本地服务器,对于手机调试,可以通过连接同一个无线网 ...
- C# Linq查本集合中不包含于另一个集合的元素
public void Linq() { List<Product> products = GetProductList(); List<Customer> customers ...
- c++dump
//Minidump.h #pragma once class CMinidump { public: CMinidump(); ~CMinidump(); static void CreateDum ...
- unity 变体 随手记
1 #pragma multi_compile AAA BBB#pragma multi_compile CCC DDDAAA CCCAAA DDDBBB CCCBBB DDD------------ ...