源码:键盘方向键操作小球滚动吃金币Unity3D源码
下篇:Unity3D学习笔记(三、小球跑酷)
一、颜色材质球创建
三、围墙
同理二,新建Cube,并调整属性,设立围墙
四、新建小球,并给小球赋予相关属性
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Ball : MonoBehaviour
{
Rigidbody r;
// Start is called before the first frame update
void Start()
{
r = GetComponent();
}
// Update is called once per frame
void Update()
{
float x = Input.GetAxis("Horizontal");//让系统知道玩家按下了方向键的左右
float z = Input.GetAxis("Vertical");//让系统知道玩家按下了方向键的前后
Vector3 f = new Vector3(x,0,z);//把玩家的输入操作打包在一个力f里面
r.AddForce(f*5);//给小球施加力f
}
}
五,创建金币
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Coin : MonoBehaviour
{
private void OnTriggerEnter(Collider other)
{
Destroy(gameObject);//触碰的时候消失
}
}
注:金币需要勾选属性 Is Trigger
六、运行
七:小结
物体增加 RigidBody 属性,代表给于物体刚体属性;
作用:添加了刚体组件的游戏物体,可以在物体系统的控制下来运动,刚体可接受外力和扭矩力用来保证游戏对象像在真实世界中那样进行运动。任何游戏对象只有添加了刚体组件才能受到重力的影响,通过脚本为游戏对象添加的作用力以及通过NVIDIA物体引擎与其他的游戏对象发生互动的运算都需要游戏对象添加了刚体组件。没有刚体(RigidBody)组件,游戏对象之间可以相互穿透,不会产生碰撞。
C# 脚本中
声明对象 RigidBody ballRigidBody;
刚体对象实体化:ballRigidBody = new GetComponent
刚体对象施加力:ballRigidBody.addForce(****);
Is trigger 触发器:启用;
OnTriggerEnter (触发事件) | OnCollisionEnter(碰撞事件) |
碰撞双方必须是碰撞体(Conllision) | 碰撞双方必须是碰撞体(Conllision) |
碰撞双方其中一个必须是刚体(Rigidbody) | 碰撞的主动方必须是刚体(Rigidbody) |
碰撞双方其中一个碰撞体必须勾选IsTrigger选项 | 碰撞体不能勾选IsTrigger |
刚体的IsKinematic选项可以勾选也可以不勾选 | 刚体不能勾选IsKinematic |
Vector3是一个表示方向的类,既有大小也有方向
Vector3 v=new Vector3();
Vector3.up; 表示世界坐标系中y轴正方向上的单位向量。(0,1,0)
Vector3.down; 表示世界坐标系中y轴负方向上的单位向量。(0,-1,0)
Vector3.right; 表示世界坐标系中x轴正方向上的单位向量。(1,0,0)
Vector3.left; 表示世界坐标系中x轴负方向上的单位向量。(-1,0,0)
Vector3.forward; 表示世界坐标系中z轴正方向上的单位向量。(0,0,1)
Vector3.back; 表示世界坐标系中z轴负方向上的单位向量。(0,0,-1)
Vector3.zero; 表示世界坐标系中的原点。 (0,0,0)
也可以Vector3 v=new Vector3(x,y,z);<<<<创建对象时初始化
Input.GetAxis(string axisname)方法返回一个float 类型的数。范围在-1到1之间,如果获取的是鼠标的运动,则不再是-1到1之间,它会随你的鼠标速度变化。
1.触屏类:
1. MouseX 鼠标按着并沿着屏幕X轴方向滑动时触发
2. MouseY 鼠标按着并沿着屏幕Y轴方向滑动时触发
3. Mouse ScrollWheel 当鼠标滚动轮滚动时触发
2.键盘操作类:
1. Vertical 对应键盘上面的上下箭头,当按下上或下箭头时触发
2. Horizontal 对应键盘上面的左右箭头,当按下左或右箭头时触发
有关接收键盘信息的方法:
参数:key———键盘上的某个键。
返回值:bool———当通过名称指定的按键被用户按住时返回true
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour
{
void Update()
{
if (Input.GetKey(KeyCode.UpArrow))
{
print("up arrow key is held down");
}
if (Input.GetKey(KeyCode.DownArrow))
{
print("down arrow key is held down");
}
}
}
它还有一个重载方法: public static bool GetKey(string name),它的参数为字符串
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour
{
void Update()
{
if (Input.GetKey("up"))
{
print("up arrow key is held down");
}
if (Input.GetKey("down"))
{
print("down arrow key is held down");
}
}
}
当用户按下指定名称的按键期间的帧返回true。
您需要从Update函数调用此函数,因为每个帧都会重置状态。在用户释放该键并再次按下该键之前,它不会返回true。
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour
{
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
print("space key was pressed");
}
}
}
重载方法:public static bool GetKeyDown(string name)
在用户释放给定名字的按键的那一帧返回true。
您需要从Update函数调用此函数,因为每个帧都会重置状态。在用户按下键并再次释放它之前,它不会返回true
using UnityEngine;
public class Example : MonoBehaviour
{
void Update()
{
if (Input.GetKeyUp(KeyCode.Space))
{
print("space key was released");
}
}
}
重载方法:public static bool GetKeyUp(string name)
4、物体随着按键的方向移动例子
void Update()
{
if (Input.GetKey(KeyCode.RightArrow) || Input.GetKey(KeyCode.D))
dir = Vector2.right;
else if (Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.A))
dir = Vector2.left;
else if (Input.GetKey(KeyCode.DownArrow) || Input.GetKey(KeyCode.S))
dir = Vector2.down;
else if (Input.GetKey(KeyCode.UpArrow) || Input.GetKey(KeyCode.W))
dir = Vector2.up;
}