1、AudioSource.PlayClipAtPoint
1、AudioSource.PlayClipAtPoint
[任务13:10-第一个食物的随机生成]
导入(老师是说加上)UnityEngine.UI
要在最开头
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
加上using UnityEngine.UI;
就是这样
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
下面附上本节课的代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class FoodMaker : MonoBehaviour {
public int xlimit = 20;
public int ylimit = 11;
public int xoffset = 8;
public GameObject foodPrefab;
public Sprite[] foodSprites;
private Transform foodHolder;
private void Start()
{
foodHolder=GameObject.Find("FoodHolder").transform;
MakeFood();
}
void MakeFood()
{
int index = Random.Range(0, foodSprites.Length);
GameObject food = Instantiate(foodPrefab);
food.GetComponent<Image>().sprite = foodSprites[index];
food.transform.SetParent(foodHolder, false);
int x = Random.Range(-xlimit + xoffset, xlimit);
int y = Random.Range(-ylimit , ylimit);
food.transform.localPosition = new Vector3(x * 30, y * 30, 0);
}
}
isTrigger属性要打上勾,不会和别人碰撞,但是会记住谁撞的我,只勾上一个蛇头,别的不用勾了。
step的值设的太小的话,设为1的时候,蛇移动的速度非常的慢,会令人以为蛇动不了,可以把值设的大些如20 。
int xlimit=21,;int ylimit=11;
int xoffset =7;
Transform FoodHolder;
GameObject food;
Sprite[] footSprites;
int index = Random.Range(0,foodSprite.
length);
GameObject foood= Instantiate(food);
using UnityEngine;
public class snakehesd : MonoBehaviour
{
public float velocity=0.35f;
public int step;
private int x;
private int y;
private Vector3 HeadPos;
void Start()
{
InvokeRepeating("Move", 0, velocity);
x=0;y=step;
}
void Update()
{
if(Input.GetKeyDown(KeyCode.Space))
{
CancelInvoke();
InvokeRepeating("Move",0,velocity-0.2f);
}
if(Input.GetKeyUp(KeyCode.Space))
{
CancelInvoke();
InvokeRepeating("Move",0,velocity);
}
if (Input.GetKey(KeyCode.W)&&y!=-step)
{
gameObject.transform.localRotation=Quaternion.Euler(0,0,0);
x=0;y=step;
}
if (Input.GetKey(KeyCode.S)&&y!=step)
{
gameObject.transform.localRotation=Quaternion.Euler(0,0,180);
x=0;y=-step;
}
if (Input.GetKey(KeyCode.A)&&x!=step)
{
gameObject.transform.localRotation=Quaternion.Euler(0,0,90);
x=-step;y=0;
}
if (Input.GetKey(KeyCode.D)&&x!=-step)
{
gameObject.transform.localPlocalRotationosition=Quaternion.Euler(0,0,-90);
x=step;y=0;
}
}
void Move()
{
HeadPos=gameObject.transform.localPosition;
gameObject.transform.localPosition=new Vector3(HeadPos.x+x,HeadPos.y+y,HeadPos.z);
}
}
Shadow 阴影
Outline 轮廓
overl
void Makefood()
{
}
invokerepeating(gameobject, delaytime, longtime)
food.transform.SetParent(foodHolder, false);
private static FoodMake _instance;
public static FoodMake Instance
{
get
{
return _instance;
}
}
边界传送
加body的tag
再碰撞方法里加入该标签的判断 (这都是模板了)方法留空Debug.Log 多边界用switch
直接把蛇头坐标移到对面 弹下去还要走一步以避免碰撞
按30一格就是好算
注意case是冒号
奖励生成
reward prefab
额外生成
给makefood 加一个形参 bool isReward
start里将其设为flase
在sh里的调用 做一个判断 用随机数1~100来做一个概率器
true的时候额外生成
奖励目标生成把食物的语法复制一下 把int删掉就不用改名了 把名字改全
再在碰撞器里加一下判断
注意:锚点设置技巧,靠哪近放在哪
1.将Start场景复制
2.删掉不需要的东西
3.控制面板保存三个Text,“无尽模式”、“得分:0”、“长度:0”
4.添加两个图片,添加Button控件,Home键和暂停键
image与canvas对齐方法:右边的边框按alt后选最后对齐
锚点和四个点的关系保持相对静止
分数与长度的记录 nameSpace 空间
变量 分数/长度 两个公共text 注意Text 类型要大写 拖 拿到背景
方法一 做一个改UI的方法
单例 要加一个单例因为要在外面访问 直接把那个复制过来 我觉得可以建一个模板库
awake里 给单例赋值
再在sh脚本里吃掉方法里调用更新UI方法
方法2 等级成长 score/100 switch 换背景
改颜色 bgImage.color=new Color();
color tool用#号: ColorUtility.TryParseHtmlString((#。。。,out 输出的参数) 要一个东西存一下private Color tempColor;
颜色编号顺序 蓝绿黄橙红
//引用library
using System.Collections;
//调用方法
StartCoroutine(gameOver(1.5f));
//写携程方法 IEnumerator
IEnumerator gameOver(float t)
{
yield return new WaitForSeconds(t);
UnityEngine.SceneManagement.SceneManager.LoadScene(1);
}
PlayerPrefs.SetInt("lastl" ,)
1.在四个边界处分别创造四个碰撞器
创建上边界:创建空物体,长度1280,宽度10,设置锚点在上边,添加BoxColider2D碰撞器组件,将碰撞器的长度设为1280,宽度10
同理创建其他碰撞器,注意锚点
2.为边界添加控件Image,如果游戏是边界模式,会现实Image,颜色设为红色
alt点 canvas rect transform可以拉伸
outline 描边组件
shadow阴影组件